Message ID | 1511256206-1587-3-git-send-email-mgautam@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | Andy Gross |
Headers | show |
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
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 --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); } /*