]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
usb: chipidea: udc: update gadget states according to ch9
authorPeter Chen <peter.chen@freescale.com>
Sun, 4 May 2014 01:24:44 +0000 (09:24 +0800)
committerNitin Garg <nitin.garg@freescale.com>
Fri, 16 Jan 2015 03:18:11 +0000 (21:18 -0600)
Update device states according to ch9 in USB 2.0 specification

Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/udc.c

index f1a046a8c4f600cf6e34ee601e0227c0e78041fc..b8125aa64ad8c74f2f3d12fb264eeacb80517603 100644 (file)
@@ -709,6 +709,8 @@ __acquires(ci->lock)
        if (ci->status == NULL)
                retval = -ENOMEM;
 
+       usb_gadget_set_state(&ci->gadget, USB_STATE_DEFAULT);
+
 done:
        spin_lock(&ci->lock);
 
@@ -864,6 +866,8 @@ isr_setup_status_complete(struct usb_ep *ep, struct usb_request *req)
        if (ci->setaddr) {
                hw_usb_set_address(ci, ci->address);
                ci->setaddr = false;
+               if (ci->address)
+                       usb_gadget_set_state(&ci->gadget, USB_STATE_ADDRESS);
        }
 
        spin_lock_irqsave(&ci->lock, flags);
@@ -1473,7 +1477,7 @@ static int ci_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
                        pm_runtime_get_sync(&_gadget->dev);
                        hw_device_reset(ci, USBMODE_CM_DC);
                        hw_device_state(ci, ci->ep0out->qh.dma);
-                       dev_dbg(ci->dev, "Connected to host\n");
+                       usb_gadget_set_state(_gadget, USB_STATE_POWERED);
                } else {
                        if (ci->driver)
                                ci->driver->disconnect(&ci->gadget);
@@ -1483,7 +1487,7 @@ static int ci_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
                                CI_HDRC_CONTROLLER_STOPPED_EVENT);
                        _gadget_stop_activity(&ci->gadget);
                        pm_runtime_put_sync(&_gadget->dev);
-                       dev_dbg(ci->dev, "Disconnected from host\n");
+                       usb_gadget_set_state(_gadget, USB_STATE_NOTATTACHED);
                }
        }
 
@@ -1756,6 +1760,8 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci)
                                ci->suspended = 1;
                                spin_unlock(&ci->lock);
                                ci->driver->suspend(&ci->gadget);
+                               usb_gadget_set_state(&ci->gadget,
+                                               USB_STATE_SUSPENDED);
                                spin_lock(&ci->lock);
                        }
                }