hwrng: pic32 - use devm_clk_get_enabled
[ Upstream commit6755ad74aa
] Use devm_clk_get_enabled in the pic32 driver. Ensure that the clock is enabled as long as the driver is registered with the hwrng core. Fixes:7ea39973d1
("hwrng: pic32 - Use device-managed registration API") Signed-off-by: Martin Kaiser <martin@kaiser.cx> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5af3c8676b
commit
34f1180658
@ -36,7 +36,6 @@
|
|||||||
struct pic32_rng {
|
struct pic32_rng {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct hwrng rng;
|
struct hwrng rng;
|
||||||
struct clk *clk;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -70,6 +69,7 @@ static int pic32_rng_read(struct hwrng *rng, void *buf, size_t max,
|
|||||||
static int pic32_rng_probe(struct platform_device *pdev)
|
static int pic32_rng_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct pic32_rng *priv;
|
struct pic32_rng *priv;
|
||||||
|
struct clk *clk;
|
||||||
u32 v;
|
u32 v;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -81,13 +81,9 @@ static int pic32_rng_probe(struct platform_device *pdev)
|
|||||||
if (IS_ERR(priv->base))
|
if (IS_ERR(priv->base))
|
||||||
return PTR_ERR(priv->base);
|
return PTR_ERR(priv->base);
|
||||||
|
|
||||||
priv->clk = devm_clk_get(&pdev->dev, NULL);
|
clk = devm_clk_get_enabled(&pdev->dev, NULL);
|
||||||
if (IS_ERR(priv->clk))
|
if (IS_ERR(clk))
|
||||||
return PTR_ERR(priv->clk);
|
return PTR_ERR(clk);
|
||||||
|
|
||||||
ret = clk_prepare_enable(priv->clk);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* enable TRNG in enhanced mode */
|
/* enable TRNG in enhanced mode */
|
||||||
v = TRNGEN | TRNGMOD;
|
v = TRNGEN | TRNGMOD;
|
||||||
@ -98,15 +94,11 @@ static int pic32_rng_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
ret = devm_hwrng_register(&pdev->dev, &priv->rng);
|
ret = devm_hwrng_register(&pdev->dev, &priv->rng);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_register;
|
return ret;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, priv);
|
platform_set_drvdata(pdev, priv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_register:
|
|
||||||
clk_disable_unprepare(priv->clk);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pic32_rng_remove(struct platform_device *pdev)
|
static int pic32_rng_remove(struct platform_device *pdev)
|
||||||
@ -114,7 +106,6 @@ static int pic32_rng_remove(struct platform_device *pdev)
|
|||||||
struct pic32_rng *rng = platform_get_drvdata(pdev);
|
struct pic32_rng *rng = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
writel(0, rng->base + RNGCON);
|
writel(0, rng->base + RNGCON);
|
||||||
clk_disable_unprepare(rng->clk);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user