aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/core/devio.c3
-rw-r--r--drivers/usb/core/hub.c1
-rw-r--r--drivers/usb/core/urb.c2
-rw-r--r--drivers/usb/wusbcore/devconnect.c2
-rw-r--r--drivers/usb/wusbcore/security.c2
-rw-r--r--include/linux/usb/ch9.h2
6 files changed, 9 insertions, 3 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 6585f527e381..8f022af2fd7a 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -525,7 +525,8 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype,
525{ 525{
526 int ret = 0; 526 int ret = 0;
527 527
528 if (ps->dev->state != USB_STATE_ADDRESS 528 if (ps->dev->state != USB_STATE_UNAUTHENTICATED
529 && ps->dev->state != USB_STATE_ADDRESS
529 && ps->dev->state != USB_STATE_CONFIGURED) 530 && ps->dev->state != USB_STATE_CONFIGURED)
530 return -EHOSTUNREACH; 531 return -EHOSTUNREACH;
531 if (USB_TYPE_VENDOR == (USB_TYPE_MASK & requesttype)) 532 if (USB_TYPE_VENDOR == (USB_TYPE_MASK & requesttype))
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 7e33d63ab92f..f17d9ebc44af 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1305,6 +1305,7 @@ void usb_set_device_state(struct usb_device *udev,
1305 recursively_mark_NOTATTACHED(udev); 1305 recursively_mark_NOTATTACHED(udev);
1306 spin_unlock_irqrestore(&device_state_lock, flags); 1306 spin_unlock_irqrestore(&device_state_lock, flags);
1307} 1307}
1308EXPORT_SYMBOL_GPL(usb_set_device_state);
1308 1309
1309/* 1310/*
1310 * WUSB devices are simple: they have no hubs behind, so the mapping 1311 * WUSB devices are simple: they have no hubs behind, so the mapping
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
index 58bc5e3c2560..7025d801f23a 100644
--- a/drivers/usb/core/urb.c
+++ b/drivers/usb/core/urb.c
@@ -295,7 +295,7 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
295 if (!urb || urb->hcpriv || !urb->complete) 295 if (!urb || urb->hcpriv || !urb->complete)
296 return -EINVAL; 296 return -EINVAL;
297 dev = urb->dev; 297 dev = urb->dev;
298 if ((!dev) || (dev->state < USB_STATE_DEFAULT)) 298 if ((!dev) || (dev->state < USB_STATE_UNAUTHENTICATED))
299 return -ENODEV; 299 return -ENODEV;
300 300
301 /* For now, get the endpoint from the pipe. Eventually drivers 301 /* For now, get the endpoint from the pipe. Eventually drivers
diff --git a/drivers/usb/wusbcore/devconnect.c b/drivers/usb/wusbcore/devconnect.c
index 8e18141bb2e0..f0aac0cf315a 100644
--- a/drivers/usb/wusbcore/devconnect.c
+++ b/drivers/usb/wusbcore/devconnect.c
@@ -889,6 +889,8 @@ static void wusb_dev_add_ncb(struct usb_device *usb_dev)
889 if (usb_dev->wusb == 0 || usb_dev->devnum == 1) 889 if (usb_dev->wusb == 0 || usb_dev->devnum == 1)
890 return; /* skip non wusb and wusb RHs */ 890 return; /* skip non wusb and wusb RHs */
891 891
892 usb_set_device_state(usb_dev, USB_STATE_UNAUTHENTICATED);
893
892 wusbhc = wusbhc_get_by_usb_dev(usb_dev); 894 wusbhc = wusbhc_get_by_usb_dev(usb_dev);
893 if (wusbhc == NULL) 895 if (wusbhc == NULL)
894 goto error_nodev; 896 goto error_nodev;
diff --git a/drivers/usb/wusbcore/security.c b/drivers/usb/wusbcore/security.c
index f4aa28eca70d..8118db7f1d8d 100644
--- a/drivers/usb/wusbcore/security.c
+++ b/drivers/usb/wusbcore/security.c
@@ -312,6 +312,7 @@ int wusb_dev_update_address(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev)
312 result = wusb_set_dev_addr(wusbhc, wusb_dev, 0); 312 result = wusb_set_dev_addr(wusbhc, wusb_dev, 0);
313 if (result < 0) 313 if (result < 0)
314 goto error_addr0; 314 goto error_addr0;
315 usb_set_device_state(usb_dev, USB_STATE_DEFAULT);
315 usb_ep0_reinit(usb_dev); 316 usb_ep0_reinit(usb_dev);
316 317
317 /* Set new (authenticated) address. */ 318 /* Set new (authenticated) address. */
@@ -327,6 +328,7 @@ int wusb_dev_update_address(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev)
327 result = wusb_set_dev_addr(wusbhc, wusb_dev, new_address); 328 result = wusb_set_dev_addr(wusbhc, wusb_dev, new_address);
328 if (result < 0) 329 if (result < 0)
329 goto error_addr; 330 goto error_addr;
331 usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
330 usb_ep0_reinit(usb_dev); 332 usb_ep0_reinit(usb_dev);
331 usb_dev->authenticated = 1; 333 usb_dev->authenticated = 1;
332error_addr: 334error_addr:
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index fa777db7f7eb..d9d54803dbcb 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -763,8 +763,8 @@ enum usb_device_state {
763 /* chapter 9 and authentication (wireless) device states */ 763 /* chapter 9 and authentication (wireless) device states */
764 USB_STATE_ATTACHED, 764 USB_STATE_ATTACHED,
765 USB_STATE_POWERED, /* wired */ 765 USB_STATE_POWERED, /* wired */
766 USB_STATE_UNAUTHENTICATED, /* auth */
767 USB_STATE_RECONNECTING, /* auth */ 766 USB_STATE_RECONNECTING, /* auth */
767 USB_STATE_UNAUTHENTICATED, /* auth */
768 USB_STATE_DEFAULT, /* limited function */ 768 USB_STATE_DEFAULT, /* limited function */
769 USB_STATE_ADDRESS, 769 USB_STATE_ADDRESS,
770 USB_STATE_CONFIGURED, /* most functions */ 770 USB_STATE_CONFIGURED, /* most functions */