Re: [PATCH v3 2/8] ASoC: qcom: lpass-cpu: Move ahbix clk to platform specific function

2020-07-09 Thread Srinivas Kandagatla




On 08/07/2020 06:08, Rohit kumar wrote:

Ahbix clock is optional clock and not needed for all platforms.
Move it to lpass-apq8016/ipq806x as it is not needed for sc7180.

Signed-off-by: Rohit kumar 
---
  sound/soc/qcom/lpass-apq8016.c | 27 ++
  sound/soc/qcom/lpass-cpu.c | 40 ++-
  sound/soc/qcom/lpass-ipq806x.c | 43 ++
  3 files changed, 80 insertions(+), 30 deletions(-)



LGTM,

Reviewed-by: Srinivas Kandagatla 



[PATCH v3 2/8] ASoC: qcom: lpass-cpu: Move ahbix clk to platform specific function

2020-07-07 Thread Rohit kumar
Ahbix clock is optional clock and not needed for all platforms.
Move it to lpass-apq8016/ipq806x as it is not needed for sc7180.

Signed-off-by: Rohit kumar 
---
 sound/soc/qcom/lpass-apq8016.c | 27 ++
 sound/soc/qcom/lpass-cpu.c | 40 ++-
 sound/soc/qcom/lpass-ipq806x.c | 43 ++
 3 files changed, 80 insertions(+), 30 deletions(-)

diff --git a/sound/soc/qcom/lpass-apq8016.c b/sound/soc/qcom/lpass-apq8016.c
index 8210e37..fe4c258 100644
--- a/sound/soc/qcom/lpass-apq8016.c
+++ b/sound/soc/qcom/lpass-apq8016.c
@@ -185,7 +185,33 @@ static int apq8016_lpass_init(struct platform_device *pdev)
return ret;
}
 
+   drvdata->ahbix_clk = devm_clk_get(dev, "ahbix-clk");
+   if (IS_ERR(drvdata->ahbix_clk)) {
+   dev_err(dev, "error getting ahbix-clk: %ld\n",
+   PTR_ERR(drvdata->ahbix_clk));
+   ret = PTR_ERR(drvdata->ahbix_clk);
+   goto err_ahbix_clk;
+   }
+
+   ret = clk_set_rate(drvdata->ahbix_clk, LPASS_AHBIX_CLOCK_FREQUENCY);
+   if (ret) {
+   dev_err(dev, "error setting rate on ahbix_clk: %d\n", ret);
+   goto err_ahbix_clk;
+   }
+   dev_dbg(dev, "set ahbix_clk rate to %lu\n",
+   clk_get_rate(drvdata->ahbix_clk));
+
+   ret = clk_prepare_enable(drvdata->ahbix_clk);
+   if (ret) {
+   dev_err(dev, "error enabling ahbix_clk: %d\n", ret);
+   goto err_ahbix_clk;
+   }
+
return 0;
+
+err_ahbix_clk:
+   clk_bulk_disable_unprepare(drvdata->num_clks, drvdata->clks);
+   return ret;
 }
 
 static int apq8016_lpass_exit(struct platform_device *pdev)
@@ -193,6 +219,7 @@ static int apq8016_lpass_exit(struct platform_device *pdev)
struct lpass_data *drvdata = platform_get_drvdata(pdev);
 
clk_bulk_disable_unprepare(drvdata->num_clks, drvdata->clks);
+   clk_disable_unprepare(drvdata->ahbix_clk);
 
return 0;
 }
diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
index e00a4af..f0c7e93 100644
--- a/sound/soc/qcom/lpass-cpu.c
+++ b/sound/soc/qcom/lpass-cpu.c
@@ -566,8 +566,13 @@ int asoc_qcom_lpass_cpu_platform_probe(struct 
platform_device *pdev)
return PTR_ERR(drvdata->lpaif_map);
}
 
-   if (variant->init)
-   variant->init(pdev);
+   if (variant->init) {
+   ret = variant->init(pdev);
+   if (ret) {
+   dev_err(dev, "error initializing variant: %d\n", ret);
+   return ret;
+   }
+   }
 
for (i = 0; i < variant->num_dai; i++) {
dai_id = variant->dai_driver[i].id;
@@ -594,46 +599,22 @@ int asoc_qcom_lpass_cpu_platform_probe(struct 
platform_device *pdev)
}
}
 
-   drvdata->ahbix_clk = devm_clk_get(dev, "ahbix-clk");
-   if (IS_ERR(drvdata->ahbix_clk)) {
-   dev_err(dev, "error getting ahbix-clk: %ld\n",
-   PTR_ERR(drvdata->ahbix_clk));
-   return PTR_ERR(drvdata->ahbix_clk);
-   }
-
-   ret = clk_set_rate(drvdata->ahbix_clk, LPASS_AHBIX_CLOCK_FREQUENCY);
-   if (ret) {
-   dev_err(dev, "error setting rate on ahbix_clk: %d\n", ret);
-   return ret;
-   }
-   dev_dbg(dev, "set ahbix_clk rate to %lu\n",
-   clk_get_rate(drvdata->ahbix_clk));
-
-   ret = clk_prepare_enable(drvdata->ahbix_clk);
-   if (ret) {
-   dev_err(dev, "error enabling ahbix_clk: %d\n", ret);
-   return ret;
-   }
-
ret = devm_snd_soc_register_component(dev,
  _cpu_comp_driver,
  variant->dai_driver,
  variant->num_dai);
if (ret) {
dev_err(dev, "error registering cpu driver: %d\n", ret);
-   goto err_clk;
+   goto err;
}
 
ret = asoc_qcom_lpass_platform_register(pdev);
if (ret) {
dev_err(dev, "error registering platform driver: %d\n", ret);
-   goto err_clk;
+   goto err;
}
 
-   return 0;
-
-err_clk:
-   clk_disable_unprepare(drvdata->ahbix_clk);
+err:
return ret;
 }
 EXPORT_SYMBOL_GPL(asoc_qcom_lpass_cpu_platform_probe);
@@ -645,7 +626,6 @@ int asoc_qcom_lpass_cpu_platform_remove(struct 
platform_device *pdev)
if (drvdata->variant->exit)
drvdata->variant->exit(pdev);
 
-   clk_disable_unprepare(drvdata->ahbix_clk);
 
return 0;
 }
diff --git a/sound/soc/qcom/lpass-ipq806x.c b/sound/soc/qcom/lpass-ipq806x.c
index 1987605..b7c0586 100644
--- a/sound/soc/qcom/lpass-ipq806x.c
+++ b/sound/soc/qcom/lpass-ipq806x.c
@@ -55,6 +55,47 @@ static struct snd_soc_dai_driver