Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934202AbcJSAHl (ORCPT ); Tue, 18 Oct 2016 20:07:41 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:57387 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932854AbcJSAHb (ORCPT ); Tue, 18 Oct 2016 20:07:31 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Tue, 18 Oct 2016 17:07:29 -0700 From: Subhash Jadavani To: Vivek Gautam Cc: kishon@ti.com, jejb@linux.vnet.ibm.com, vinholikatti@gmail.com, martin.petersen@oracle.com, linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH v2 10/10] phy: qcom-ufs: Remove common layer phy exit callback In-Reply-To: <1476800897-19898-11-git-send-email-vivek.gautam@codeaurora.org> References: <1476800897-19898-1-git-send-email-vivek.gautam@codeaurora.org> <1476800897-19898-11-git-send-email-vivek.gautam@codeaurora.org> Message-ID: User-Agent: Roundcube Webmail/1.2.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4745 Lines: 139 On 2016-10-18 07:28, Vivek Gautam wrote: > The common layer phy exit callback ufs_qcom_phy_exit() > calls phy_power_off() that has no meaning when phy_power_off() > callback is already registered with the phy provider and > the consumer makes use of the same. > Instead, add a no-op specific phy_exit() callback for now > to add the exit sequence at a later point. > > Signed-off-by: Vivek Gautam > --- > > New patch added in v2 series. > > drivers/phy/phy-qcom-ufs-i.h | 1 - > drivers/phy/phy-qcom-ufs-qmp-14nm.c | 7 ++++++- > drivers/phy/phy-qcom-ufs-qmp-20nm.c | 7 ++++++- > drivers/phy/phy-qcom-ufs.c | 17 ++++++----------- > 4 files changed, 18 insertions(+), 14 deletions(-) > > diff --git a/drivers/phy/phy-qcom-ufs-i.h > b/drivers/phy/phy-qcom-ufs-i.h > index 69e836d..d505d98 100644 > --- a/drivers/phy/phy-qcom-ufs-i.h > +++ b/drivers/phy/phy-qcom-ufs-i.h > @@ -141,7 +141,6 @@ struct ufs_qcom_phy_specific_ops { > struct ufs_qcom_phy *get_ufs_qcom_phy(struct phy *generic_phy); > int ufs_qcom_phy_power_on(struct phy *generic_phy); > int ufs_qcom_phy_power_off(struct phy *generic_phy); > -int ufs_qcom_phy_exit(struct phy *generic_phy); > int ufs_qcom_phy_init_clks(struct ufs_qcom_phy *phy_common); > int ufs_qcom_phy_init_vregulators(struct ufs_qcom_phy *phy_common); > int ufs_qcom_phy_remove(struct phy *generic_phy, > diff --git a/drivers/phy/phy-qcom-ufs-qmp-14nm.c > b/drivers/phy/phy-qcom-ufs-qmp-14nm.c > index a60cf34..061604f 100644 > --- a/drivers/phy/phy-qcom-ufs-qmp-14nm.c > +++ b/drivers/phy/phy-qcom-ufs-qmp-14nm.c > @@ -47,6 +47,11 @@ static int ufs_qcom_phy_qmp_14nm_init(struct phy > *generic_phy) > return 0; > } > > +static int ufs_qcom_phy_qmp_14nm_exit(struct phy *generic_phy) > +{ > + return 0; > +} > + > static > void ufs_qcom_phy_qmp_14nm_power_control(struct ufs_qcom_phy *phy, > bool val) > { > @@ -94,7 +99,7 @@ static int ufs_qcom_phy_qmp_14nm_is_pcs_ready(struct > ufs_qcom_phy *phy_common) > > static const struct phy_ops ufs_qcom_phy_qmp_14nm_phy_ops = { > .init = ufs_qcom_phy_qmp_14nm_init, > - .exit = ufs_qcom_phy_exit, > + .exit = ufs_qcom_phy_qmp_14nm_exit, > .power_on = ufs_qcom_phy_power_on, > .power_off = ufs_qcom_phy_power_off, > .owner = THIS_MODULE, > diff --git a/drivers/phy/phy-qcom-ufs-qmp-20nm.c > b/drivers/phy/phy-qcom-ufs-qmp-20nm.c > index dfc5175..1a26a64 100644 > --- a/drivers/phy/phy-qcom-ufs-qmp-20nm.c > +++ b/drivers/phy/phy-qcom-ufs-qmp-20nm.c > @@ -66,6 +66,11 @@ static int ufs_qcom_phy_qmp_20nm_init(struct phy > *generic_phy) > return 0; > } > > +static int ufs_qcom_phy_qmp_20nm_exit(struct phy *generic_phy) > +{ > + return 0; > +} > + > static > void ufs_qcom_phy_qmp_20nm_power_control(struct ufs_qcom_phy *phy, > bool val) > { > @@ -152,7 +157,7 @@ static int > ufs_qcom_phy_qmp_20nm_is_pcs_ready(struct ufs_qcom_phy *phy_common) > > static const struct phy_ops ufs_qcom_phy_qmp_20nm_phy_ops = { > .init = ufs_qcom_phy_qmp_20nm_init, > - .exit = ufs_qcom_phy_exit, > + .exit = ufs_qcom_phy_qmp_20nm_exit, > .power_on = ufs_qcom_phy_power_on, > .power_off = ufs_qcom_phy_power_off, > .owner = THIS_MODULE, > diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c > index a425cc2..494f90f 100644 > --- a/drivers/phy/phy-qcom-ufs.c > +++ b/drivers/phy/phy-qcom-ufs.c > @@ -615,17 +615,6 @@ int ufs_qcom_phy_calibrate_phy(struct phy > *generic_phy, bool is_rate_B) > } > EXPORT_SYMBOL_GPL(ufs_qcom_phy_calibrate_phy); > > -int ufs_qcom_phy_exit(struct phy *generic_phy) > -{ > - struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(generic_phy); > - > - if (ufs_qcom_phy->is_powered_on) > - phy_power_off(generic_phy); > - > - return 0; > -} > -EXPORT_SYMBOL_GPL(ufs_qcom_phy_exit); > - > int ufs_qcom_phy_is_pcs_ready(struct phy *generic_phy) > { > struct ufs_qcom_phy *ufs_qcom_phy = get_ufs_qcom_phy(generic_phy); > @@ -647,6 +636,9 @@ int ufs_qcom_phy_power_on(struct phy *generic_phy) > struct device *dev = phy_common->dev; > int err; > > + if (phy_common->is_powered_on) > + return 0; > + > err = ufs_qcom_phy_enable_vreg(dev, &phy_common->vdda_phy); > if (err) { > dev_err(dev, "%s enable vdda_phy failed, err=%d\n", > @@ -709,6 +701,9 @@ int ufs_qcom_phy_power_off(struct phy *generic_phy) > { > struct ufs_qcom_phy *phy_common = get_ufs_qcom_phy(generic_phy); > > + if (!phy_common->is_powered_on) > + return 0; > + > phy_common->phy_spec_ops->power_control(phy_common, false); > > if (phy_common->vddp_ref_clk.reg) LGTM , Reviewed-by: Subhash Jadavani -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project