diff options
| -rw-r--r-- | drivers/usb/gadget/function/f_gsi.c | 24 |
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, |
