usb: chipidea: otg: gadget module load and unload support
This patch is to support load and unload gadget driver in full OTG mode. Signed-off-by: Li Jun <jun.li@freescale.com> Signed-off-by: Peter Chen <peter.chen@freescale.com> Tested-by: Jiada Wang <jiada_wang@mentor.com> Cc: <stable@vger.kernel.org> #v4.0+
This commit is contained in:
parent
251b3c8b57
commit
85da852df6
|
@ -1751,6 +1751,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
|
||||
*/
|
||||
|
@ -1775,6 +1791,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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue