Message ID | 20190522011504.19342-2-zhang.chunyan@linaro.org (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | Return immediately if sprd_clk_regmap_init() fails | expand |
On Wed, 22 May 2019 at 09:15, Chunyan Zhang <zhang.chunyan@linaro.org> wrote: > > devm_ioremap_resources() automatically requests resources and devm_ wrappers > do better error handling and unmapping of the I/O region when needed, > that would make drivers more clean and simple. > > Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> Reviewed-by: Baolin Wang <baolin.wang@linaro.org> > --- > drivers/clk/sprd/common.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c > index e038b0447206..9ce690999eaa 100644 > --- a/drivers/clk/sprd/common.c > +++ b/drivers/clk/sprd/common.c > @@ -42,6 +42,7 @@ int sprd_clk_regmap_init(struct platform_device *pdev, > void __iomem *base; > struct device_node *node = pdev->dev.of_node; > struct regmap *regmap; > + struct resource *res; > > if (of_find_property(node, "sprd,syscon", NULL)) { > regmap = syscon_regmap_lookup_by_phandle(node, "sprd,syscon"); > @@ -50,7 +51,11 @@ int sprd_clk_regmap_init(struct platform_device *pdev, > return PTR_ERR(regmap); > } > } else { > - base = of_iomap(node, 0); > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + base = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(base)) > + return PTR_ERR(base); > + > regmap = devm_regmap_init_mmio(&pdev->dev, base, > &sprdclk_regmap_config); > if (IS_ERR_OR_NULL(regmap)) { > -- > 2.17.1 >
Quoting Chunyan Zhang (2019-05-21 18:15:01) > devm_ioremap_resources() automatically requests resources and devm_ wrappers > do better error handling and unmapping of the I/O region when needed, > that would make drivers more clean and simple. > > Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> Applied to clk-next > diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c > index e038b0447206..9ce690999eaa 100644 > --- a/drivers/clk/sprd/common.c > +++ b/drivers/clk/sprd/common.c > @@ -50,7 +51,11 @@ int sprd_clk_regmap_init(struct platform_device *pdev, > return PTR_ERR(regmap); > } > } else { > - base = of_iomap(node, 0); > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + base = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(base)) There's also devm_platform_ioremap_resource() if you want to save even more lines! > + return PTR_ERR(base); > +
On Thu, 27 Jun 2019 at 02:16, Stephen Boyd <sboyd@kernel.org> wrote: > > Quoting Chunyan Zhang (2019-05-21 18:15:01) > > devm_ioremap_resources() automatically requests resources and devm_ wrappers > > do better error handling and unmapping of the I/O region when needed, > > that would make drivers more clean and simple. > > > > Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> > > Applied to clk-next > > > diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c > > index e038b0447206..9ce690999eaa 100644 > > --- a/drivers/clk/sprd/common.c > > +++ b/drivers/clk/sprd/common.c > > @@ -50,7 +51,11 @@ int sprd_clk_regmap_init(struct platform_device *pdev, > > return PTR_ERR(regmap); > > } > > } else { > > - base = of_iomap(node, 0); > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + base = devm_ioremap_resource(&pdev->dev, res); > > + if (IS_ERR(base)) > > There's also devm_platform_ioremap_resource() if you want to save even > more lines! Yes indeed, thanks for the information. Considering this patch was queued to your tree, I decide to use this more integrated function later :) Cheers, Chunyan > > > + return PTR_ERR(base); > > +
diff --git a/drivers/clk/sprd/common.c b/drivers/clk/sprd/common.c index e038b0447206..9ce690999eaa 100644 --- a/drivers/clk/sprd/common.c +++ b/drivers/clk/sprd/common.c @@ -42,6 +42,7 @@ int sprd_clk_regmap_init(struct platform_device *pdev, void __iomem *base; struct device_node *node = pdev->dev.of_node; struct regmap *regmap; + struct resource *res; if (of_find_property(node, "sprd,syscon", NULL)) { regmap = syscon_regmap_lookup_by_phandle(node, "sprd,syscon"); @@ -50,7 +51,11 @@ int sprd_clk_regmap_init(struct platform_device *pdev, return PTR_ERR(regmap); } } else { - base = of_iomap(node, 0); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(base)) + return PTR_ERR(base); + regmap = devm_regmap_init_mmio(&pdev->dev, base, &sprdclk_regmap_config); if (IS_ERR_OR_NULL(regmap)) {
devm_ioremap_resources() automatically requests resources and devm_ wrappers do better error handling and unmapping of the I/O region when needed, that would make drivers more clean and simple. Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org> --- drivers/clk/sprd/common.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)