usb: gadget: fix wrong endpoint desc
[ Upstream commit e5b5da96da50ef30abb39cb9f694e99366404d24 ] 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: Peter Chen <peter.chen@nxp.com> Signed-off-by: EJ Hsu <ejh@nvidia.com> Signed-off-by: Felipe Balbi <balbi@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
8febe76553
commit
ebff557aca
2 changed files with 6 additions and 1 deletions
|
@ -625,8 +625,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;
|
||||||
|
|
|
@ -619,6 +619,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue