OSDN Git Service

usb: dwc2: gadget: Add remote_wakeup_allowed flag
authorVardan Mikayelyan <mvardan@synopsys.com>
Fri, 16 Feb 2018 10:08:53 +0000 (14:08 +0400)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 13 Mar 2018 08:47:55 +0000 (10:47 +0200)
It will be set once corresponding set_feature command comes.

True if device is allowed to wake-up host by remote-wakeup
signalling.

This is preparation for remote wake-up support implementation,
it will not be implemented until gadget stack provide interface
for bringing remote wake-up signalling.

Signed-off-by: Vardan Mikayelyan <mvardan@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Grigor Tovmasyan <tovmasya@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/core.h
drivers/usb/dwc2/gadget.c

index 31b1be0..3c9dcf3 100644 (file)
@@ -928,6 +928,8 @@ struct dwc2_hregs_backup {
  * @ctrl_req:           Request for EP0 control packets.
  * @ep0_state:          EP0 control transfers state
  * @test_mode:          USB test mode requested by the host
+ * @remote_wakeup_allowed: True if device is allowed to wake-up host by
+ *                      remote-wakeup signalling
  * @setup_desc_dma:    EP0 setup stage desc chain DMA address
  * @setup_desc:                EP0 setup stage desc chain pointer
  * @ctrl_in_desc_dma:  EP0 IN data phase desc chain DMA address
@@ -1082,6 +1084,7 @@ struct dwc2_hsotg {
        struct usb_gadget gadget;
        unsigned int enabled:1;
        unsigned int connected:1;
+       unsigned int remote_wakeup_allowed:1;
        struct dwc2_hsotg_ep *eps_in[MAX_EPS_CHANNELS];
        struct dwc2_hsotg_ep *eps_out[MAX_EPS_CHANNELS];
 #endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */
index 379d6e1..838e092 100644 (file)
@@ -1640,6 +1640,10 @@ static int dwc2_hsotg_process_req_feature(struct dwc2_hsotg *hsotg,
        switch (recip) {
        case USB_RECIP_DEVICE:
                switch (wValue) {
+               case USB_DEVICE_REMOTE_WAKEUP:
+                       hsotg->remote_wakeup_allowed = 1;
+                       break;
+
                case USB_DEVICE_TEST_MODE:
                        if ((wIndex & 0xff) != 0)
                                return -EINVAL;
@@ -4624,6 +4628,7 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg)
        hsotg->gadget.max_speed = USB_SPEED_HIGH;
        hsotg->gadget.ops = &dwc2_hsotg_gadget_ops;
        hsotg->gadget.name = dev_name(dev);
+       hsotg->remote_wakeup_allowed = 0;
 
        if (hsotg->params.lpm)
                hsotg->gadget.lpm_capable = true;