summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorRakesh Bodla <rbodla@nvidia.com>2011-08-19 13:30:13 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-10-10 17:05:31 -0700
commit2ae6748197e84047673ff8fd6080eadc6e23d029 (patch)
tree9ec022d18c6aabc3a3501712d3f968341dff5ef7 /drivers/usb
parente82a69a722c3903f19f1b58985cc9bc5233a8701 (diff)
usb: gadget: fsl: add proper handling of udc pullup
pull up of usb device controller should be done only in device mode. Bug 863320 Reviewed-on: http://git-master/r/48605 (cherry picked from commit d35e6c8557eabf864cfda4fbc1644d3fd7767850) Change-Id: Ic73872b0e242508947701df5f5e87aaf06bd75f0 Reviewed-on: http://git-master/r/56926 Reviewed-by: Varun Colbert <vcolbert@nvidia.com> Tested-by: Varun Colbert <vcolbert@nvidia.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/fsl_udc_core.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 8a016a20cd47..c0e4d75f79b5 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -1338,13 +1338,16 @@ static int fsl_pullup(struct usb_gadget *gadget, int is_on)
udc = container_of(gadget, struct fsl_udc, gadget);
udc->softconnect = (is_on != 0);
- if (can_pullup(udc))
- fsl_writel((fsl_readl(&dr_regs->usbcmd) | USB_CMD_RUN_STOP),
- &dr_regs->usbcmd);
- else
- fsl_writel((fsl_readl(&dr_regs->usbcmd) & ~USB_CMD_RUN_STOP),
- &dr_regs->usbcmd);
-
+ if (udc_controller->transceiver) {
+ if (udc_controller->transceiver->state == OTG_STATE_B_PERIPHERAL) {
+ if (can_pullup(udc))
+ fsl_writel((fsl_readl(&dr_regs->usbcmd) | USB_CMD_RUN_STOP),
+ &dr_regs->usbcmd);
+ else
+ fsl_writel((fsl_readl(&dr_regs->usbcmd) & ~USB_CMD_RUN_STOP),
+ &dr_regs->usbcmd);
+ }
+ }
return 0;
}