@@ -767,7 +767,7 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
struct resource fb_res;
struct mvebu_mpp_ctrl_data *mpp_data;
void __iomem *base;
- int i, ret;
+ int i;
pdev->dev.platform_data = (void *)device_get_match_data(&pdev->dev);
@@ -775,25 +775,20 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
* General MPP Configuration Register is part of pdma registers.
* grab clk to make sure it is ticking.
*/
- clk = devm_clk_get(&pdev->dev, NULL);
+ clk = devm_clk_get_enabled(&pdev->dev, NULL);
if (IS_ERR(clk)) {
dev_err(&pdev->dev, "Unable to get pdma clock");
return PTR_ERR(clk);
}
- clk_prepare_enable(clk);
base = devm_platform_get_and_ioremap_resource(pdev, 0, &mpp_res);
- if (IS_ERR(base)) {
- ret = PTR_ERR(base);
- goto err_probe;
- }
+ if (IS_ERR(base))
+ return PTR_ERR(base);
mpp_data = devm_kcalloc(&pdev->dev, dove_pinctrl_info.ncontrols,
sizeof(*mpp_data), GFP_KERNEL);
- if (!mpp_data) {
- ret = -ENOMEM;
- goto err_probe;
- }
+ if (!mpp_data)
+ return -ENOMEM;
dove_pinctrl_info.control_data = mpp_data;
for (i = 0; i < ARRAY_SIZE(dove_mpp_controls); i++)
@@ -812,10 +807,8 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
}
mpp4_base = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(mpp4_base)) {
- ret = PTR_ERR(mpp4_base);
- goto err_probe;
- }
+ if (IS_ERR(mpp4_base))
+ return PTR_ERR(mpp4_base);
res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
if (!res) {
@@ -826,10 +819,8 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
}
pmu_base = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(pmu_base)) {
- ret = PTR_ERR(pmu_base);
- goto err_probe;
- }
+ if (IS_ERR(pmu_base))
+ return PTR_ERR(pmu_base);
gconfmap = syscon_regmap_lookup_by_compatible("marvell,dove-global-config");
if (IS_ERR(gconfmap)) {
@@ -839,17 +830,12 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
adjust_resource(&fb_res,
(mpp_res->start & INT_REGS_MASK) + GC_REGS_OFFS, 0x14);
gc_base = devm_ioremap_resource(&pdev->dev, &fb_res);
- if (IS_ERR(gc_base)) {
- ret = PTR_ERR(gc_base);
- goto err_probe;
- }
-
+ if (IS_ERR(gc_base))
+ return PTR_ERR(gc_base);
gconfmap = devm_regmap_init_mmio(&pdev->dev,
gc_base, &gc_regmap_config);
- if (IS_ERR(gconfmap)) {
- ret = PTR_ERR(gconfmap);
- goto err_probe;
- }
+ if (IS_ERR(gconfmap))
+ return PTR_ERR(gconfmap);
}
/* Warn on any missing DT resource */
@@ -857,9 +843,6 @@ static int dove_pinctrl_probe(struct platform_device *pdev)
dev_warn(&pdev->dev, FW_BUG "Missing pinctrl regs in DTB. Please update your firmware.\n");
return mvebu_pinctrl_probe(pdev);
-err_probe:
- clk_disable_unprepare(clk);
- return ret;
}
static struct platform_driver dove_pinctrl_driver = {
The devm_clk_get_enabled() helpers: - call devm_clk_get() - call clk_prepare_enable() and register what is needed in order to call clk_disable_unprepare() when needed, as a managed resource. This simplifies the code and avoids the calls to clk_disable_unprepare(). Signed-off-by: Wang Jianzheng <wangjianzheng@vivo.com> --- drivers/pinctrl/mvebu/pinctrl-dove.c | 45 +++++++++------------------- 1 file changed, 14 insertions(+), 31 deletions(-)