Re: [PATCH 1/5] usb: musb: call musb_start() only once in OTG mode

2013-10-15 Thread Felipe Balbi
Hi,

On Tue, Oct 15, 2013 at 06:29:22PM +0200, Sebastian Andrzej Siewior wrote:
 In commit 001dd84 (usb: musb: start musb on the udc side, too) it was
 ensured that the state engine is started also in OTG mode after a
 removal / insertion of the gadget.
 Unfortunately this change also introduced a bug: If the device is
 configured as OTG and it connected with a remote host _without_ loading
 a gadget then we bug() later (because musb-otg-gadget is not
 initialized).
 Initially I assumed it might be nice to have the host part of musb in
 OTG mode working without having a gadget loaded. This bug and fact that
 it wasn't working like this before the host/gadget split made me realize
 that this was a silly idea.
 This patch now introduces back the old behavior where in OTG mode the
 host mode is only working after the gadget has been loaded.
 
 Cc: sta...@vger.kernel.org # v3.11
 Cc: Daniel Mack zon...@gmail.com
 Signed-off-by: Sebastian Andrzej Siewior bige...@linutronix.de
 ---
  drivers/usb/musb/musb_virthub.c | 19 ++-
  1 file changed, 18 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/usb/musb/musb_virthub.c b/drivers/usb/musb/musb_virthub.c
 index d1d6b83..9af6bba 100644
 --- a/drivers/usb/musb/musb_virthub.c
 +++ b/drivers/usb/musb/musb_virthub.c
 @@ -220,6 +220,23 @@ int musb_hub_status_data(struct usb_hcd *hcd, char *buf)
   return retval;
  }
  
 +static int musb_has_gadget(struct musb *musb)
 +{
 + /*
 +  * In host-only mode we start a connection right away. In OTG mode
 +  * we have to wait until we loaded a gadget. We don't really need a
 +  * gadget if we operate as a host but we should not start a session
 +  * as a device without a gadget or else we explode.
 +  */
 +#ifdef CONFIG_USB_MUSB_HOST
 + return 1;
 +#else
 + if (musb-port_mode == MUSB_PORT_MODE_HOST)
 + return 1;
 + return musb-g.dev.driver != NULL;
 +#endif

the logic looks inverted :-s has_gadget() is true when port mode is host
or we're in host-only builds :-(

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH 1/5] usb: musb: call musb_start() only once in OTG mode

2013-10-15 Thread Sebastian Andrzej Siewior
On 10/15/2013 07:43 PM, Felipe Balbi wrote:
 Hi,

Hi,

 index d1d6b83..9af6bba 100644 ---
 a/drivers/usb/musb/musb_virthub.c +++
 b/drivers/usb/musb/musb_virthub.c @@ -220,6 +220,23 @@ int
 musb_hub_status_data(struct usb_hcd *hcd, char *buf) return
 retval; }
 
 +static int musb_has_gadget(struct musb *musb) +{ +  /* + * In
 host-only mode we start a connection right away. In OTG mode +*
 we have to wait until we loaded a gadget. We don't really need a 
 + * gadget if we operate as a host but we should not start a
 session + * as a device without a gadget or else we explode. +
 */ +#ifdef CONFIG_USB_MUSB_HOST +return 1; +#else +  if
 (musb-port_mode == MUSB_PORT_MODE_HOST) +   return 1; + return
 musb-g.dev.driver != NULL; +#endif
 
 the logic looks inverted :-s has_gadget() is true when port mode is
 host or we're in host-only builds :-(

No, that is okay. As the comment says in host-only mode we never have a
gadget therefore we always return 1 (as we never get a second chance to
power up the port).

If you don't like the has_gadget part here I could rename it to
musb_can_power_port how about it?

Sebastian
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html