[PATCH] rtc: stmp3xxx: use devm_platform_ioremap_resource()
Rosen Penev <[email protected]>
| Newsgroups | dev.linux.lists.llvm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-rtc |
|---|---|
| Message-ID | <[email protected]> |
Replace the open-coded platform_get_resource() plus devm_ioremap() sequence with a single devm_platform_ioremap_resource() call, which folds the resource lookup and mapping into one step and returns an ERR_PTR on failure, checked with IS_ERR() and propagated via PTR_ERR(). Move the mapping ahead of the devm_kzalloc() so that an error or deferred probe is handled before the rtc_data allocation, avoiding needless work. The fsl,stmp3xxx-rtc nodes in imx23.dtsi (reg = <0x8005c000 0x2000>) and imx28.dtsi (reg = <0x80056000 0x2000>) each provide a single non-overlapping IORESOURCE_MEM window, so the region reservation now performed by devm_platform_ioremap_resource() introduces no conflict. Built for ARM (mxs_defconfig + CONFIG_RTC_DRV_STMP) with LLVM=1; drivers/rtc/rtc-stmp3xxx.o compiles cleanly. Assisted-by: opencode:hy3-free Signed-off-by: Rosen Penev <[email protected]> --- drivers/rtc/rtc-stmp3xxx.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/drivers/rtc/rtc-stmp3xxx.c b/drivers/rtc/rtc-stmp3xxx.c index 7afcd14aeee5..05f128ccf827 100644 --- a/drivers/rtc/rtc-stmp3xxx.c +++ b/drivers/rtc/rtc-stmp3xxx.c @@ -245,28 +245,21 @@ static void stmp3xxx_rtc_remove(struct platform_device *pdev) static int stmp3xxx_rtc_probe(struct platform_device *pdev) { struct stmp3xxx_rtc_data *rtc_data; - struct resource *r; + void __iomem *io; u32 rtc_stat; u32 pers0_set, pers0_clr; u32 crystalfreq = 0; int err; + io = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(io)) + return PTR_ERR(io); + rtc_data = devm_kzalloc(&pdev->dev, sizeof(*rtc_data), GFP_KERNEL); if (!rtc_data) return -ENOMEM; - r = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!r) { - dev_err(&pdev->dev, "failed to get resource\n"); - return -ENXIO; - } - - rtc_data->io = devm_ioremap(&pdev->dev, r->start, resource_size(r)); - if (!rtc_data->io) { - dev_err(&pdev->dev, "ioremap failed\n"); - return -EIO; - } - + rtc_data->io = io; rtc_data->irq_alarm = platform_get_irq(pdev, 0); rtc_stat = readl(rtc_data->io + STMP3XXX_RTC_STAT); -- 2.55.0