phy: qcom-ufs: make ref_clk as optional

Per newer UFS PHY design, some platforms may not have the ON/OFF control
for reference clock, hence this clock may be optional.

Change-Id: I26edd35970e88a8d17edded399b63c5d3cc7f5d9
Signed-off-by: Can Guo <cang@codeaurora.org>
This commit is contained in:
Can Guo 2019-02-18 12:52:45 +08:00 committed by Gerrit - the friendly Code Review server
parent 403f8234a5
commit e649f17415

View File

@ -221,10 +221,12 @@ skip_txrx_clk:
__ufs_qcom_phy_clk_get(phy_common->dev, "ref_clk_parent",
&phy_common->ref_clk_parent, false);
err = ufs_qcom_phy_clk_get(phy_common->dev, "ref_clk",
&phy_common->ref_clk);
if (err)
goto out;
/*
* Some platforms may not have the ON/OFF control for reference clock,
* hence this clock may be optional.
*/
__ufs_qcom_phy_clk_get(phy_common->dev, "ref_clk",
&phy_common->ref_clk, false);
/*
* "ref_aux_clk" is optional and only supported by certain
@ -414,11 +416,17 @@ static int ufs_qcom_phy_enable_ref_clk(struct ufs_qcom_phy *phy)
}
}
ret = clk_prepare_enable(phy->ref_clk);
if (ret) {
dev_err(phy->dev, "%s: ref_clk enable failed %d\n",
__func__, ret);
goto out_disable_parent;
/*
* "ref_clk" is optional clock hence make sure that clk reference
* is available before trying to enable the clock.
*/
if (phy->ref_clk) {
ret = clk_prepare_enable(phy->ref_clk);
if (ret) {
dev_err(phy->dev, "%s: ref_clk enable failed %d\n",
__func__, ret);
goto out_disable_parent;
}
}
/*
@ -499,7 +507,14 @@ static void ufs_qcom_phy_disable_ref_clk(struct ufs_qcom_phy *phy)
*/
if (phy->ref_aux_clk)
clk_disable_unprepare(phy->ref_aux_clk);
clk_disable_unprepare(phy->ref_clk);
/*
* "ref_clk" is optional clock hence make sure that clk
* reference is available before trying to disable the clock.
*/
if (phy->ref_clk)
clk_disable_unprepare(phy->ref_clk);
/*
* "ref_clk_parent" is optional clock hence make sure that clk
* reference is available before trying to disable the clock.