mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 09:41:44 +00:00
USB: PHY: tegra: Get rid of instance number to differentiate PHY type
Tegra20 USB has 3 PHY instances: Instance 1 and 3 are UTMI. Instance 2 is ULPI. As instance number was used to differentiate ULPI from UTMI, used DT param to get this info and processed accordingly. Signed-off-by: Venu Byravarasu <vbyravarasu@nvidia.com> Acked-by: Felipe Balbi <balbi@ti.com> [swarren: moved assignment of phy->is_ulpi_phy into this patch out of next patch.] Signed-off-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
parent
3a55c6a8b9
commit
3f9db1a19a
@ -209,11 +209,6 @@ static struct tegra_utmip_config utmip_default[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool phy_is_ulpi(struct tegra_usb_phy *phy)
|
|
||||||
{
|
|
||||||
return (phy->instance == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int utmip_pad_open(struct tegra_usb_phy *phy)
|
static int utmip_pad_open(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
phy->pad_clk = clk_get_sys("utmip-pad", NULL);
|
phy->pad_clk = clk_get_sys("utmip-pad", NULL);
|
||||||
@ -655,7 +650,7 @@ static int tegra_phy_init(struct usb_phy *x)
|
|||||||
struct tegra_ulpi_config *ulpi_config;
|
struct tegra_ulpi_config *ulpi_config;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (phy_is_ulpi(phy)) {
|
if (phy->is_ulpi_phy) {
|
||||||
ulpi_config = phy->config;
|
ulpi_config = phy->config;
|
||||||
phy->clk = clk_get_sys(NULL, ulpi_config->clk);
|
phy->clk = clk_get_sys(NULL, ulpi_config->clk);
|
||||||
if (IS_ERR(phy->clk)) {
|
if (IS_ERR(phy->clk)) {
|
||||||
@ -693,7 +688,7 @@ static void tegra_usb_phy_close(struct usb_phy *x)
|
|||||||
{
|
{
|
||||||
struct tegra_usb_phy *phy = container_of(x, struct tegra_usb_phy, u_phy);
|
struct tegra_usb_phy *phy = container_of(x, struct tegra_usb_phy, u_phy);
|
||||||
|
|
||||||
if (phy_is_ulpi(phy))
|
if (phy->is_ulpi_phy)
|
||||||
clk_put(phy->clk);
|
clk_put(phy->clk);
|
||||||
else
|
else
|
||||||
utmip_pad_close(phy);
|
utmip_pad_close(phy);
|
||||||
@ -704,7 +699,7 @@ static void tegra_usb_phy_close(struct usb_phy *x)
|
|||||||
|
|
||||||
static int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
|
static int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
if (phy_is_ulpi(phy))
|
if (phy->is_ulpi_phy)
|
||||||
return ulpi_phy_power_on(phy);
|
return ulpi_phy_power_on(phy);
|
||||||
else
|
else
|
||||||
return utmi_phy_power_on(phy);
|
return utmi_phy_power_on(phy);
|
||||||
@ -712,7 +707,7 @@ static int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
|
|||||||
|
|
||||||
static int tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
|
static int tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
if (phy_is_ulpi(phy))
|
if (phy->is_ulpi_phy)
|
||||||
return ulpi_phy_power_off(phy);
|
return ulpi_phy_power_off(phy);
|
||||||
else
|
else
|
||||||
return utmi_phy_power_off(phy);
|
return utmi_phy_power_off(phy);
|
||||||
@ -747,9 +742,14 @@ struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
|
|||||||
phy->dev = dev;
|
phy->dev = dev;
|
||||||
phy->is_legacy_phy =
|
phy->is_legacy_phy =
|
||||||
of_property_read_bool(np, "nvidia,has-legacy-mode");
|
of_property_read_bool(np, "nvidia,has-legacy-mode");
|
||||||
|
err = of_property_match_string(np, "phy_type", "ulpi");
|
||||||
|
if (err < 0)
|
||||||
|
phy->is_ulpi_phy = false;
|
||||||
|
else
|
||||||
|
phy->is_ulpi_phy = true;
|
||||||
|
|
||||||
if (!phy->config) {
|
if (!phy->config) {
|
||||||
if (phy_is_ulpi(phy)) {
|
if (phy->is_ulpi_phy) {
|
||||||
pr_err("%s: ulpi phy configuration missing", __func__);
|
pr_err("%s: ulpi phy configuration missing", __func__);
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
goto err0;
|
goto err0;
|
||||||
@ -796,14 +796,14 @@ EXPORT_SYMBOL_GPL(tegra_usb_phy_open);
|
|||||||
|
|
||||||
void tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
|
void tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
if (!phy_is_ulpi(phy))
|
if (!phy->is_ulpi_phy)
|
||||||
utmi_phy_preresume(phy);
|
utmi_phy_preresume(phy);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tegra_usb_phy_preresume);
|
EXPORT_SYMBOL_GPL(tegra_usb_phy_preresume);
|
||||||
|
|
||||||
void tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
|
void tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
if (!phy_is_ulpi(phy))
|
if (!phy->is_ulpi_phy)
|
||||||
utmi_phy_postresume(phy);
|
utmi_phy_postresume(phy);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tegra_usb_phy_postresume);
|
EXPORT_SYMBOL_GPL(tegra_usb_phy_postresume);
|
||||||
@ -811,14 +811,14 @@ EXPORT_SYMBOL_GPL(tegra_usb_phy_postresume);
|
|||||||
void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
|
void tegra_ehci_phy_restore_start(struct tegra_usb_phy *phy,
|
||||||
enum tegra_usb_phy_port_speed port_speed)
|
enum tegra_usb_phy_port_speed port_speed)
|
||||||
{
|
{
|
||||||
if (!phy_is_ulpi(phy))
|
if (!phy->is_ulpi_phy)
|
||||||
utmi_phy_restore_start(phy, port_speed);
|
utmi_phy_restore_start(phy, port_speed);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_start);
|
EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_start);
|
||||||
|
|
||||||
void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy)
|
void tegra_ehci_phy_restore_end(struct tegra_usb_phy *phy)
|
||||||
{
|
{
|
||||||
if (!phy_is_ulpi(phy))
|
if (!phy->is_ulpi_phy)
|
||||||
utmi_phy_restore_end(phy);
|
utmi_phy_restore_end(phy);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_end);
|
EXPORT_SYMBOL_GPL(tegra_ehci_phy_restore_end);
|
||||||
|
@ -60,6 +60,7 @@ struct tegra_usb_phy {
|
|||||||
struct usb_phy u_phy;
|
struct usb_phy u_phy;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
bool is_legacy_phy;
|
bool is_legacy_phy;
|
||||||
|
bool is_ulpi_phy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
|
struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
|
||||||
|
Loading…
Reference in New Issue
Block a user