usb: chipidea: otg: set host_request_flag for gadget
authorLi Jun <jun.li@nxp.com>
Fri, 19 Feb 2016 02:04:45 +0000 (10:04 +0800)
committerFelipe Balbi <balbi@kernel.org>
Fri, 4 Mar 2016 13:14:37 +0000 (15:14 +0200)
Set host_request_flag if the current peripheral wants to take host role
via changing a_bus_req or b_bus_req by user application.

Acked-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Li Jun <jun.li@nxp.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
drivers/usb/chipidea/otg_fsm.c

index ba90dc66703de3631bf4e6b533944c64bafeb257..cb28e763f0b8dee37a6574ff3a609541bcd73e65 100644 (file)
@@ -66,6 +66,11 @@ set_a_bus_req(struct device *dev, struct device_attribute *attr,
                        return count;
                }
                ci->fsm.a_bus_req = 1;
+               if (ci->fsm.otg->state == OTG_STATE_A_PERIPHERAL) {
+                       ci->gadget.host_request_flag = 1;
+                       mutex_unlock(&ci->fsm.lock);
+                       return count;
+               }
        }
 
        ci_otg_queue_work(ci);
@@ -144,8 +149,14 @@ set_b_bus_req(struct device *dev, struct device_attribute *attr,
        mutex_lock(&ci->fsm.lock);
        if (buf[0] == '0')
                ci->fsm.b_bus_req = 0;
-       else if (buf[0] == '1')
+       else if (buf[0] == '1') {
                ci->fsm.b_bus_req = 1;
+               if (ci->fsm.otg->state == OTG_STATE_B_PERIPHERAL) {
+                       ci->gadget.host_request_flag = 1;
+                       mutex_unlock(&ci->fsm.lock);
+                       return count;
+               }
+       }
 
        ci_otg_queue_work(ci);
        mutex_unlock(&ci->fsm.lock);