On Wed, 16 Apr 2014, Laurent Pinchart wrote: > Override the hub control operation to enable and disable external > regulators for the ports vbus power supply in response to clear/set > USB_PORT_FEAT_POWER requests. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > @@ -417,6 +467,16 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device > pxa_ohci->clk = usb_clk; > pxa_ohci->mmio_base = (void __iomem *)hcd->regs; > > + for (i = 0; i < 3; ++i) { > + char name[6]; > + > + if (!(inf->flags & (ENABLE_PORT1 << i))) > + continue; > + > + sprintf(name, "vbus%u", i + 1); > + pxa_ohci->vbus[i] = devm_regulator_get(&pdev->dev, name); > + } > + > retval = pxa27x_start_hc(pxa_ohci, &pdev->dev); > if (retval < 0) { > pr_debug("pxa27x_start_hc failed"); > @@ -462,6 +522,10 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device > void usb_hcd_pxa27x_remove (struct usb_hcd *hcd, struct platform_device *pdev) > { > struct pxa27x_ohci *pxa_ohci = to_pxa27x_ohci(hcd); > + unsigned int i; > + > + for (i = 0; i < 3; ++i) > + pxa27x_ohci_set_vbus_power(pxa_ohci, i, false); > > usb_remove_hcd(hcd); > pxa27x_stop_hc(pxa_ohci, &pdev->dev); You probably should leave the port power enabled until after usb_remove_hcd() returns. Apart from that, Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html