Use the priv data member of struct hwrng to make the iomem base address available in meson_rng_read(). This allows for removing struct meson_rng_data completely in the next step. __force is used to silence sparse warnings. Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> --- drivers/char/hw_random/meson-rng.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/char/hw_random/meson-rng.c b/drivers/char/hw_random/meson-rng.c index a4eb8e35f..bf7a6e594 100644 --- a/drivers/char/hw_random/meson-rng.c +++ b/drivers/char/hw_random/meson-rng.c @@ -17,16 +17,14 @@ #define RNG_DATA 0x00 struct meson_rng_data { - void __iomem *base; struct hwrng rng; }; static int meson_rng_read(struct hwrng *rng, void *buf, size_t max, bool wait) { - struct meson_rng_data *data = - container_of(rng, struct meson_rng_data, rng); + void __iomem *base = (__force void __iomem *)rng->priv; - *(u32 *)buf = readl_relaxed(data->base + RNG_DATA); + *(u32 *)buf = readl_relaxed(base + RNG_DATA); return sizeof(u32); } @@ -36,14 +34,15 @@ static int meson_rng_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct meson_rng_data *data; struct clk *core_clk; + void __iomem *base; data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; - data->base = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(data->base)) - return PTR_ERR(data->base); + base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); core_clk = devm_clk_get_optional_enabled(dev, "core"); if (IS_ERR(core_clk)) @@ -52,6 +51,7 @@ static int meson_rng_probe(struct platform_device *pdev) data->rng.name = pdev->name; data->rng.read = meson_rng_read; + data->rng.priv = (__force unsigned long)base; return devm_hwrng_register(dev, &data->rng); } -- 2.39.2