phy: tegra: xusb: Add vbus override support on Tegra186
authorNagarjuna Kristam <nkristam@nvidia.com>
Fri, 18 Oct 2019 09:38:09 +0000 (15:08 +0530)
committerKishon Vijay Abraham I <kishon@ti.com>
Wed, 23 Oct 2019 07:50:36 +0000 (13:20 +0530)
Tegra XUSB device control driver needs to control vbus override
during its operations, add API for the support.

Signed-off-by: Nagarjuna Kristam <nkristam@nvidia.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
drivers/phy/tegra/xusb-tegra186.c

index 6f3afaf..84c2739 100644 (file)
@@ -857,9 +857,32 @@ static void tegra186_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
 {
 }
 
+static int tegra186_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl,
+                                              bool status)
+{
+       u32 value;
+
+       dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear");
+
+       value = padctl_readl(padctl, USB2_VBUS_ID);
+
+       if (status) {
+               value |= VBUS_OVERRIDE;
+               value &= ~ID_OVERRIDE(~0);
+               value |= ID_OVERRIDE_FLOATING;
+       } else {
+               value &= ~VBUS_OVERRIDE;
+       }
+
+       padctl_writel(padctl, value, USB2_VBUS_ID);
+
+       return 0;
+}
+
 static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = {
        .probe = tegra186_xusb_padctl_probe,
        .remove = tegra186_xusb_padctl_remove,
+       .vbus_override = tegra186_xusb_padctl_vbus_override,
 };
 
 static const char * const tegra186_xusb_padctl_supply_names[] = {