Commit 434103ad authored by Stephen Warren's avatar Stephen Warren

usb: ehci-tegra: Add vbus_gpio to platform data

Add a vbus_gpio field to platform data. This mirrors the device tree
property nvidia,vbus-gpio. This makes the VBUS GPIO handling identical
between booting with board files and device tree; the driver always does
it.

This removes the need for board files to request and initialize the GPIO
early during their boot process, perhaps even before the GPIO driver is
ready to process the request.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org
Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarOlof Johansson <olof@lixom.net>
parent dcb5dbc3
...@@ -448,17 +448,20 @@ static struct tegra_ulpi_config tegra_ehci2_ulpi_phy_config = { ...@@ -448,17 +448,20 @@ static struct tegra_ulpi_config tegra_ehci2_ulpi_phy_config = {
struct tegra_ehci_platform_data tegra_ehci1_pdata = { struct tegra_ehci_platform_data tegra_ehci1_pdata = {
.operating_mode = TEGRA_USB_OTG, .operating_mode = TEGRA_USB_OTG,
.power_down_on_bus_suspend = 1, .power_down_on_bus_suspend = 1,
.vbus_gpio = -1,
}; };
struct tegra_ehci_platform_data tegra_ehci2_pdata = { struct tegra_ehci_platform_data tegra_ehci2_pdata = {
.phy_config = &tegra_ehci2_ulpi_phy_config, .phy_config = &tegra_ehci2_ulpi_phy_config,
.operating_mode = TEGRA_USB_HOST, .operating_mode = TEGRA_USB_HOST,
.power_down_on_bus_suspend = 1, .power_down_on_bus_suspend = 1,
.vbus_gpio = -1,
}; };
struct tegra_ehci_platform_data tegra_ehci3_pdata = { struct tegra_ehci_platform_data tegra_ehci3_pdata = {
.operating_mode = TEGRA_USB_HOST, .operating_mode = TEGRA_USB_HOST,
.power_down_on_bus_suspend = 1, .power_down_on_bus_suspend = 1,
.vbus_gpio = -1,
}; };
static u64 tegra_ehci_dmamask = DMA_BIT_MASK(32); static u64 tegra_ehci_dmamask = DMA_BIT_MASK(32);
......
...@@ -581,15 +581,16 @@ static const struct hc_driver tegra_ehci_hc_driver = { ...@@ -581,15 +581,16 @@ static const struct hc_driver tegra_ehci_hc_driver = {
.port_handed_over = ehci_port_handed_over, .port_handed_over = ehci_port_handed_over,
}; };
static int setup_vbus_gpio(struct platform_device *pdev) static int setup_vbus_gpio(struct platform_device *pdev,
struct tegra_ehci_platform_data *pdata)
{ {
int err = 0; int err = 0;
int gpio; int gpio;
if (!pdev->dev.of_node) gpio = pdata->vbus_gpio;
return 0; if (!gpio_is_valid(gpio))
gpio = of_get_named_gpio(pdev->dev.of_node,
gpio = of_get_named_gpio(pdev->dev.of_node, "nvidia,vbus-gpio", 0); "nvidia,vbus-gpio", 0);
if (!gpio_is_valid(gpio)) if (!gpio_is_valid(gpio))
return 0; return 0;
...@@ -633,7 +634,7 @@ static int tegra_ehci_probe(struct platform_device *pdev) ...@@ -633,7 +634,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
if (!pdev->dev.dma_mask) if (!pdev->dev.dma_mask)
pdev->dev.dma_mask = &tegra_ehci_dma_mask; pdev->dev.dma_mask = &tegra_ehci_dma_mask;
setup_vbus_gpio(pdev); setup_vbus_gpio(pdev, pdata);
tegra = kzalloc(sizeof(struct tegra_ehci_hcd), GFP_KERNEL); tegra = kzalloc(sizeof(struct tegra_ehci_hcd), GFP_KERNEL);
if (!tegra) if (!tegra)
......
...@@ -26,6 +26,7 @@ struct tegra_ehci_platform_data { ...@@ -26,6 +26,7 @@ struct tegra_ehci_platform_data {
/* power down the phy on bus suspend */ /* power down the phy on bus suspend */
int power_down_on_bus_suspend; int power_down_on_bus_suspend;
void *phy_config; void *phy_config;
int vbus_gpio;
}; };
#endif /* _TEGRA_USB_H_ */ #endif /* _TEGRA_USB_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment