the driver already uses one but it's for the PHY
struct ehci_hcd_omap_platform_data {
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
int reset_gpio_port[OMAP3_HS_USB_PORTS];
struct ehci_hcd_omap_platform_data {
enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS];
int reset_gpio_port[OMAP3_HS_USB_PORTS];
+ struct regulator *regulator_vbus[OMAP3_HS_USB_PORTS];
struct regulator *regulator[OMAP3_HS_USB_PORTS];
unsigned phy_reset:1;
};
struct regulator *regulator[OMAP3_HS_USB_PORTS];
unsigned phy_reset:1;
};
if (pdata->regulator[i]) {
regulator_disable(pdata->regulator[i]);
regulator_put(pdata->regulator[i]);
if (pdata->regulator[i]) {
regulator_disable(pdata->regulator[i]);
regulator_put(pdata->regulator[i]);
+ pdata->regulator[i] = NULL;
+ }
+ if (pdata->regulator_vbus[i]) {
+ regulator_disable(pdata->regulator_vbus[i]);
+ regulator_put(pdata->regulator_vbus[i]);
+ pdata->regulator_vbus[i] = NULL;
int ret = -ENODEV;
int irq;
int i;
int ret = -ENODEV;
int irq;
int i;
if (usb_disabled())
return -ENODEV;
if (usb_disabled())
return -ENODEV;
/* get ehci regulator and enable */
for (i = 0 ; i < OMAP3_HS_USB_PORTS ; i++) {
if (pdata->port_mode[i] != OMAP_EHCI_PORT_MODE_PHY) {
/* get ehci regulator and enable */
for (i = 0 ; i < OMAP3_HS_USB_PORTS ; i++) {
if (pdata->port_mode[i] != OMAP_EHCI_PORT_MODE_PHY) {
+ pdata->regulator_vbus[i] = NULL;
pdata->regulator[i] = NULL;
continue;
}
pdata->regulator[i] = NULL;
continue;
}
+ snprintf(supply, sizeof(supply), "hsusb%d_vbus", i);
+ pdata->regulator_vbus[i] = regulator_get(dev, supply);
+ if (IS_ERR(pdata->regulator_vbus[i])) {
+ pdata->regulator_vbus[i] = NULL;
+ dev_dbg(dev,
+ "failed to get ehci port%d vbus regulator\n", i);
+ } else {
+ regulator_enable(pdata->regulator_vbus[i]);
+ }
+
snprintf(supply, sizeof(supply), "hsusb%d", i);
pdata->regulator[i] = regulator_get(dev, supply);
if (IS_ERR(pdata->regulator[i])) {
snprintf(supply, sizeof(supply), "hsusb%d", i);
pdata->regulator[i] = regulator_get(dev, supply);
if (IS_ERR(pdata->regulator[i])) {