diff mbox

[v3,02/16] phy: qcom-qmp: Adapt to clk_bulk_* APIs

Message ID 1511256206-1587-3-git-send-email-mgautam@codeaurora.org (mailing list archive)
State Not Applicable, archived
Delegated to: Andy Gross
Headers show

Commit Message

Manu Gautam Nov. 21, 2017, 9:23 a.m. UTC
From: Vivek Gautam <vivek.gautam@codeaurora.org>

Move from using array of clocks to clk_bulk_* APIs that
are available now.

Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
---
 drivers/phy/qualcomm/phy-qcom-qmp.c | 50 ++++++++++++-------------------------
 1 file changed, 16 insertions(+), 34 deletions(-)

Comments

Vivek Gautam Dec. 20, 2017, 2:37 a.m. UTC | #1
Hi Manu,


On Tue, Nov 21, 2017 at 2:53 PM, Manu Gautam <mgautam@codeaurora.org> wrote:
> From: Vivek Gautam <vivek.gautam@codeaurora.org>
>
> Move from using array of clocks to clk_bulk_* APIs that
> are available now.
>
> Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
> ---
>  drivers/phy/qualcomm/phy-qcom-qmp.c | 50 ++++++++++++-------------------------
>  1 file changed, 16 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
> index 76acaec..90794dd 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c

[snip]

