From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753784AbcGDMxh (ORCPT ); Mon, 4 Jul 2016 08:53:37 -0400 Received: from bear.ext.ti.com ([198.47.19.11]:37861 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753395AbcGDMxX (ORCPT ); Mon, 4 Jul 2016 08:53:23 -0400 Subject: Re: [PATCH v5 3/7] phy: Add set_mode callback To: David Lechner , , Bin Liu References: <1462837203-12125-1-git-send-email-david@lechnology.com> <1462837203-12125-4-git-send-email-david@lechnology.com> <57712075.1090202@ti.com> CC: , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Alan Stern , Lee Jones , , , Greg Kroah-Hartman , , , From: Kishon Vijay Abraham I Message-ID: <577A5BFA.5010308@ti.com> Date: Mon, 4 Jul 2016 18:22:10 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: <57712075.1090202@ti.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Bin, On Monday 27 June 2016 06:17 PM, Kishon Vijay Abraham I wrote: > Hi, > > On Tuesday 10 May 2016 05:09 AM, David Lechner wrote: >> The initial use for this is for PHYs that have a mode related to USB OTG. >> There are several SoCs (e.g. TI OMAP and DA8xx) that have a mode setting >> in the USB PHY to override OTG VBUS and ID signals. >> >> Of course, the enum can be expaned in the future to include modes for >> other types of PHYs as well. >> >> Suggested-by: Kishon Vijay Abraham I >> Signed-off-by: David Lechner > > I've created a immutable branch for this patch and it can be found here. > git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git > tags/phy-set-mode There was a build error in the above tag with allyesconfig. So I have created a new tag which includes the fix patch in addition to this patch. new tag: tags/phy-set-mode-v2 In the patches you sent to Greg [1], I didn't see this series included. However if you are planning to send another pull request for the next merge window, request you to use the new tag. Thanks Kishon [1] -> http://www.spinics.net/lists/linux-usb/msg142788.html > > I've merged this tag to my -next. > > Thanks > Kishon > >> --- >> drivers/phy/phy-core.c | 15 +++++++++++++++ >> include/linux/phy/phy.h | 17 +++++++++++++++++ >> 2 files changed, 32 insertions(+) >> >> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c >> index e7e574d..fe0344c 100644 >> --- a/drivers/phy/phy-core.c >> +++ b/drivers/phy/phy-core.c >> @@ -342,6 +342,21 @@ int phy_power_off(struct phy *phy) >> } >> EXPORT_SYMBOL_GPL(phy_power_off); >> >> +int phy_set_mode(struct phy *phy, enum phy_mode mode) >> +{ >> + int ret; >> + >> + if (!phy || !phy->ops->set_mode) >> + return 0; >> + >> + mutex_lock(&phy->mutex); >> + ret = phy->ops->set_mode(phy, mode); >> + mutex_unlock(&phy->mutex); >> + >> + return ret; >> +} >> +EXPORT_SYMBOL_GPL(phy_set_mode); >> + >> /** >> * _of_phy_get() - lookup and obtain a reference to a phy by phandle >> * @np: device_node for which to get the phy >> diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h >> index 8cf05e3..4248ade 100644 >> --- a/include/linux/phy/phy.h >> +++ b/include/linux/phy/phy.h >> @@ -22,12 +22,20 @@ >> >> struct phy; >> >> +enum phy_mode { >> + PHY_MODE_INVALID, >> + PHY_MODE_USB_HOST, >> + PHY_MODE_USB_DEVICE, >> + PHY_MODE_USB_OTG, >> +}; >> + >> /** >> * struct phy_ops - set of function pointers for performing phy operations >> * @init: operation to be performed for initializing phy >> * @exit: operation to be performed while exiting >> * @power_on: powering on the phy >> * @power_off: powering off the phy >> + * @set_mode: set the mode of the phy >> * @owner: the module owner containing the ops >> */ >> struct phy_ops { >> @@ -35,6 +43,7 @@ struct phy_ops { >> int (*exit)(struct phy *phy); >> int (*power_on)(struct phy *phy); >> int (*power_off)(struct phy *phy); >> + int (*set_mode)(struct phy *phy, enum phy_mode mode); >> struct module *owner; >> }; >> >> @@ -119,6 +128,7 @@ int phy_init(struct phy *phy); >> int phy_exit(struct phy *phy); >> int phy_power_on(struct phy *phy); >> int phy_power_off(struct phy *phy); >> +int phy_set_mode(struct phy *phy, enum phy_mode mode); >> static inline int phy_get_bus_width(struct phy *phy) >> { >> return phy->attrs.bus_width; >> @@ -224,6 +234,13 @@ static inline int phy_power_off(struct phy *phy) >> return -ENOSYS; >> } >> >> +static inline int phy_set_mode(struct phy *phy, enum phy_mode mode) >> +{ >> + if (!phy) >> + return 0; >> + return -ENOSYS; >> +} >> + >> static inline int phy_get_bus_width(struct phy *phy) >> { >> return -ENOSYS; >>