aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/core/hub.c11
-rw-r--r--drivers/usb/core/hub.h1
2 files changed, 7 insertions, 5 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 1815034ccb7a..830c851384bf 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -2211,12 +2211,13 @@ static int hub_port_debounce(struct usb_hub *hub, int port1)
2211 return portstatus; 2211 return portstatus;
2212} 2212}
2213 2213
2214static void ep0_reinit(struct usb_device *udev) 2214void usb_ep0_reinit(struct usb_device *udev)
2215{ 2215{
2216 usb_disable_endpoint(udev, 0 + USB_DIR_IN); 2216 usb_disable_endpoint(udev, 0 + USB_DIR_IN);
2217 usb_disable_endpoint(udev, 0 + USB_DIR_OUT); 2217 usb_disable_endpoint(udev, 0 + USB_DIR_OUT);
2218 usb_enable_endpoint(udev, &udev->ep0); 2218 usb_enable_endpoint(udev, &udev->ep0);
2219} 2219}
2220EXPORT_SYMBOL_GPL(usb_ep0_reinit);
2220 2221
2221#define usb_sndaddr0pipe() (PIPE_CONTROL << 30) 2222#define usb_sndaddr0pipe() (PIPE_CONTROL << 30)
2222#define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN) 2223#define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN)
@@ -2237,7 +2238,7 @@ static int hub_set_address(struct usb_device *udev, int devnum)
2237 if (retval == 0) { 2238 if (retval == 0) {
2238 udev->devnum = devnum; /* Device now using proper address */ 2239 udev->devnum = devnum; /* Device now using proper address */
2239 usb_set_device_state(udev, USB_STATE_ADDRESS); 2240 usb_set_device_state(udev, USB_STATE_ADDRESS);
2240 ep0_reinit(udev); 2241 usb_ep0_reinit(udev);
2241 } 2242 }
2242 return retval; 2243 return retval;
2243} 2244}
@@ -2473,7 +2474,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
2473 } 2474 }
2474 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i); 2475 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
2475 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i); 2476 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
2476 ep0_reinit(udev); 2477 usb_ep0_reinit(udev);
2477 } 2478 }
2478 2479
2479 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE); 2480 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
@@ -2729,7 +2730,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
2729loop_disable: 2730loop_disable:
2730 hub_port_disable(hub, port1, 1); 2731 hub_port_disable(hub, port1, 1);
2731loop: 2732loop:
2732 ep0_reinit(udev); 2733 usb_ep0_reinit(udev);
2733 release_address(udev); 2734 release_address(udev);
2734 usb_put_dev(udev); 2735 usb_put_dev(udev);
2735 if ((status == -ENOTCONN) || (status == -ENOTSUPP)) 2736 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
@@ -3164,7 +3165,7 @@ int usb_reset_device(struct usb_device *udev)
3164 3165
3165 /* ep0 maxpacket size may change; let the HCD know about it. 3166 /* ep0 maxpacket size may change; let the HCD know about it.
3166 * Other endpoints will be handled by re-enumeration. */ 3167 * Other endpoints will be handled by re-enumeration. */
3167 ep0_reinit(udev); 3168 usb_ep0_reinit(udev);
3168 ret = hub_port_init(parent_hub, udev, port1, i); 3169 ret = hub_port_init(parent_hub, udev, port1, i);
3169 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV) 3170 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
3170 break; 3171 break;
diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h
index d672cd81a3e4..2a116ce53c9b 100644
--- a/drivers/usb/core/hub.h
+++ b/drivers/usb/core/hub.h
@@ -195,5 +195,6 @@ struct usb_tt_clear {
195}; 195};
196 196
197extern void usb_hub_tt_clear_buffer(struct usb_device *dev, int pipe); 197extern void usb_hub_tt_clear_buffer(struct usb_device *dev, int pipe);
198extern void usb_ep0_reinit(struct usb_device *);
198 199
199#endif /* __LINUX_HUB_H */ 200#endif /* __LINUX_HUB_H */