serial: 8250_of: Use devm_clk_get_enabled()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 19 Sep 2023 19:55:19 +0000 (22:55 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 3 Oct 2023 12:35:35 +0000 (14:35 +0200)
Use devm_clk_get_enabled() to simplify the code.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/20230919195519.3197963-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_of.c

index 8c61ed25a8e433c676dd00cb4c9704b0ae16ec94..ef3e745bd09cbf17b6d3c22fa123212375f8cc6c 100644 (file)
@@ -47,16 +47,12 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        if (of_property_read_u32(np, "clock-frequency", &clk)) {
 
                /* Get clk rate through clk driver if present */
-               info->clk = devm_clk_get(&ofdev->dev, NULL);
+               info->clk = devm_clk_get_enabled(dev, NULL);
                if (IS_ERR(info->clk)) {
                        ret = dev_err_probe(dev, PTR_ERR(info->clk), "failed to get clock\n");
                        goto err_pmruntime;
                }
 
-               ret = clk_prepare_enable(info->clk);
-               if (ret < 0)
-                       goto err_pmruntime;
-
                clk = clk_get_rate(info->clk);
        }
        /* If current-speed was set, then try not to change it. */
@@ -66,7 +62,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        ret = of_address_to_resource(np, 0, &resource);
        if (ret) {
                dev_err_probe(dev, ret, "invalid address\n");
-               goto err_unprepare;
+               goto err_pmruntime;
        }
 
        port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_FIXED_PORT |
@@ -85,7 +81,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
                        if (prop >= port->mapsize) {
                                ret = dev_err_probe(dev, -EINVAL, "reg-offset %u exceeds region size %pa\n",
                                                    prop, &port->mapsize);
-                               goto err_unprepare;
+                               goto err_pmruntime;
                        }
 
                        port->mapbase += prop;
@@ -108,7 +104,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
                        default:
                                ret = dev_err_probe(dev, -EINVAL, "unsupported reg-io-width (%u)\n",
                                                    prop);
-                               goto err_unprepare;
+                               goto err_pmruntime;
                        }
                }
                port->flags |= UPF_IOREMAP;
@@ -135,7 +131,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        if (irq < 0) {
                if (irq == -EPROBE_DEFER) {
                        ret = -EPROBE_DEFER;
-                       goto err_unprepare;
+                       goto err_pmruntime;
                }
                /* IRQ support not mandatory */
                irq = 0;
@@ -146,12 +142,12 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        info->rst = devm_reset_control_get_optional_shared(&ofdev->dev, NULL);
        if (IS_ERR(info->rst)) {
                ret = PTR_ERR(info->rst);
-               goto err_unprepare;
+               goto err_pmruntime;
        }
 
        ret = reset_control_deassert(info->rst);
        if (ret)
-               goto err_unprepare;
+               goto err_pmruntime;
 
        port->type = type;
        port->uartclk = clk;
@@ -169,7 +165,7 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        case PORT_RT2880:
                ret = rt288x_setup(port);
                if (ret)
-                       goto err_unprepare;
+                       goto err_pmruntime;
                break;
        }
 
@@ -181,8 +177,6 @@ static int of_platform_serial_setup(struct platform_device *ofdev,
        }
 
        return 0;
-err_unprepare:
-       clk_disable_unprepare(info->clk);
 err_pmruntime:
        pm_runtime_put_sync(&ofdev->dev);
        pm_runtime_disable(&ofdev->dev);
@@ -249,7 +243,6 @@ err_dispose:
        irq_dispose_mapping(port8250.port.irq);
        pm_runtime_put_sync(&ofdev->dev);
        pm_runtime_disable(&ofdev->dev);
-       clk_disable_unprepare(info->clk);
 err_free:
        kfree(info);
        return ret;
@@ -267,7 +260,6 @@ static int of_platform_serial_remove(struct platform_device *ofdev)
        reset_control_assert(info->rst);
        pm_runtime_put_sync(&ofdev->dev);
        pm_runtime_disable(&ofdev->dev);
-       clk_disable_unprepare(info->clk);
        kfree(info);
        return 0;
 }