usb: gadget: tegra:change condition for vbus check
Rakesh Bodla [Wed, 17 Oct 2012 06:06:21 +0000 (11:06 +0530)]
Changing the condition for vbus check. VBUS will be
present when OTG cable is connected, hence vbus
status will be reflected wrong. Correct status
is tracked through vbus_active variable.

Bug 1158853

Change-Id: Ic904beb5919ddafef5becf39ddac1767cdda79cd
Signed-off-by: Rakesh Bodla <rbodla@nvidia.com>
Reviewed-on: http://git-master/r/145148
Reviewed-by: Mrutyunjay Sawant <msawant@nvidia.com>
Tested-by: Mrutyunjay Sawant <msawant@nvidia.com>

drivers/usb/gadget/tegra_udc.c

index fb74a8f..80c7f94 100644 (file)
@@ -657,7 +657,7 @@ static int tegra_ep_disable(struct usb_ep *_ep)
        ep_num = ep_index(ep);
 
        /* Touch the registers if cable is connected and phy is on */
-       if (vbus_enabled(udc)) {
+       if (udc->vbus_active) {
                epctrl = udc_readl(udc, EP_CONTROL_REG_OFFSET + (ep_num * 4));
                if (ep_is_in(ep))
                        epctrl &= ~EPCTRL_TX_ENABLE;
@@ -1031,7 +1031,7 @@ static int tegra_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
        ep_num = ep_index(ep);
 
        /* Touch the registers if cable is connected and phy is on */
-       if (vbus_enabled(udc)) {
+       if (udc->vbus_active) {
                epctrl = udc_readl(udc, EP_CONTROL_REG_OFFSET + (ep_num * 4));
                if (ep_is_in(ep))
                        epctrl &= ~EPCTRL_TX_ENABLE;
@@ -1082,7 +1082,7 @@ static int tegra_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
        /* Enable EP */
 out:
        /* Touch the registers if cable is connected and phy is on */
-       if (vbus_enabled(udc)) {
+       if (udc->vbus_active) {
                epctrl = udc_readl(udc, EP_CONTROL_REG_OFFSET + (ep_num * 4));
                if (ep_is_in(ep))
                        epctrl |= EPCTRL_TX_ENABLE;
@@ -1204,7 +1204,7 @@ static void tegra_ep_fifo_flush(struct usb_ep *_ep)
                bits = 1 << ep_num;
 
        /* Touch the registers if cable is connected and phy is on */
-       if (!vbus_enabled(udc))
+       if (!udc->vbus_active)
                return;
 
        timeout = jiffies + UDC_FLUSH_TIMEOUT_MS;
@@ -2419,14 +2419,13 @@ static int tegra_udc_start(struct usb_gadget_driver *driver,
                goto out;
        }
 
-
        /* Enable DR IRQ reg and Set usbcmd reg  Run bit */
        if (vbus_enabled(udc)) {
                dr_controller_run(udc);
                udc->usb_state = USB_STATE_ATTACHED;
                udc->ep0_state = WAIT_FOR_SETUP;
                udc->ep0_dir = 0;
-               udc->vbus_active = vbus_enabled(udc);
+               udc->vbus_active = 1;
        }
 
        printk(KERN_INFO "%s: bind to driver %s\n",