|
|
|
gadget: Clearing ep->desc in struct usb_ep on EP disable? | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] |
|
Hi,
I am confused as to whether the UDC driver should be clearing ep->desc
in the usb_ep struct.
Commit f9c56cdd3905c96c600456203637bd7ec8ec6383 (usb: gadget: Clear
usb_endpoint_descriptor inside the struct usb_ep on disable) indicates
that f_serial will have problems if the UDC driver does not clear
ep->desc.
But I also see code in u_ether.c:eth_stop() which seems to assume the opposite:
usb_ep_disable(link->in_ep);
usb_ep_disable(link->out_ep);
if (netif_carrier_ok(net)) {
DBG(dev, "host still using in/out endpoints\n");
usb_ep_enable(link->in_ep);
usb_ep_enable(link->out_ep);
}
The helper functions are:
static inline int usb_ep_disable(struct usb_ep *ep)
{
return ep->ops->disable(ep);
}
static inline int usb_ep_enable(struct usb_ep *ep)
{
return ep->ops->enable(ep, ep->desc);
}
eth_stop() runs on "ifconfig usb0 down".
If my UDC driver clears ep->desc on disable, the subsequent
usb_ep_enable() passes in a NULL endpoint descriptor; the call fails
and this causes major trouble when I try to re-enable the usb0
interface (ifconfig usb0 up). rx_fill() winds up trying to queue
transactions on a disabled endpoint.
Looking at the dummy_hcd driver for reference, I see that it clears
its own private ep->desc (in struct dummy_ep) but doesn't touch the
pointer in struct usb_ep. Other UDC drivers now behave differently
due to the commit referenced above.
Is anyone able to shed any light on this?
Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html

[Linux Media] [Video for Linux] [Linux Input] [Linux Audio Users] [Photo] [Yosemite News] [Yosemite Photos] [Free Online Dating] [Linux Kernel] [Linux SCSI] [Old Linux USB Devel Archive] [More Archives]
![]() |
![]() |