> @@ -998,29 +992,17 @@ static int qcom_qmp_phy_reset_init(struct device *dev)
>  static int qcom_qmp_phy_clk_init(struct device *dev)
>  {
>         struct qcom_qmp *qmp = dev_get_drvdata(dev);
> -       int ret, i;
> +       int num = qmp->cfg->num_clks;
> +       int i;
>
> -       qmp->clks = devm_kcalloc(dev, qmp->cfg->num_clks,
> -                                sizeof(*qmp->clks), GFP_KERNEL);
> +       qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
>         if (!qmp->clks)
>                 return -ENOMEM;
>
> -       for (i = 0; i < qmp->cfg->num_clks; i++) {
> -               struct clk *_clk;
> -               const char *name = qmp->cfg->clk_list[i];
> -
> -               _clk = devm_clk_get(dev, name);
> -               if (IS_ERR(_clk)) {
> -                       ret = PTR_ERR(_clk);
> -                       if (ret != -EPROBE_DEFER)
> -                               dev_err(dev, "failed to get %s clk, %d\n",
> -                                       name, ret);
> -                       return ret;
> -               }
> -               qmp->clks[i] = _clk;
> -       }
> +       for (i = 0; i < num; i++)
> +               qmp->clks->id = qmp->cfg->clk_list[i];

I think i missed this one while rebasing.
We need to use index with this. Should be:
qmp->clks[i]->id = qmp->cfg->clk_list[i];


Regards
Vivek
Manu Gautam Dec. 20, 2017, 5:03 a.m. UTC | #2
On 12/20/2017 8:07 AM, Vivek Gautam wrote:
> Hi Manu,
>
> [snip]
>
>> @@ -998,29 +992,17 @@ static int qcom_qmp_phy_reset_init(struct device *dev)
>>  static int qcom_qmp_phy_clk_init(struct device *dev)
>>  {
>>         struct qcom_qmp *qmp = dev_get_drvdata(dev);
>> -       int ret, i;
>> +       int num = qmp->cfg->num_clks;
>> +       int i;
>>
>> -       qmp->clks = devm_kcalloc(dev, qmp->cfg->num_clks,
>> -                                sizeof(*qmp->clks), GFP_KERNEL);
>> +       qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
>>         if (!qmp->clks)
>>                 return -ENOMEM;
>>
>> -       for (i = 0; i < qmp->cfg->num_clks; i++) {
>> -               struct clk *_clk;
>> -               const char *name = qmp->cfg->clk_list[i];
>> -
>> -               _clk = devm_clk_get(dev, name);
>> -               if (IS_ERR(_clk)) {
>> -                       ret = PTR_ERR(_clk);
>> -                       if (ret != -EPROBE_DEFER)
>> -                               dev_err(dev, "failed to get %s clk, %d\n",
>> -                                       name, ret);
>> -                       return ret;
>> -               }
>> -               qmp->clks[i] = _clk;
>> -       }
>> +       for (i = 0; i < num; i++)
>> +               qmp->clks->id = qmp->cfg->clk_list[i];
> I think i missed this one while rebasing.
> We need to use index with this. Should be:
> qmp->clks[i]->id = qmp->cfg->clk_list[i];
>

Thanks, I will change this accordingly in next version.


> Regards
> Vivek
>
>
diff mbox

Patch

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
index 76acaec..90794dd 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -555,7 +555,7 @@  struct qcom_qmp {
 	struct device *dev;
 	void __iomem *serdes;
 
-	struct clk **clks;
+	struct clk_bulk_data *clks;
 	struct reset_control **resets;
 	struct regulator_bulk_data *vregs;
 
@@ -848,22 +848,19 @@  static int qcom_qmp_phy_init(struct phy *phy)
 	void __iomem *pcs = qphy->pcs;
 	void __iomem *status;
 	unsigned int mask, val;
-	int ret, i;
+	int ret;
 
 	dev_vdbg(qmp->dev, "Initializing QMP phy\n");
 
-	for (i = 0; i < qmp->cfg->num_clks; i++) {
-		ret = clk_prepare_enable(qmp->clks[i]);
-		if (ret) {
-			dev_err(qmp->dev, "failed to enable %s clk, err=%d\n",
-				qmp->cfg->clk_list[i], ret);
-			goto err_clk;
-		}
+	ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
+	if (ret) {
+		dev_err(qmp->dev, "failed to enable clks, err=%d\n", ret);
+		return ret;
 	}
 
 	ret = qcom_qmp_phy_com_init(qmp);
 	if (ret)
-		goto err_clk;
+		goto err_com_init;
 
 	if (cfg->has_lane_rst) {
 		ret = reset_control_deassert(qphy->lane_rst);
@@ -918,9 +915,8 @@  static int qcom_qmp_phy_init(struct phy *phy)
 		reset_control_assert(qphy->lane_rst);
 err_lane_rst:
 	qcom_qmp_phy_com_exit(qmp);
-err_clk:
-	while (--i >= 0)
-		clk_disable_unprepare(qmp->clks[i]);
+err_com_init:
+	clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
 
 	return ret;
 }
@@ -930,7 +926,6 @@  static int qcom_qmp_phy_exit(struct phy *phy)
 	struct qmp_phy *qphy = phy_get_drvdata(phy);
 	struct qcom_qmp *qmp = qphy->qmp;
 	const struct qmp_phy_cfg *cfg = qmp->cfg;
-	int i = cfg->num_clks;
 
 	clk_disable_unprepare(qphy->pipe_clk);
 
@@ -948,8 +943,7 @@  static int qcom_qmp_phy_exit(struct phy *phy)
 
 	qcom_qmp_phy_com_exit(qmp);
 
-	while (--i >= 0)
-		clk_disable_unprepare(qmp->clks[i]);
+	clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
 
 	return 0;
 }
@@ -998,29 +992,17 @@  static int qcom_qmp_phy_reset_init(struct device *dev)
 static int qcom_qmp_phy_clk_init(struct device *dev)
 {
 	struct qcom_qmp *qmp = dev_get_drvdata(dev);
-	int ret, i;
+	int num = qmp->cfg->num_clks;
+	int i;
 
-	qmp->clks = devm_kcalloc(dev, qmp->cfg->num_clks,
-				 sizeof(*qmp->clks), GFP_KERNEL);
+	qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
 	if (!qmp->clks)
 		return -ENOMEM;
 
-	for (i = 0; i < qmp->cfg->num_clks; i++) {
-		struct clk *_clk;
-		const char *name = qmp->cfg->clk_list[i];
-
-		_clk = devm_clk_get(dev, name);
-		if (IS_ERR(_clk)) {
-			ret = PTR_ERR(_clk);
-			if (ret != -EPROBE_DEFER)
-				dev_err(dev, "failed to get %s clk, %d\n",
-					name, ret);
-			return ret;
-		}
-		qmp->clks[i] = _clk;
-	}
+	for (i = 0; i < num; i++)
+		qmp->clks->id = qmp->cfg->clk_list[i];
 
-	return 0;
+	return devm_clk_bulk_get(dev, num, qmp->clks);
 }
 
 /*