summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorMayank Rana <mrana@codeaurora.org>2016-05-24 18:32:24 -0700
committerKyle Yan <kyan@codeaurora.org>2016-06-16 15:23:09 -0700
commit4b0289c5824056486bb13dfb9e5435fac99724cd (patch)
tree87909484ecd6d4b65fdad7e1226950d51d0b1dac /drivers/usb
parentd44fbf353e415e6c6bdaef56764a6e028b00b81c (diff)
usb: gadget: gsi: Fix reporting of USB device's usage count
Currently driver is reading and logging usage count of gadget device but it is required to use usage count of gadget's parent device which is used to prevent USB controller's low power mode. Hence fix reporting of USB devices' usage count. Also mark sm_state to initialized and remove queueing of ipa_usb_wq as ipa_work_handler() is running without USB gadget is initialized i.e. gadget is NULL. CRs-Fixed: 1021499 Change-Id: Ia64afa3adb769674f6a9a60fde2c7397b7e4fe49 Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/function/f_gsi.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 461db2ef5e22..6964933e5077 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -532,19 +532,30 @@ static void ipa_work_handler(struct work_struct *w)
usb_ipa_w);
u8 event;
int ret = 0;
- struct device *gad_dev = &d_port->gadget->dev;
+ struct usb_gadget *gadget = d_port->gadget;
+ struct device *dev;
+ struct device *gad_dev;
event = read_event(d_port);
log_event_dbg("%s: event = %x sm_state %x", __func__,
event, d_port->sm_state);
+ if (gadget) {
+ dev = &gadget->dev;
+ if (!dev || !dev->parent) {
+ log_event_err("%s(): dev or dev->parent is NULL.\n",
+ __func__);
+ return;
+ }
+ gad_dev = dev->parent;
+ } else {
+ log_event_err("%s(): gadget is NULL.\n", __func__);
+ return;
+ }
+
switch (d_port->sm_state) {
case STATE_UNINITIALIZED:
- if (event == EVT_INITIALIZED) {
- d_port->sm_state = STATE_INITIALIZED;
- log_event_dbg("%s: ST_INIT_EVT_INIT", __func__);
- }
break;
case STATE_INITIALIZED:
if (event == EVT_CONNECT_IN_PROGRESS) {
@@ -2522,8 +2533,7 @@ static int gsi_bind(struct usb_configuration *c, struct usb_function *f)
goto dereg_rndis;
}
- post_event(&gsi->d_port, EVT_INITIALIZED);
- queue_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w);
+ gsi->d_port.sm_state = STATE_INITIALIZED;
DBG(cdev, "%s: %s speed IN/%s OUT/%s NOTIFY/%s\n",
f->name,