spi: Use devm_clk_get_*() helper function to
authorMark Brown <broonie@kernel.org>
Mon, 11 Sep 2023 21:06:48 +0000 (22:06 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 11 Sep 2023 21:43:17 +0000 (22:43 +0100)
Merge series from Li Zetao <lizetao1@huawei.com>:

Commit 7ef9651e9792 ("clk: Provide new devm_clk helpers for prepared
and enabled clocks") provides a new helper function for prepared and
enabled clocks when a driver keeps a clock prepared (or enabled) during
the whole lifetime of the driver. So where drivers get clocks and enable
them immediately, it can be combined into a single function
devm_clk_get_*(). Moreover, the unprepare and disable function
has been registered to devm_clk_state, and before devm_clk_state is
released, the clocks will be unprepareed and disable, so it is unnecessary
to unprepare and disable clocks explicitly when remove drivers or in the
error handling path.

1  2 
drivers/spi/spi-meson-spicc.c
drivers/spi/spi-meson-spifc.c
drivers/spi/spi-microchip-core-qspi.c
drivers/spi/spi-microchip-core.c
drivers/spi/spi-mtk-snfi.c

index 6c7860eaa235a45998a5f6f3051a414e0d3eff6c,1f2d26254e030a328c96dcb9ef6d935a6431c3fb..fc75492e50fff3ae07972e59299796aaeda5b4c8
@@@ -817,10 -817,10 +817,10 @@@ static int meson_spicc_probe(struct pla
                               0, NULL, spicc);
        if (ret) {
                dev_err(&pdev->dev, "irq request failed\n");
 -              goto out_master;
 +              goto out_host;
        }
  
-       spicc->core = devm_clk_get(&pdev->dev, "core");
+       spicc->core = devm_clk_get_enabled(&pdev->dev, "core");
        if (IS_ERR(spicc->core)) {
                dev_err(&pdev->dev, "core clock request failed\n");
                ret = PTR_ERR(spicc->core);
        spicc->pinctrl = devm_pinctrl_get(&pdev->dev);
        if (IS_ERR(spicc->pinctrl)) {
                ret = PTR_ERR(spicc->pinctrl);
-               goto out_clk;
 -              goto out_master;
++              goto out_host;
        }
  
        device_reset_optional(&pdev->dev);
        ret = meson_spicc_pow2_clk_init(spicc);
        if (ret) {
                dev_err(&pdev->dev, "pow2 clock registration failed\n");
-               goto out_clk;
 -              goto out_master;
++              goto out_host;
        }
  
        if (spicc->data->has_enhance_clk_div) {
                ret = meson_spicc_enh_clk_init(spicc);
                if (ret) {
                        dev_err(&pdev->dev, "clock registration failed\n");
-                       goto out_clk;
 -                      goto out_master;
++                      goto out_host;
                }
        }
  
 -      ret = devm_spi_register_master(&pdev->dev, master);
 +      ret = devm_spi_register_controller(&pdev->dev, host);
        if (ret) {
-               dev_err(&pdev->dev, "spi host registration failed\n");
-               goto out_clk;
 -              dev_err(&pdev->dev, "spi master registration failed\n");
 -              goto out_master;
++              dev_err(&pdev->dev, "spi registration failed\n");
++              goto out_host;
        }
  
        return 0;
  
- out_clk:
-       clk_disable_unprepare(spicc->pclk);
- out_core_clk:
-       clk_disable_unprepare(spicc->core);
 -out_master:
 -      spi_master_put(master);
 +out_host:
 +      spi_controller_put(host);
  
        return ret;
  }
@@@ -916,10 -898,7 +898,7 @@@ static void meson_spicc_remove(struct p
        /* Disable SPI */
        writel(0, spicc->base + SPICC_CONREG);
  
-       clk_disable_unprepare(spicc->core);
-       clk_disable_unprepare(spicc->pclk);
 -      spi_master_put(spicc->master);
 +      spi_controller_put(spicc->host);
  }
  
  static const struct meson_spicc_data meson_spicc_gx_data = {
index de56d38edf40b4fcb4cef7ca0766490aa800a0b5,d70a18885b49804c1c4831082f7425d2ea9d749c..fd8b26dd4a792a7d42a0cb227996047710eb7881
@@@ -319,39 -319,32 +319,32 @@@ static int meson_spifc_probe(struct pla
                goto out_err;
        }
  
-       ret = clk_prepare_enable(spifc->clk);
-       if (ret) {
-               dev_err(spifc->dev, "can't prepare clock\n");
-               goto out_err;
-       }
        rate = clk_get_rate(spifc->clk);
  
 -      master->num_chipselect = 1;
 -      master->dev.of_node = pdev->dev.of_node;
 -      master->bits_per_word_mask = SPI_BPW_MASK(8);
 -      master->auto_runtime_pm = true;
 -      master->transfer_one = meson_spifc_transfer_one;
 -      master->min_speed_hz = rate >> 6;
 -      master->max_speed_hz = rate >> 1;
 +      host->num_chipselect = 1;
 +      host->dev.of_node = pdev->dev.of_node;
 +      host->bits_per_word_mask = SPI_BPW_MASK(8);
 +      host->auto_runtime_pm = true;
 +      host->transfer_one = meson_spifc_transfer_one;
 +      host->min_speed_hz = rate >> 6;
 +      host->max_speed_hz = rate >> 1;
  
        meson_spifc_hw_init(spifc);
  
        pm_runtime_set_active(spifc->dev);
        pm_runtime_enable(spifc->dev);
  
 -      ret = devm_spi_register_master(spifc->dev, master);
 +      ret = devm_spi_register_controller(spifc->dev, host);
        if (ret) {
 -              dev_err(spifc->dev, "failed to register spi master\n");
 +              dev_err(spifc->dev, "failed to register spi host\n");
-               goto out_clk;
+               goto out_pm;
        }
  
        return 0;
- out_clk:
-       clk_disable_unprepare(spifc->clk);
+ out_pm:
        pm_runtime_disable(spifc->dev);
  out_err:
 -      spi_master_put(master);
 +      spi_controller_put(host);
        return ret;
  }
  
Simple merge
index 3d4b22eda0bff9689b96e94ffb122e0ee6442626,becdcdc9e6d1f30f55bdbb974921774ee2c96e59..634364c7cfe6127f2970760b0c6c9cf20fe62269
@@@ -544,33 -544,26 +544,26 @@@ static int mchp_corespi_probe(struct pl
                return dev_err_probe(&pdev->dev, PTR_ERR(spi->clk),
                                     "could not get clk\n");
  
-       ret = clk_prepare_enable(spi->clk);
-       if (ret)
-               return dev_err_probe(&pdev->dev, ret,
-                                    "failed to enable clock\n");
 -      mchp_corespi_init(master, spi);
 +      mchp_corespi_init(host, spi);
  
 -      ret = devm_spi_register_master(&pdev->dev, master);
 +      ret = devm_spi_register_controller(&pdev->dev, host);
        if (ret) {
                mchp_corespi_disable(spi);
-               clk_disable_unprepare(spi->clk);
                return dev_err_probe(&pdev->dev, ret,
 -                                   "unable to register master for SPI controller\n");
 +                                   "unable to register host for SPI controller\n");
        }
  
 -      dev_info(&pdev->dev, "Registered SPI controller %d\n", master->bus_num);
 +      dev_info(&pdev->dev, "Registered SPI controller %d\n", host->bus_num);
  
        return 0;
  }
  
  static void mchp_corespi_remove(struct platform_device *pdev)
  {
 -      struct spi_master *master  = platform_get_drvdata(pdev);
 -      struct mchp_corespi *spi = spi_master_get_devdata(master);
 +      struct spi_controller *host  = platform_get_drvdata(pdev);
 +      struct mchp_corespi *spi = spi_controller_get_devdata(host);
  
        mchp_corespi_disable_ints(spi);
-       clk_disable_unprepare(spi->clk);
        mchp_corespi_disable(spi);
  }
  
Simple merge