Re: [PATCH v2] usb: gadget: fsl_udc_core: Fix pullup status

From: Dmitry Osipenko
Date: Tue Mar 29 2016 - 07:16:45 EST


29.03.2016 13:31, Felipe Balbi ÐÐÑÐÑ:
Dmitry Osipenko <digetx@xxxxxxxxx> writes:
udc->softconnect should be set regardless of the VBUS state, otherwise
the USB peripheral device, connected during suspend, won't be detected
since can_pullup() would return false and the UDC won't be enabled.

Fixes: 252455c40316 (usb: gadget: fsl driver pullup fix)
Signed-off-by: Dmitry Osipenko <digetx@xxxxxxxxx>
---
Changelog:
V2: "(is_on != 0)" changed to "!!is_on" as per Sergei Shtylyov comment,
cleaned up commit message.

drivers/usb/gadget/udc/fsl_udc_core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/udc/fsl_udc_core.c b/drivers/usb/gadget/udc/fsl_udc_core.c
index aab5221..4309b4f 100644
--- a/drivers/usb/gadget/udc/fsl_udc_core.c
+++ b/drivers/usb/gadget/udc/fsl_udc_core.c
@@ -1220,10 +1220,11 @@ static int fsl_pullup(struct usb_gadget *gadget, int is_on)

udc = container_of(gadget, struct fsl_udc, gadget);

+ udc->softconnect = !!is_on;
+
if (!udc->vbus_active)
return -EOPNOTSUPP;

- udc->softconnect = (is_on != 0);

if we're suspended and VBUS was cut off, why would we keep softconnect
set to true ? That would also cause a discrepancy between SW state and
HW state.

I don't have this HW to test, but this patch seems wrong to me.


Yeah, you are right. I'm using a fork of this driver with some minor differences to make it work with other hardware and missed that upstream driver enables controller on resume unconditionally. Sorry for the noise and please ignore this patch.

--
Dmitry