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.pinch...@ideasonboard.com>

> @@ -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 <st...@rowland.harvard.edu>

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to