Loading drivers/usb/gadget/function/f_gsi.c +43 −17 Original line number Diff line number Diff line Loading @@ -560,7 +560,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_STARTXFER failed: %d\n", __func__, ret); return ret; goto free_trb_ep_in; } d_port->in_xfer_rsc_index = usb_gsi_ep_op(d_port->in_ep, NULL, Loading Loading @@ -608,7 +608,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_PREPARE_TRBS failed: %d\n", __func__, ret); return ret; goto end_xfer_ep_in; } ret = usb_gsi_ep_op(d_port->out_ep, &d_port->out_request, Loading @@ -616,7 +616,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_STARTXFER failed: %d\n", __func__, ret); return ret; goto free_trb_ep_out; } d_port->out_xfer_rsc_index = Loading Loading @@ -694,7 +694,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) conn_params); if (ret) { log_event_err("%s: IPA connect failed %d", __func__, ret); return ret; goto end_xfer_ep_out; } log_event_dbg("%s: xdci_connect done", __func__); Loading Loading @@ -722,6 +722,21 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) d_port->out_request.db_reg_phs_addr_msb = ipa_out_channel_out_params.db_reg_phs_addr_msb; } return ret; end_xfer_ep_out: usb_gsi_ep_op(d_port->out_ep, NULL, GSI_EP_OP_ENDXFER); free_trb_ep_out: usb_gsi_ep_op(d_port->out_ep, &d_port->out_request, GSI_EP_OP_FREE_TRBS); end_xfer_ep_in: usb_gsi_ep_op(d_port->in_ep, NULL, GSI_EP_OP_ENDXFER); free_trb_ep_in: usb_gsi_ep_op(d_port->in_ep, &d_port->in_request, GSI_EP_OP_FREE_TRBS); return ret; } Loading Loading @@ -925,14 +940,26 @@ static void ipa_work_handler(struct work_struct *w) if (ret) { log_event_err("%s: gsi_alloc_trb_failed\n", __func__); usb_gadget_autopm_put_async(d_port->gadget); break; } d_port->sm_state = STATE_CONNECT_IN_PROGRESS; log_event_dbg("%s: ST_INIT_EVT_CONN_IN_PROG", __func__); if (peek_event(d_port) != EVT_DISCONNECTED) ipa_connect_channels(d_port); if (peek_event(d_port) != EVT_DISCONNECTED) { ret = ipa_connect_channels(d_port); if (ret) { log_event_err("%s: ipa_connect_channels failed\n", __func__); gsi_free_trb_buffer(gsi); usb_gadget_autopm_put_async( d_port->gadget); d_port->sm_state = STATE_INITIALIZED; break; } } } else if (event == EVT_HOST_READY) { /* * When in a composition such as RNDIS + ADB, Loading @@ -952,10 +979,19 @@ static void ipa_work_handler(struct work_struct *w) if (ret) { log_event_err("%s: gsi_alloc_trb_failed\n", __func__); usb_gadget_autopm_put_async(d_port->gadget); break; } ret = ipa_connect_channels(d_port); if (ret) { log_event_err("%s: ipa_connect_channels failed\n", __func__); gsi_free_trb_buffer(gsi); usb_gadget_autopm_put_async(d_port->gadget); break; } ipa_connect_channels(d_port); ipa_data_path_enable(d_port); d_port->sm_state = STATE_CONNECTED; log_event_dbg("%s: ST_INIT_EVT_HOST_READY", __func__); Loading Loading @@ -1067,16 +1103,6 @@ static void ipa_work_handler(struct work_struct *w) log_event_dbg("%s: ST_CON_EVT_CON", __func__); } break; case STATE_DISCONNECTED: if (event == EVT_CONNECT_IN_PROGRESS) { ipa_connect_channels(d_port); d_port->sm_state = STATE_CONNECT_IN_PROGRESS; log_event_dbg("%s: ST_DIS_EVT_CON_IN_PROG", __func__); } else if (event == EVT_UNINITIALIZED) { d_port->sm_state = STATE_UNINITIALIZED; log_event_dbg("%s: ST_DIS_EVT_UNINIT", __func__); } break; case STATE_SUSPEND_IN_PROGRESS: if (event == EVT_IPA_SUSPEND) { d_port->sm_state = STATE_SUSPENDED; Loading Loading
drivers/usb/gadget/function/f_gsi.c +43 −17 Original line number Diff line number Diff line Loading @@ -560,7 +560,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_STARTXFER failed: %d\n", __func__, ret); return ret; goto free_trb_ep_in; } d_port->in_xfer_rsc_index = usb_gsi_ep_op(d_port->in_ep, NULL, Loading Loading @@ -608,7 +608,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_PREPARE_TRBS failed: %d\n", __func__, ret); return ret; goto end_xfer_ep_in; } ret = usb_gsi_ep_op(d_port->out_ep, &d_port->out_request, Loading @@ -616,7 +616,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) if (ret) { log_event_err("%s: GSI_EP_OP_STARTXFER failed: %d\n", __func__, ret); return ret; goto free_trb_ep_out; } d_port->out_xfer_rsc_index = Loading Loading @@ -694,7 +694,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) conn_params); if (ret) { log_event_err("%s: IPA connect failed %d", __func__, ret); return ret; goto end_xfer_ep_out; } log_event_dbg("%s: xdci_connect done", __func__); Loading Loading @@ -722,6 +722,21 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) d_port->out_request.db_reg_phs_addr_msb = ipa_out_channel_out_params.db_reg_phs_addr_msb; } return ret; end_xfer_ep_out: usb_gsi_ep_op(d_port->out_ep, NULL, GSI_EP_OP_ENDXFER); free_trb_ep_out: usb_gsi_ep_op(d_port->out_ep, &d_port->out_request, GSI_EP_OP_FREE_TRBS); end_xfer_ep_in: usb_gsi_ep_op(d_port->in_ep, NULL, GSI_EP_OP_ENDXFER); free_trb_ep_in: usb_gsi_ep_op(d_port->in_ep, &d_port->in_request, GSI_EP_OP_FREE_TRBS); return ret; } Loading Loading @@ -925,14 +940,26 @@ static void ipa_work_handler(struct work_struct *w) if (ret) { log_event_err("%s: gsi_alloc_trb_failed\n", __func__); usb_gadget_autopm_put_async(d_port->gadget); break; } d_port->sm_state = STATE_CONNECT_IN_PROGRESS; log_event_dbg("%s: ST_INIT_EVT_CONN_IN_PROG", __func__); if (peek_event(d_port) != EVT_DISCONNECTED) ipa_connect_channels(d_port); if (peek_event(d_port) != EVT_DISCONNECTED) { ret = ipa_connect_channels(d_port); if (ret) { log_event_err("%s: ipa_connect_channels failed\n", __func__); gsi_free_trb_buffer(gsi); usb_gadget_autopm_put_async( d_port->gadget); d_port->sm_state = STATE_INITIALIZED; break; } } } else if (event == EVT_HOST_READY) { /* * When in a composition such as RNDIS + ADB, Loading @@ -952,10 +979,19 @@ static void ipa_work_handler(struct work_struct *w) if (ret) { log_event_err("%s: gsi_alloc_trb_failed\n", __func__); usb_gadget_autopm_put_async(d_port->gadget); break; } ret = ipa_connect_channels(d_port); if (ret) { log_event_err("%s: ipa_connect_channels failed\n", __func__); gsi_free_trb_buffer(gsi); usb_gadget_autopm_put_async(d_port->gadget); break; } ipa_connect_channels(d_port); ipa_data_path_enable(d_port); d_port->sm_state = STATE_CONNECTED; log_event_dbg("%s: ST_INIT_EVT_HOST_READY", __func__); Loading Loading @@ -1067,16 +1103,6 @@ static void ipa_work_handler(struct work_struct *w) log_event_dbg("%s: ST_CON_EVT_CON", __func__); } break; case STATE_DISCONNECTED: if (event == EVT_CONNECT_IN_PROGRESS) { ipa_connect_channels(d_port); d_port->sm_state = STATE_CONNECT_IN_PROGRESS; log_event_dbg("%s: ST_DIS_EVT_CON_IN_PROG", __func__); } else if (event == EVT_UNINITIALIZED) { d_port->sm_state = STATE_UNINITIALIZED; log_event_dbg("%s: ST_DIS_EVT_UNINIT", __func__); } break; case STATE_SUSPEND_IN_PROGRESS: if (event == EVT_IPA_SUSPEND) { d_port->sm_state = STATE_SUSPENDED; Loading