[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5884715D.7050709@ti.com>
Date: Sun, 22 Jan 2017 14:16:21 +0530
From: Kishon Vijay Abraham I <kishon@...com>
To: Stephen Boyd <stephen.boyd@...aro.org>,
Peter Chen <peter.chen@....com>
CC: <linux-arm-kernel@...ts.infradead.org>,
<linux-kernel@...r.kernel.org>, <linux-arm-msm@...r.kernel.org>,
Andy Gross <andy.gross@...aro.org>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Neil Armstrong <narmstrong@...libre.com>,
Arnd Bergmann <arnd@...db.de>, Felipe Balbi <balbi@...nel.org>,
<linux-usb@...r.kernel.org>
Subject: Re: [PATCH v7 3/5] phy: Add set_vbus callback
Hi,
On Saturday 21 January 2017 12:20 AM, Stephen Boyd wrote:
> Some USB PHYs need to be told about vbus changing state
> explicitly. For example the qcom USB HS PHY needs to toggle a bit
> when vbus goes from low to high (VBUSVLDEXT) to cause the
> "session valid" signal to toggle. This signal will pull up D+
> when the phy starts running. If the vbus signal isn't routed to
> the PHY this "session valid" signal won't ever toggle, so we have
> to toggle it explicitly. This callback is used to do that.
>
> Cc: Peter Chen <peter.chen@....com>
> Signed-off-by: Stephen Boyd <stephen.boyd@...aro.org>
> ---
>
> New patch
>
> drivers/phy/phy-core.c | 15 +++++++++++++++
> include/linux/phy/phy.h | 10 ++++++++++
> 2 files changed, 25 insertions(+)
>
> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
> index a268f4d6f3e9..8b1a6bfa5133 100644
> --- a/drivers/phy/phy-core.c
> +++ b/drivers/phy/phy-core.c
> @@ -357,6 +357,21 @@ int phy_set_mode(struct phy *phy, enum phy_mode mode)
> }
> EXPORT_SYMBOL_GPL(phy_set_mode);
>
> +int phy_set_vbus(struct phy *phy, int on)
> +{
> + int ret;
> +
> + if (!phy || !phy->ops->set_vbus)
> + return 0;
> +
> + mutex_lock(&phy->mutex);
> + ret = phy->ops->set_vbus(phy, on);
> + mutex_unlock(&phy->mutex);
> +
> + return ret;
> +}
> +EXPORT_SYMBOL_GPL(phy_set_vbus);
> +
> int phy_reset(struct phy *phy)
> {
> int ret;
> diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
> index 78bb0d7f6b11..4d1ebde7fb14 100644
> --- a/include/linux/phy/phy.h
> +++ b/include/linux/phy/phy.h
> @@ -36,6 +36,7 @@ enum phy_mode {
> * @power_on: powering on the phy
> * @power_off: powering off the phy
> * @set_mode: set the mode of the phy
> + * @set_vbus: enable/disable vbus in the phy (USB)
> * @reset: resetting the phy
> * @owner: the module owner containing the ops
> */
> @@ -45,6 +46,7 @@ struct phy_ops {
> int (*power_on)(struct phy *phy);
> int (*power_off)(struct phy *phy);
> int (*set_mode)(struct phy *phy, enum phy_mode mode);
> + int (*set_vbus)(struct phy *phy, int on);
please avoid adding usb specific ops in generic phy ops.
Thanks
Kishon
Powered by blists - more mailing lists