diff --git a/arch/arm/include/asm/arch-sunxi/usb_phy.h b/arch/arm/include/asm/arch-sunxi/usb_phy.h index cef6c98..5670d9b 100644 --- a/arch/arm/include/asm/arch-sunxi/usb_phy.h +++ b/arch/arm/include/asm/arch-sunxi/usb_phy.h @@ -10,8 +10,8 @@ * SPDX-License-Identifier: GPL-2.0+ */ -int sunxi_usb_phy_probe(void); -int sunxi_usb_phy_remove(void); +int sunxi_usb_phy_probe(int index); +int sunxi_usb_phy_remove(int index); void sunxi_usb_phy_init(int index); void sunxi_usb_phy_exit(int index); void sunxi_usb_phy_power_on(int index); diff --git a/arch/arm/mach-sunxi/usb_phy.c b/arch/arm/mach-sunxi/usb_phy.c index 9bf0b56..405cf99 100644 --- a/arch/arm/mach-sunxi/usb_phy.c +++ b/arch/arm/mach-sunxi/usb_phy.c @@ -329,13 +329,13 @@ int sunxi_usb_phy_id_detect(int index) return gpio_get_value(phy->gpio_id_det); } -int sunxi_usb_phy_probe(void) +int sunxi_usb_phy_probe(int i) { struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; struct sunxi_usb_phy *phy; - int i, ret = 0; + int ret = 0; - for (i = 0; i < CONFIG_SUNXI_USB_PHYS; i++) { + { phy = &sunxi_usb_phy[i]; phy->gpio_vbus = get_vbus_gpio(i); @@ -376,15 +376,14 @@ int sunxi_usb_phy_probe(void) return 0; } -int sunxi_usb_phy_remove(void) +int sunxi_usb_phy_remove(int i) { struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; struct sunxi_usb_phy *phy; - int i; clrbits_le32(&ccm->usb_clk_cfg, CCM_USB_CTRL_PHYGATE); - for (i = 0; i < CONFIG_SUNXI_USB_PHYS; i++) { + { phy = &sunxi_usb_phy[i]; if (phy->gpio_vbus >= 0) diff --git a/board/sunxi/board.c b/board/sunxi/board.c index 70e0143..77f282b 100644 --- a/board/sunxi/board.c +++ b/board/sunxi/board.c @@ -514,6 +514,11 @@ void sunxi_board_init(void) { int power_failed = 0; +#ifdef CONFIG_MACH_SUN8I_H3 + /* turn on power LED (PL10) on H3 boards */ + gpio_direction_output(SUNXI_GPL(10), 1); +#endif + #ifdef CONFIG_SY8106A_POWER power_failed = sy8106a_set_vout1(CONFIG_SY8106A_VOUT1_VOLT); #endif @@ -731,11 +736,6 @@ int misc_init_r(void) setup_environment(gd->fdt_blob); -#ifndef CONFIG_MACH_SUN9I - ret = sunxi_usb_phy_probe(); - if (ret) - return ret; -#endif sunxi_musb_board_init(); return 0; diff --git a/drivers/usb/host/ehci-sunxi.c b/drivers/usb/host/ehci-sunxi.c index 6ecb7c4..6f1463e 100644 --- a/drivers/usb/host/ehci-sunxi.c +++ b/drivers/usb/host/ehci-sunxi.c @@ -60,6 +60,7 @@ static int ehci_usb_probe(struct udevice *dev) priv->ahb_gate_mask | extra_ahb_gate_mask); #endif + sunxi_usb_phy_probe(priv->phy_index); sunxi_usb_phy_init(priv->phy_index); sunxi_usb_phy_power_on(priv->phy_index); @@ -80,6 +81,7 @@ static int ehci_usb_remove(struct udevice *dev) return ret; sunxi_usb_phy_exit(priv->phy_index); + sunxi_usb_phy_remove(priv->phy_index); #ifdef CONFIG_SUNXI_GEN_SUN6I clrbits_le32(&ccm->ahb_reset0_cfg, priv->ahb_gate_mask);