mvebu: usb: xhci: Add VBUS regulator supply to the host driver

The USB device should linked to VBUS regulator through "vbus-supply"
DTS property.
This patch adds handling for "vbus-supply" property inside the USB
device entry for turning on the VBUS regulator upon the host adapter probe.

Signed-off-by: Konstantin Porotchkin <kostap@marvell.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Nadav Haklai <nadavh@marvell.com>
Cc: Neta Zur Hershkovits <neta@marvell.com>
Cc: Igal Liberman <igall@marvell.com>
Cc: Haim Boot <hayim@marvell.com>
Acked-by: Marek Vasut <marex@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
Konstantin Porotchkin 2017-02-12 11:10:30 +02:00 committed by Stefan Roese
parent c10636344c
commit 81192b7966
3 changed files with 41 additions and 1 deletions

View File

@ -0,0 +1,28 @@
Marvell SOC USB controllers
This controller is integrated in Armada 3700/8K.
It uses the same properties as a generic XHCI host controller
Required properties :
- compatible: should be one or more of:
- "marvell,armada3700-xhci", "generic-xhci" for Armada 37xx SoCs
- "marvell,armada-8k-xhci", "generic-xhci" for Armada A8K SoCs
- reg: should contain address and length of the standard XHCI
register set for the device.
- interrupts: one XHCI interrupt should be described here.
Optional properties:
- clocks: phandle to system controller clock driving this unit
- vbus-supply : If present, specifies the fixed regulator to be turned on
for providing power to the USB VBUS rail.
Example:
cpm_usb3_0: usb3@500000 {
compatible = "marvell,armada-8k-xhci",
"generic-xhci";
reg = <0x500000 0x4000>;
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cpm_syscon0 1 22>;
vbus-supply = <&reg_usb3h0_vbus>;
status = "disabled";
};

View File

@ -25,6 +25,7 @@ config USB_XHCI_MVEBU
bool "MVEBU USB 3.0 support" bool "MVEBU USB 3.0 support"
default y default y
depends on ARCH_MVEBU depends on ARCH_MVEBU
select DM_REGULATOR
help help
Choose this option to add support for USB 3.0 driver on mvebu Choose this option to add support for USB 3.0 driver on mvebu
SoCs, which includes Armada8K, Armada3700 and other Armada SoCs, which includes Armada8K, Armada3700 and other Armada

View File

@ -10,6 +10,7 @@
#include <dm.h> #include <dm.h>
#include <fdtdec.h> #include <fdtdec.h>
#include <usb.h> #include <usb.h>
#include <power/regulator.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include "xhci.h" #include "xhci.h"
@ -44,12 +45,22 @@ static int xhci_usb_probe(struct udevice *dev)
struct mvebu_xhci_platdata *plat = dev_get_platdata(dev); struct mvebu_xhci_platdata *plat = dev_get_platdata(dev);
struct mvebu_xhci *ctx = dev_get_priv(dev); struct mvebu_xhci *ctx = dev_get_priv(dev);
struct xhci_hcor *hcor; struct xhci_hcor *hcor;
int len; int len, ret;
struct udevice *regulator;
ctx->hcd = (struct xhci_hccr *)plat->hcd_base; ctx->hcd = (struct xhci_hccr *)plat->hcd_base;
len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase)); len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase));
hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len); hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len);
ret = device_get_supply_regulator(dev, "vbus-supply", &regulator);
if (!ret) {
ret = regulator_set_enable(regulator, true);
if (ret) {
printf("Failed to turn ON the VBUS regulator\n");
return ret;
}
}
/* Enable USB xHCI (VBUS, reset etc) in board specific code */ /* Enable USB xHCI (VBUS, reset etc) in board specific code */
board_xhci_enable(); board_xhci_enable();