Hello

On 10/21/2015 12:23 PM, Peter Chen wrote:
From: Li Jun <b47...@freescale.com>

This patch is to support load and unload gadget driver in full OTG mode.

Signed-off-by: Li Jun <jun...@freescale.com>
Signed-off-by: Peter Chen <peter.c...@freescale.com>
Cc: Jiada Wang <jiada_w...@mentor.com>
(Peter: it fixes a bug that the unload/reload gadget driver can't work
  well at OTG FSM mode)
Cc: <sta...@vger.kernel.org> #v4.0+
---
  drivers/usb/chipidea/udc.c | 17 +++++++++++++++++
  1 file changed, 17 insertions(+)

diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index e19d8b8..67cfa04 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -1755,6 +1755,22 @@ static int ci_udc_start(struct usb_gadget *gadget,
        return retval;
  }

+static void ci_udc_stop_for_otg_fsm(struct ci_hdrc *ci)
+{
+       if (!ci_otg_is_fsm_mode(ci))
+               return;
+
+       mutex_lock(&ci->fsm.lock);
+       if (ci->fsm.otg->state == OTG_STATE_A_PERIPHERAL) {
+               ci->fsm.a_bidl_adis_tmout = 1;
+               ci_hdrc_otg_fsm_start(ci);
+       } else if (ci->fsm.otg->state == OTG_STATE_B_PERIPHERAL) {
+               ci->fsm.protocol = PROTO_UNDEF;
+               ci->fsm.otg->state = OTG_STATE_UNDEFINED;
+       }
+       mutex_unlock(&ci->fsm.lock);
+}
+
  /**
   * ci_udc_stop: unregister a gadget driver
   */
@@ -1779,6 +1795,7 @@ static int ci_udc_stop(struct usb_gadget *gadget)
        ci->driver = NULL;
        spin_unlock_irqrestore(&ci->lock, flags);

+       ci_udc_stop_for_otg_fsm(ci);
        return 0;
  }


I have confirmed this patch resolves my issue with gadget module load/unload
please feel free to add my Tested-by

Thanks,
Jiada
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to