]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
usb: gadget: tegra: Add USB NV Charger Support
authorRohith Seelaboyina <rseelaboyina@nvidia.com>
Tue, 5 Feb 2013 10:30:24 +0000 (16:00 +0530)
committerDan Willemsen <dwillemsen@nvidia.com>
Sat, 14 Sep 2013 20:04:02 +0000 (13:04 -0700)
Add Support for NV charger and set correct current limits
for nv charger and non standard charger.

Bug 1225941

Change-Id: I3e9e6749e6df1929f961133e724602ffa0ded63d
Reviewed-on: http://git-master/r/197382
(cherry picked from commit 6dcd17d9bb08984aa4458ba5894a45ed4021c450)
Signed-off-by: Rohith Seelaboyina <rseelaboyina@nvidia.com>
Reviewed-on: http://git-master/r/206600
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
drivers/usb/gadget/tegra_udc.c
drivers/usb/gadget/tegra_udc.h

index 382528fa37feb98ab25e23181017f15c9278ab39..456d457a8ee1acd011a7cdd9f703737ae56e0d1d 100644 (file)
@@ -1431,7 +1431,8 @@ static int tegra_vbus_session(struct usb_gadget *gadget, int is_active)
                }
                /* start the controller */
                dr_controller_run(udc);
-               tegra_usb_set_charging_current(udc);
+               if (udc->connect_type != CONNECT_TYPE_SDP)
+                       tegra_usb_set_charging_current(udc);
        }
 
        return 0;
@@ -1451,7 +1452,7 @@ static int tegra_vbus_draw(struct usb_gadget *gadget, unsigned mA)
 
        udc = container_of(gadget, struct tegra_udc, gadget);
        /* Do not set current limits for CDP ports */
-       if (udc->connect_type != CONNECT_TYPE_CDP) {
+       if (udc->connect_type == CONNECT_TYPE_SDP) {
                udc->current_limit = mA;
                schedule_work(&udc->current_work);
        }
@@ -1814,6 +1815,9 @@ static void setup_received_irq(struct tegra_udc *udc,
                return;
 
        case USB_REQ_SET_ADDRESS:
+               udc->connect_type = CONNECT_TYPE_SDP;
+               tegra_vbus_draw(&udc->gadget,
+                               USB_CHARGING_SDP_CURRENT_LIMIT_UA/1000);
                /* Status phase from udc */
                if (setup->bRequestType != (USB_DIR_OUT | USB_TYPE_STANDARD
                                                | USB_RECIP_DEVICE))
index efb4ca65f029c42e6545c68f10203c3b3e9cdf4f..827a758d7031c36e53b65fc51d01c362426d8fe7 100644 (file)
@@ -42,7 +42,7 @@
 #define USB_CHARGING_CDP_CURRENT_LIMIT_UA 1500000
 #define USB_CHARGING_SDP_CURRENT_LIMIT_UA 100000
 #define USB_CHARGING_NV_CHARGER_CURRENT_LIMIT_UA 2000000
-#define USB_CHARGING_NON_STANDARD_CHARGER_CURRENT_LIMIT_UA 1800000
+#define USB_CHARGING_NON_STANDARD_CHARGER_CURRENT_LIMIT_UA 500000
 
  /* 4 sec wait time for charger detection after vbus is detected */
 #define USB_CHARGER_DETECTION_WAIT_TIME_MS 4000