Commit e5b5da96 authored by EJ Hsu's avatar EJ Hsu Committed by Felipe Balbi

usb: gadget: fix wrong endpoint desc

Gadget driver should always use config_ep_by_speed() to initialize
usb_ep struct according to usb device's operating speed. Otherwise,
usb_ep struct may be wrong if usb devcie's operating speed is changed.

The key point in this patch is that we want to make sure the desc pointer
in usb_ep struct will be set to NULL when gadget is disconnected.
This will force it to call config_ep_by_speed() to correctly initialize
usb_ep struct based on the new operating speed when gadget is
re-connected later.
Reviewed-by: default avatarPeter Chen <peter.chen@nxp.com>
Signed-off-by: default avatarEJ Hsu <ejh@nvidia.com>
Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
parent 2d7b78f5
...@@ -621,8 +621,12 @@ static void ecm_disable(struct usb_function *f) ...@@ -621,8 +621,12 @@ static void ecm_disable(struct usb_function *f)
DBG(cdev, "ecm deactivated\n"); DBG(cdev, "ecm deactivated\n");
if (ecm->port.in_ep->enabled) if (ecm->port.in_ep->enabled) {
gether_disconnect(&ecm->port); gether_disconnect(&ecm->port);
} else {
ecm->port.in_ep->desc = NULL;
ecm->port.out_ep->desc = NULL;
}
usb_ep_disable(ecm->notify); usb_ep_disable(ecm->notify);
ecm->notify->desc = NULL; ecm->notify->desc = NULL;
......
...@@ -618,6 +618,7 @@ static void rndis_disable(struct usb_function *f) ...@@ -618,6 +618,7 @@ static void rndis_disable(struct usb_function *f)
gether_disconnect(&rndis->port); gether_disconnect(&rndis->port);
usb_ep_disable(rndis->notify); usb_ep_disable(rndis->notify);
rndis->notify->desc = NULL;
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment