--- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -545,6 +546,7 @@ static int dwc2_driver_probe(struct plat struct dwc2_hsotg *hsotg; struct resource *res; int retval; + int gpio_count; match = of_match_device(dwc2_of_match_table, &dev->dev); if (match && match->data) { @@ -563,6 +565,16 @@ static int dwc2_driver_probe(struct plat defparams.dma_desc_fs_enable = 0; } + gpio_count = of_gpio_count(dev->dev.of_node); + while (gpio_count > 0) { + enum of_gpio_flags flags; + int gpio = of_get_gpio_flags(dev->dev.of_node, --gpio_count, &flags); + if (gpio_request(gpio, "usb")) + continue; + dev_info(&dev->dev, "requested GPIO %d\n", gpio); + gpio_direction_output(gpio, (flags & OF_GPIO_ACTIVE_LOW) ? (0) : (1)); + } + hsotg = devm_kzalloc(&dev->dev, sizeof(*hsotg), GFP_KERNEL); if (!hsotg) return -ENOMEM;