Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Stephen Warren <swarren@nvidia.com>
Acked-by: Olof Johansson <olof@lixom.net>

+11 -6
+3
arch/arm/mach-tegra/devices.c
··· 448 448 struct tegra_ehci_platform_data tegra_ehci1_pdata = { 449 449 .operating_mode = TEGRA_USB_OTG, 450 450 .power_down_on_bus_suspend = 1, 451 + .vbus_gpio = -1, 451 452 }; 452 453 453 454 struct tegra_ehci_platform_data tegra_ehci2_pdata = { 454 455 .phy_config = &tegra_ehci2_ulpi_phy_config, 455 456 .operating_mode = TEGRA_USB_HOST, 456 457 .power_down_on_bus_suspend = 1, 458 + .vbus_gpio = -1, 457 459 }; 458 460 459 461 struct tegra_ehci_platform_data tegra_ehci3_pdata = { 460 462 .operating_mode = TEGRA_USB_HOST, 461 463 .power_down_on_bus_suspend = 1, 464 + .vbus_gpio = -1, 462 465 }; 463 466 464 467 static u64 tegra_ehci_dmamask = DMA_BIT_MASK(32);
+7 -6
drivers/usb/host/ehci-tegra.c
··· 581 581 .port_handed_over = ehci_port_handed_over, 582 582 }; 583 583 584 - static int setup_vbus_gpio(struct platform_device *pdev) 584 + static int setup_vbus_gpio(struct platform_device *pdev, 585 + struct tegra_ehci_platform_data *pdata) 585 586 { 586 587 int err = 0; 587 588 int gpio; 588 589 589 - if (!pdev->dev.of_node) 590 - return 0; 591 - 592 - gpio = of_get_named_gpio(pdev->dev.of_node, "nvidia,vbus-gpio", 0); 590 + gpio = pdata->vbus_gpio; 591 + if (!gpio_is_valid(gpio)) 592 + gpio = of_get_named_gpio(pdev->dev.of_node, 593 + "nvidia,vbus-gpio", 0); 593 594 if (!gpio_is_valid(gpio)) 594 595 return 0; 595 596 ··· 634 633 if (!pdev->dev.dma_mask) 635 634 pdev->dev.dma_mask = &tegra_ehci_dma_mask; 636 635 637 - setup_vbus_gpio(pdev); 636 + setup_vbus_gpio(pdev, pdata); 638 637 639 638 tegra = kzalloc(sizeof(struct tegra_ehci_hcd), GFP_KERNEL); 640 639 if (!tegra)
+1
include/linux/platform_data/tegra_usb.h
··· 26 26 /* power down the phy on bus suspend */ 27 27 int power_down_on_bus_suspend; 28 28 void *phy_config; 29 + int vbus_gpio; 29 30 }; 30 31 31 32 #endif /* _TEGRA_USB_H_ */