]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/blobdiff - drivers/usb/gadget/tegra_udc.c
usb: gadget: tegra: update vbus status properly
[sojka/nv-tegra/linux-3.10.git] / drivers / usb / gadget / tegra_udc.c
index 0902a925575f6295de5cab26944b042d3182cef2..7063ebaabd00d873d3bfaaafa41d2c1d6b4a63b7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2015, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2012-2016, NVIDIA CORPORATION.  All rights reserved.
  *
  * Description:
  * High-speed USB device controller driver.
@@ -167,10 +167,28 @@ static inline bool vbus_enabled(struct tegra_udc *udc)
                 * of VBUS status.*/
                status = (udc_readl(udc, VBUS_SENSOR_REG_OFFSET)
                                                & USB_SYS_VBUS_ASESSION);
-       } else if (!udc->support_pmu_vbus) {
+       } else if (udc->support_pmu_vbus) {
+               if (udc->vbus_extcon_dev &&
+                       extcon_get_cable_state(udc->vbus_extcon_dev, "USB"))
+                       return true;
+
+               if (udc->aca_nv_extcon_cable &&
+                       extcon_get_cable_state_(udc->aca_nv_extcon_dev,
+                       udc->aca_nv_extcon_cable->cable_index))
+                       return true;
+
+               if (udc->aca_rid_b_ecable &&
+                       extcon_get_cable_state_(udc->aca_rid_b_ecable->edev,
+                       udc->aca_rid_b_ecable->cable_index))
+                       return true;
+
+               if (udc->aca_rid_c_ecable &&
+                       extcon_get_cable_state_(udc->aca_rid_c_ecable->edev,
+                       udc->aca_rid_c_ecable->cable_index))
+                       return true;
+       } else
                status = (udc_readl(udc, VBUS_WAKEUP_REG_OFFSET)
                                                & USB_SYS_VBUS_STATUS);
-       }
 
        return status;
 }