diff mbox series

[1/1] soundwire: use devm_clk_get_enabled() in qcom_swrm_probe()

Message ID 20230720140845.33734-1-ruc_gongyuanjun@163.com (mailing list archive)
State Not Applicable
Headers show
Series [1/1] soundwire: use devm_clk_get_enabled() in qcom_swrm_probe() | expand

Commit Message

Yuanjun Gong July 20, 2023, 2:08 p.m. UTC
in qcom_swrm_probe(), the return value of function
clk_prepare_enable() should be checked, since it may fail.
using devm_clk_get_enabled() instead of devm_clk_get() and
clk_prepare_enable() can avoid this problem.

Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
---
 drivers/soundwire/qcom.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

Comments

Bjorn Andersson July 21, 2023, 3:45 a.m. UTC | #1
On Thu, Jul 20, 2023 at 10:08:45PM +0800, Yuanjun Gong wrote:
> in qcom_swrm_probe(), the return value of function
> clk_prepare_enable() should be checked, since it may fail.
> using devm_clk_get_enabled() instead of devm_clk_get() and
> clk_prepare_enable() can avoid this problem.
> 
> Signed-off-by: Yuanjun Gong <ruc_gongyuanjun@163.com>
> ---
>  drivers/soundwire/qcom.c | 12 ++++--------
>  1 file changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
> index 7970fdb27ba0..04bc917b7a70 100644
> --- a/drivers/soundwire/qcom.c
> +++ b/drivers/soundwire/qcom.c
> @@ -1549,14 +1549,12 @@ static int qcom_swrm_probe(struct platform_device *pdev)
>  		goto err_init;
>  	}
>  
> -	ctrl->hclk = devm_clk_get(dev, "iface");
> +	ctrl->hclk = devm_clk_get_enabled(dev, "iface");

This gives the impression that hclk is to be enabled from probe() until
cleanup, but hclk is toggled during suspend/resume. So I'm not entirely
sure this is good practice.

If we choose to use devm_clk_get_enabled() then you need to remove the
clk_disable_unprepare() from qcom_swrm_remove().

If you choose to solve your problem by checking the return value of
clk_prepare_enable(), note that you have one in swrm_runtime_resume() as
well.

Regards,
Bjorn
diff mbox series

Patch

diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
index 7970fdb27ba0..04bc917b7a70 100644
--- a/drivers/soundwire/qcom.c
+++ b/drivers/soundwire/qcom.c
@@ -1549,14 +1549,12 @@  static int qcom_swrm_probe(struct platform_device *pdev)
 		goto err_init;
 	}
 
-	ctrl->hclk = devm_clk_get(dev, "iface");
+	ctrl->hclk = devm_clk_get_enabled(dev, "iface");
 	if (IS_ERR(ctrl->hclk)) {
 		ret = PTR_ERR(ctrl->hclk);
 		goto err_init;
 	}
 
-	clk_prepare_enable(ctrl->hclk);
-
 	ctrl->dev = dev;
 	dev_set_drvdata(&pdev->dev, ctrl);
 	mutex_init(&ctrl->port_lock);
@@ -1570,7 +1568,7 @@  static int qcom_swrm_probe(struct platform_device *pdev)
 
 	ret = qcom_swrm_get_port_config(ctrl);
 	if (ret)
-		goto err_clk;
+		goto err_init;
 
 	params = &ctrl->bus.params;
 	params->max_dr_freq = DEFAULT_CLK_FREQ;
@@ -1598,7 +1596,7 @@  static int qcom_swrm_probe(struct platform_device *pdev)
 					"soundwire", ctrl);
 	if (ret) {
 		dev_err(dev, "Failed to request soundwire irq\n");
-		goto err_clk;
+		goto err_init;
 	}
 
 	ctrl->wake_irq = of_irq_get(dev->of_node, 1);
@@ -1617,7 +1615,7 @@  static int qcom_swrm_probe(struct platform_device *pdev)
 	if (ret) {
 		dev_err(dev, "Failed to register Soundwire controller (%d)\n",
 			ret);
-		goto err_clk;
+		goto err_init;
 	}
 
 	qcom_swrm_init(ctrl);
@@ -1647,8 +1645,6 @@  static int qcom_swrm_probe(struct platform_device *pdev)
 
 err_master_add:
 	sdw_bus_master_delete(&ctrl->bus);
-err_clk:
-	clk_disable_unprepare(ctrl->hclk);
 err_init:
 	return ret;
 }