aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2016-07-13 19:41:40 +0100
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2016-07-13 19:41:40 +0100
commit461a4b0a0bdd5fc15afdf531002b0ed6780fe4ed (patch)
tree44b041e1aada01dc4f0a36cce317ff7bb9e459d3
parent0f07616ff1e323b7c0e5d1231679eb8df383674a (diff)
parentbd3af9ce4e376d1c193bf04570ab98f2ea382ebd (diff)
Merge branch 'tracking-qcomlt-ufs' into int-v4.7-rc6-3
-rw-r--r--drivers/phy/phy-qcom-ufs.c21
-rw-r--r--drivers/scsi/ufs/ufshcd.h3
2 files changed, 21 insertions, 3 deletions
diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c
index 107cb57c3513c..73feef7e11ffe 100644
--- a/drivers/phy/phy-qcom-ufs.c
+++ b/drivers/phy/phy-qcom-ufs.c
@@ -186,16 +186,27 @@ ufs_qcom_phy_init_clks(struct phy *generic_phy,
struct ufs_qcom_phy *phy_common)
{
int err;
+ struct ufs_qcom_phy *phy = get_ufs_qcom_phy(generic_phy);
err = ufs_qcom_phy_clk_get(generic_phy, "tx_iface_clk",
&phy_common->tx_iface_clk);
+ /*
+ * tx_iface_clk does not exist in newer version of ufs-phy HW,
+ * so don't return error if it is not found
+ */
if (err)
- goto out;
+ dev_dbg(phy->dev, "%s: failed to get tx_iface_clk\n",
+ __func__);
err = ufs_qcom_phy_clk_get(generic_phy, "rx_iface_clk",
&phy_common->rx_iface_clk);
+ /*
+ * rx_iface_clk does not exist in newer version of ufs-phy HW,
+ * so don't return error if it is not found
+ */
if (err)
- goto out;
+ dev_dbg(phy->dev, "%s: failed to get rx_iface_clk\n",
+ __func__);
err = ufs_qcom_phy_clk_get(generic_phy, "ref_clk_src",
&phy_common->ref_clk_src);
@@ -536,6 +547,9 @@ int ufs_qcom_phy_enable_iface_clk(struct phy *generic_phy)
if (phy->is_iface_clk_enabled)
goto out;
+ if (!phy->tx_iface_clk)
+ goto out;
+
ret = clk_prepare_enable(phy->tx_iface_clk);
if (ret) {
dev_err(phy->dev, "%s: tx_iface_clk enable failed %d\n",
@@ -561,6 +575,9 @@ void ufs_qcom_phy_disable_iface_clk(struct phy *generic_phy)
{
struct ufs_qcom_phy *phy = get_ufs_qcom_phy(generic_phy);
+ if (!phy->tx_iface_clk)
+ return;
+
if (phy->is_iface_clk_enabled) {
clk_disable_unprepare(phy->tx_iface_clk);
clk_disable_unprepare(phy->rx_iface_clk);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 4bb65669f0529..b78b8652bcac6 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -550,7 +550,8 @@ struct ufs_hba {
/* Returns true if clocks can be gated. Otherwise false */
static inline bool ufshcd_is_clkgating_allowed(struct ufs_hba *hba)
{
- return hba->caps & UFSHCD_CAP_CLK_GATING;
+ return false;
+ //return hba->caps & UFSHCD_CAP_CLK_GATING;
}
static inline bool ufshcd_can_hibern8_during_gating(struct ufs_hba *hba)
{