diff options
author | BH Hsieh <bhsieh@nvidia.com> | 2017-03-24 02:43:54 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-03-30 19:39:17 -0400 |
commit | 015e13cb88622b099876e1bd617c5c6838c756e6 (patch) | |
tree | 00d18da7d19871329d01f863923e1d73d42d767e /drivers/pinctrl | |
parent | 876a8a4679a99edc070dcd03051165e2fff929db (diff) |
padctl: t186: enable vbus after HCRST
Realtek R8152 is observed violating spec and failed
to turn on termination after exiting Polling.Active
due to 12 ms timeout.
To avoid this issue, enable VBUS after HCRST instead
of before loading xusb firmware hence no reset SSPI
would interrupt Polling.RxEQ/Polling.Active state.
bug 200272921
Change-Id: I4b834f789c5824f4f7fdfa6c918bdbc5a35917b7
Signed-off-by: BH Hsieh <bhsieh@nvidia.com>
Reviewed-on: http://git-master/r/1327382
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Shreshtha Sahu <ssahu@nvidia.com>
Tested-by: Shreshtha Sahu <ssahu@nvidia.com>
Reviewed-by: WK Tsai <wtsai@nvidia.com>
Reviewed-by: Henry Lin <henryl@nvidia.com>
Reviewed-by: ChihMin Cheng <ccheng@nvidia.com>
Reviewed-by: Ashutosh Jha <ajha@nvidia.com>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/pinctrl-tegra186-padctl.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/pinctrl/pinctrl-tegra186-padctl.c b/drivers/pinctrl/pinctrl-tegra186-padctl.c index a15c5ee57..0a650cc86 100644 --- a/drivers/pinctrl/pinctrl-tegra186-padctl.c +++ b/drivers/pinctrl/pinctrl-tegra186-padctl.c | |||
@@ -1840,7 +1840,7 @@ static int tegra186_utmi_phy_power_off(struct phy *phy) | |||
1840 | return 0; | 1840 | return 0; |
1841 | } | 1841 | } |
1842 | 1842 | ||
1843 | static int tegra186_utmi_phy_init(struct phy *phy) | 1843 | int tegra18x_utmi_vbus_enable(struct phy *phy) |
1844 | { | 1844 | { |
1845 | struct tegra_padctl *padctl = phy_get_drvdata(phy); | 1845 | struct tegra_padctl *padctl = phy_get_drvdata(phy); |
1846 | int port = utmi_phy_to_port(phy); | 1846 | int port = utmi_phy_to_port(phy); |
@@ -1849,7 +1849,7 @@ static int tegra186_utmi_phy_init(struct phy *phy) | |||
1849 | if (port < 0) | 1849 | if (port < 0) |
1850 | return port; | 1850 | return port; |
1851 | 1851 | ||
1852 | dev_dbg(padctl->dev, "phy init UTMI port %d\n", port); | 1852 | dev_dbg(padctl->dev, "enable vbus-%d\n", port); |
1853 | 1853 | ||
1854 | mutex_lock(&padctl->lock); | 1854 | mutex_lock(&padctl->lock); |
1855 | 1855 | ||
@@ -1873,6 +1873,24 @@ static int tegra186_utmi_phy_init(struct phy *phy) | |||
1873 | 1873 | ||
1874 | return 0; | 1874 | return 0; |
1875 | } | 1875 | } |
1876 | EXPORT_SYMBOL_GPL(tegra18x_utmi_vbus_enable); | ||
1877 | |||
1878 | static int tegra186_utmi_phy_init(struct phy *phy) | ||
1879 | { | ||
1880 | struct tegra_padctl *padctl = phy_get_drvdata(phy); | ||
1881 | int port = utmi_phy_to_port(phy); | ||
1882 | |||
1883 | if (port < 0) | ||
1884 | return port; | ||
1885 | |||
1886 | mutex_lock(&padctl->lock); | ||
1887 | |||
1888 | dev_dbg(padctl->dev, "phy init UTMI port %d\n", port); | ||
1889 | |||
1890 | mutex_unlock(&padctl->lock); | ||
1891 | |||
1892 | return 0; | ||
1893 | } | ||
1876 | 1894 | ||
1877 | static int tegra186_utmi_phy_exit(struct phy *phy) | 1895 | static int tegra186_utmi_phy_exit(struct phy *phy) |
1878 | { | 1896 | { |