]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
clk: lmk04832: Use devm_clk_get_enabled() helpers
authorHuan Yang <link@vivo.com>
Tue, 20 Aug 2024 10:21:19 +0000 (18:21 +0800)
committerStephen Boyd <sboyd@kernel.org>
Wed, 28 Aug 2024 00:25:04 +0000 (17:25 -0700)
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: Huan Yang <link@vivo.com>
Link: https://lore.kernel.org/r/20240820102119.130298-1-link@vivo.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk-lmk04832.c

index 99b271c1278a9e09d27dda76dbe5f81466eea37b..c997e74919961be36f8ad523f5a04c37ac5f347e 100644 (file)
@@ -1405,16 +1405,12 @@ static int lmk04832_probe(struct spi_device *spi)
 
        lmk->dev = &spi->dev;
 
-       lmk->oscin = devm_clk_get(lmk->dev, "oscin");
+       lmk->oscin = devm_clk_get_enabled(lmk->dev, "oscin");
        if (IS_ERR(lmk->oscin)) {
                dev_err(lmk->dev, "failed to get oscin clock\n");
                return PTR_ERR(lmk->oscin);
        }
 
-       ret = clk_prepare_enable(lmk->oscin);
-       if (ret)
-               return ret;
-
        lmk->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset",
                                                  GPIOD_OUT_LOW);
 
@@ -1422,14 +1418,14 @@ static int lmk04832_probe(struct spi_device *spi)
                                 sizeof(struct lmk_dclk), GFP_KERNEL);
        if (!lmk->dclk) {
                ret = -ENOMEM;
-               goto err_disable_oscin;
+               return ret;
        }
 
        lmk->clkout = devm_kcalloc(lmk->dev, info->num_channels,
                                   sizeof(*lmk->clkout), GFP_KERNEL);
        if (!lmk->clkout) {
                ret = -ENOMEM;
-               goto err_disable_oscin;
+               return ret;
        }
 
        lmk->clk_data = devm_kzalloc(lmk->dev, struct_size(lmk->clk_data, hws,
@@ -1437,7 +1433,7 @@ static int lmk04832_probe(struct spi_device *spi)
                                     GFP_KERNEL);
        if (!lmk->clk_data) {
                ret = -ENOMEM;
-               goto err_disable_oscin;
+               return ret;
        }
 
        device_property_read_u32(lmk->dev, "ti,vco-hz", &lmk->vco_rate);
@@ -1465,7 +1461,7 @@ static int lmk04832_probe(struct spi_device *spi)
                        dev_err(lmk->dev, "missing reg property in child: %s\n",
                                child->full_name);
                        of_node_put(child);
-                       goto err_disable_oscin;
+                       return ret;
                }
 
                of_property_read_u32(child, "ti,clkout-fmt",
@@ -1486,7 +1482,7 @@ static int lmk04832_probe(struct spi_device *spi)
 
                        __func__, PTR_ERR(lmk->regmap));
                ret = PTR_ERR(lmk->regmap);
-               goto err_disable_oscin;
+               return ret;
        }
 
        regmap_write(lmk->regmap, LMK04832_REG_RST3W, LMK04832_BIT_RESET);
@@ -1496,7 +1492,7 @@ static int lmk04832_probe(struct spi_device *spi)
                                         &rdbk_pin);
                ret = lmk04832_set_spi_rdbk(lmk, rdbk_pin);
                if (ret)
-                       goto err_disable_oscin;
+                       return ret;
        }
 
        regmap_bulk_read(lmk->regmap, LMK04832_REG_ID_PROD_MSB, &tmp, 3);
@@ -1504,13 +1500,13 @@ static int lmk04832_probe(struct spi_device *spi)
                dev_err(lmk->dev, "unsupported device type: pid 0x%04x, maskrev 0x%02x\n",
                        tmp[0] << 8 | tmp[1], tmp[2]);
                ret = -EINVAL;
-               goto err_disable_oscin;
+               return ret;
        }
 
        ret = lmk04832_register_vco(lmk);
        if (ret) {
                dev_err(lmk->dev, "failed to init device clock path\n");
-               goto err_disable_oscin;
+               return ret;
        }
 
        if (lmk->vco_rate) {
@@ -1518,21 +1514,21 @@ static int lmk04832_probe(struct spi_device *spi)
                ret = clk_set_rate(lmk->vco.clk, lmk->vco_rate);
                if (ret) {
                        dev_err(lmk->dev, "failed to set VCO rate\n");
-                       goto err_disable_oscin;
+                       return ret;
                }
        }
 
        ret = lmk04832_register_sclk(lmk);
        if (ret) {
                dev_err(lmk->dev, "failed to init SYNC/SYSREF clock path\n");
-               goto err_disable_oscin;
+               return ret;
        }
 
        for (i = 0; i < info->num_channels; i++) {
                ret = lmk04832_register_clkout(lmk, i);
                if (ret) {
                        dev_err(lmk->dev, "failed to register clk %d\n", i);
-                       goto err_disable_oscin;
+                       return ret;
                }
        }
 
@@ -1541,24 +1537,12 @@ static int lmk04832_probe(struct spi_device *spi)
                                          lmk->clk_data);
        if (ret) {
                dev_err(lmk->dev, "failed to add provider (%d)\n", ret);
-               goto err_disable_oscin;
+               return ret;
        }
 
        spi_set_drvdata(spi, lmk);
 
        return 0;
-
-err_disable_oscin:
-       clk_disable_unprepare(lmk->oscin);
-
-       return ret;
-}
-
-static void lmk04832_remove(struct spi_device *spi)
-{
-       struct lmk04832 *lmk = spi_get_drvdata(spi);
-
-       clk_disable_unprepare(lmk->oscin);
 }
 
 static const struct spi_device_id lmk04832_id[] = {
@@ -1579,7 +1563,6 @@ static struct spi_driver lmk04832_driver = {
                .of_match_table = lmk04832_of_id,
        },
        .probe          = lmk04832_probe,
-       .remove         = lmk04832_remove,
        .id_table       = lmk04832_id,
 };
 module_spi_driver(lmk04832_driver);