diff --git a/arch/arm/dts/ipq5018-mp03.1.dts b/arch/arm/dts/ipq5018-mp03.1.dts index b729946822..fe9d12e33b 100644 --- a/arch/arm/dts/ipq5018-mp03.1.dts +++ b/arch/arm/dts/ipq5018-mp03.1.dts @@ -113,6 +113,7 @@ usb0: xhci@8a00000 { ssphy = <1>; + usb_pwr_gpio = <24>; usb_gpio { pwr_gpio { gpio = <24>; diff --git a/arch/arm/dts/ipq5018-mp03.3.dts b/arch/arm/dts/ipq5018-mp03.3.dts index 4eebff1458..5badea7cdb 100644 --- a/arch/arm/dts/ipq5018-mp03.3.dts +++ b/arch/arm/dts/ipq5018-mp03.3.dts @@ -127,6 +127,7 @@ }; usb0: xhci@8a00000 { + usb_pwr_gpio = <24>; usb_gpio { pwr_gpio { gpio = <24>; diff --git a/arch/arm/dts/ipq5018-mp03.5-c1.dts b/arch/arm/dts/ipq5018-mp03.5-c1.dts index 2405f95c1f..45ee452d1a 100644 --- a/arch/arm/dts/ipq5018-mp03.5-c1.dts +++ b/arch/arm/dts/ipq5018-mp03.5-c1.dts @@ -127,6 +127,7 @@ }; usb0: xhci@8a00000 { + usb_pwr_gpio = <24>; usb_gpio { pwr_gpio { gpio = <24>; diff --git a/arch/arm/dts/ipq5018-mp03.6-c1.dts b/arch/arm/dts/ipq5018-mp03.6-c1.dts index 80222b8b5e..ad7aba6e92 100644 --- a/arch/arm/dts/ipq5018-mp03.6-c1.dts +++ b/arch/arm/dts/ipq5018-mp03.6-c1.dts @@ -127,6 +127,7 @@ }; usb0: xhci@8a00000 { + usb_pwr_gpio = <24>; usb_gpio { pwr_gpio { gpio = <24>; diff --git a/board/qca/arm/ipq5018/ipq5018.c b/board/qca/arm/ipq5018/ipq5018.c index 4d661d19da..db16be1e50 100644 --- a/board/qca/arm/ipq5018/ipq5018.c +++ b/board/qca/arm/ipq5018/ipq5018.c @@ -1343,7 +1343,9 @@ void board_usb_deinit(int id) gpio_node, "gpio", 0); unsigned int *gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(gpio); + int usb_pwr_gpio = fdtdec_get_int(gd->fdt_blob, nodeoff, "usb_pwr_gpio", 0); writel(0xC1, gpio_base); + gpio_set_value(usb_pwr_gpio, GPIO_OUT_LOW); } } @@ -1497,7 +1499,7 @@ static void usb_init_phy(int index, int ssphy) int ipq_board_usb_init(void) { - int i, nodeoff, ssphy, gpio_node; + int i, nodeoff, ssphy, gpio_node, usb_pwr_gpio; char node_name[8]; if(readl(EUD_EUD_EN2)) { @@ -1528,8 +1530,11 @@ int ipq_board_usb_init(void) /* USB power GPIO for drive 5V */ gpio_node = fdt_subnode_offset(gd->fdt_blob, nodeoff, "usb_gpio"); - if (gpio_node >= 0) + if (gpio_node >= 0) { qca_gpio_init(gpio_node); + usb_pwr_gpio = fdtdec_get_int(gd->fdt_blob, nodeoff, "usb_pwr_gpio", 0); + gpio_set_value(usb_pwr_gpio, GPIO_OUT_HIGH); + } } return 0;