Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759337AbcKCRS7 (ORCPT ); Thu, 3 Nov 2016 13:18:59 -0400 Received: from vern.gendns.com ([206.190.152.46]:40838 "EHLO vern.gendns.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759314AbcKCRS5 (ORCPT ); Thu, 3 Nov 2016 13:18:57 -0400 Subject: Re: [PATCH v3 5/5] usb: musb: da8xx: Remove set_mode callback To: Alexandre Bailon , b-liu@ti.com, balbi@kernel.org References: <1478186765-19840-1-git-send-email-abailon@baylibre.com> <1478186765-19840-6-git-send-email-abailon@baylibre.com> Cc: kishon@ti.com, khilman@baylibre.com, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, nsekhar@ti.com From: David Lechner Message-ID: Date: Thu, 3 Nov 2016 12:18:53 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <1478186765-19840-6-git-send-email-abailon@baylibre.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - vern.gendns.com X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lechnology.com X-Get-Message-Sender-Via: vern.gendns.com: authenticated_id: davidmain+lechnology.com/only user confirmed/virtual account not confirmed X-Authenticated-Sender: vern.gendns.com: davidmain@lechnology.com X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2833 Lines: 86 On 11/03/2016 10:26 AM, Alexandre Bailon wrote: > The USB PHY is able to operate in OTG, host or peripheral. > Some board may be wired to work act only as host or peripheral. > In such case, the dr_mode property of controller must be set to > host or peripheral. But doing that will also configure the PHY > in host or peripheral mode whereas OTG is able to detect which > role the USB controller should take. > The PHY's host or peripheral mode are actually only useful when > hardware doesn't allow OTG to detect it's role. > > The set_mode callback is used by the musb driver to set mode > of the PHY. But in the case of DA8xx, the PHY have some issues. > The OTG mode work correctly but the host and peripheral don't. > In host mode, the PHY stops to work after the first disconnect. > In device mode, the PHY doesn't detect any disconnect. > As the OTG mode is working properly, let the PHY in OTG mode, > whatever is the controller mode. > > Signed-off-by: Alexandre Bailon > --- > drivers/usb/musb/da8xx.c | 23 ----------------------- > 1 file changed, 23 deletions(-) > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index 6749aa1..581f830 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -335,28 +335,6 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci) > return ret; > } > > -static int da8xx_musb_set_mode(struct musb *musb, u8 musb_mode) Bin suggested using some sort of quirks flag. So instead of removing this callback, I think this is where to incorporate the quirks flags. I suppose the quirks could be kernel config options. Perhaps someone else has a better idea? > -{ > - struct da8xx_glue *glue = dev_get_drvdata(musb->controller->parent); > - enum phy_mode phy_mode; > - > - switch (musb_mode) { > - case MUSB_HOST: /* Force VBUS valid, ID = 0 */ > - phy_mode = PHY_MODE_USB_HOST; this should be something like... phy_mode = force_host_mode_quirk ? PHY_MODE_USB_HOST : PHY_MODE_USB_OTG; > - break; > - case MUSB_PERIPHERAL: /* Force VBUS valid, ID = 1 */ > - phy_mode = PHY_MODE_USB_DEVICE; and... phy_mode = force_peripheral_mode_quirk ? PHY_MODE_USB_DEVICE : PHY_MODE_USB_OTG; > - break; > - case MUSB_OTG: /* Don't override the VBUS/ID comparators */ > - phy_mode = PHY_MODE_USB_OTG; > - break; > - default: > - return -EINVAL; > - } > - > - return phy_set_mode(glue->phy, phy_mode); > -} > - > static int da8xx_musb_init(struct musb *musb) > { > struct da8xx_glue *glue = dev_get_drvdata(musb->controller->parent); > @@ -445,7 +423,6 @@ static const struct musb_platform_ops da8xx_ops = { > .enable = da8xx_musb_enable, > .disable = da8xx_musb_disable, > > - .set_mode = da8xx_musb_set_mode, > .try_idle = da8xx_musb_try_idle, > > .set_vbus = da8xx_musb_set_vbus, >