usb: dwc2: Initialize the USB core for peripheral mode

Initialize the USB driver to peripheral mode when a B-Device connector
is attached.

Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com>
Acked-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Dinh Nguyen 2014-11-11 11:13:36 -06:00 committed by Felipe Balbi
parent bcc06078ba
commit 510ffaa48e
3 changed files with 8 additions and 2 deletions

View File

@ -966,6 +966,8 @@ extern int s3c_hsotg_remove(struct dwc2_hsotg *hsotg);
extern int s3c_hsotg_suspend(struct dwc2_hsotg *dwc2); extern int s3c_hsotg_suspend(struct dwc2_hsotg *dwc2);
extern int s3c_hsotg_resume(struct dwc2_hsotg *dwc2); extern int s3c_hsotg_resume(struct dwc2_hsotg *dwc2);
extern int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq); extern int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq);
extern void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *dwc2);
extern void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg);
#else #else
static inline int s3c_hsotg_remove(struct dwc2_hsotg *dwc2) static inline int s3c_hsotg_remove(struct dwc2_hsotg *dwc2)
{ return 0; } { return 0; }
@ -975,6 +977,8 @@ static inline int s3c_hsotg_resume(struct dwc2_hsotg *dwc2)
{ return 0; } { return 0; }
static inline int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq) static inline int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq)
{ return 0; } { return 0; }
static inline void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *dwc2) {}
static inline void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg) {}
#endif #endif
#if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) #if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)

View File

@ -2125,7 +2125,7 @@ static int s3c_hsotg_corereset(struct dwc2_hsotg *hsotg)
* *
* Issue a soft reset to the core, and await the core finishing it. * Issue a soft reset to the core, and await the core finishing it.
*/ */
static void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg) void s3c_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg)
{ {
s3c_hsotg_corereset(hsotg); s3c_hsotg_corereset(hsotg);
@ -2257,7 +2257,7 @@ static void s3c_hsotg_core_disconnect(struct dwc2_hsotg *hsotg)
__orr32(hsotg->regs + DCTL, DCTL_SFTDISCON); __orr32(hsotg->regs + DCTL, DCTL_SFTDISCON);
} }
static void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg) void s3c_hsotg_core_connect(struct dwc2_hsotg *hsotg)
{ {
/* remove the soft-disconnect and let's go */ /* remove the soft-disconnect and let's go */
__bic32(hsotg->regs + DCTL, DCTL_SFTDISCON); __bic32(hsotg->regs + DCTL, DCTL_SFTDISCON);

View File

@ -1371,6 +1371,8 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg->op_state = OTG_STATE_B_PERIPHERAL;
dwc2_core_init(hsotg, false, -1); dwc2_core_init(hsotg, false, -1);
dwc2_enable_global_interrupts(hsotg); dwc2_enable_global_interrupts(hsotg);
s3c_hsotg_core_init_disconnected(hsotg);
s3c_hsotg_core_connect(hsotg);
} else { } else {
/* A-Device connector (Host Mode) */ /* A-Device connector (Host Mode) */
dev_dbg(hsotg->dev, "connId A\n"); dev_dbg(hsotg->dev, "connId A\n");