mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-27 08:05:27 +08:00
hwrng: omap - Remove global definition of hwrng
The omap-rng driver currently assumes that there will only ever be a single instance of an RNG device. For this reason, there is a statically allocated struct hwrng, with a fixed name. However, registering two struct hwrng with the same isn't accepted by the RNG framework, so we need to switch to a dynamically allocated struct hwrng, each using a different name. Then, we define the name of this hwrng to "dev_name(dev)", so the name of the data structure is unique per device. Signed-off-by: Romain Perier <romain.perier@free-electrons.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
69eb4d0190
commit
b23d2d92ce
@ -127,6 +127,7 @@ struct omap_rng_dev {
|
||||
void __iomem *base;
|
||||
struct device *dev;
|
||||
const struct omap_rng_pdata *pdata;
|
||||
struct hwrng rng;
|
||||
};
|
||||
|
||||
static inline u32 omap_rng_read(struct omap_rng_dev *priv, u16 reg)
|
||||
@ -187,12 +188,6 @@ static void omap_rng_cleanup(struct hwrng *rng)
|
||||
priv->pdata->cleanup(priv);
|
||||
}
|
||||
|
||||
static struct hwrng omap_rng_ops = {
|
||||
.name = "omap",
|
||||
.read = omap_rng_do_read,
|
||||
.init = omap_rng_init,
|
||||
.cleanup = omap_rng_cleanup,
|
||||
};
|
||||
|
||||
static inline u32 omap2_rng_data_present(struct omap_rng_dev *priv)
|
||||
{
|
||||
@ -365,7 +360,11 @@ static int omap_rng_probe(struct platform_device *pdev)
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
omap_rng_ops.priv = (unsigned long)priv;
|
||||
priv->rng.read = omap_rng_do_read;
|
||||
priv->rng.init = omap_rng_init;
|
||||
priv->rng.cleanup = omap_rng_cleanup;
|
||||
|
||||
priv->rng.priv = (unsigned long)priv;
|
||||
platform_set_drvdata(pdev, priv);
|
||||
priv->dev = dev;
|
||||
|
||||
@ -376,6 +375,12 @@ static int omap_rng_probe(struct platform_device *pdev)
|
||||
goto err_ioremap;
|
||||
}
|
||||
|
||||
priv->rng.name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL);
|
||||
if (!priv->rng.name) {
|
||||
ret = -ENOMEM;
|
||||
goto err_ioremap;
|
||||
}
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
ret = pm_runtime_get_sync(&pdev->dev);
|
||||
if (ret < 0) {
|
||||
@ -389,7 +394,7 @@ static int omap_rng_probe(struct platform_device *pdev)
|
||||
if (ret)
|
||||
goto err_ioremap;
|
||||
|
||||
ret = hwrng_register(&omap_rng_ops);
|
||||
ret = hwrng_register(&priv->rng);
|
||||
if (ret)
|
||||
goto err_register;
|
||||
|
||||
@ -410,7 +415,7 @@ static int omap_rng_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_rng_dev *priv = platform_get_drvdata(pdev);
|
||||
|
||||
hwrng_unregister(&omap_rng_ops);
|
||||
hwrng_unregister(&priv->rng);
|
||||
|
||||
priv->pdata->cleanup(priv);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user