mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
phy: sun4i-usb: Support VBUS detection via power supply
The device tree binding provides for getting VBUS state from a device referenced by phandle, as an optional alternative to using a GPIO. In U-Boot, where there is no power supply class, this VBUS detection will be implemented using a regulator device and its get_enable method. Let's hook this up to the PHY driver. Signed-off-by: Samuel Holland <samuel@sholland.org> Acked-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
parent
1da7b88cad
commit
6fa41cdd19
2 changed files with 8 additions and 0 deletions
|
@ -4,6 +4,7 @@
|
|||
config PHY_SUN4I_USB
|
||||
bool "Allwinner Sun4I USB PHY driver"
|
||||
depends on ARCH_SUNXI
|
||||
select DM_REGULATOR
|
||||
select PHY
|
||||
help
|
||||
Enable this to support the transceiver that is part of Allwinner
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/err.h>
|
||||
#include <power/regulator.h>
|
||||
|
||||
#define REG_ISCR 0x00
|
||||
#define REG_PHYCTL_A10 0x04
|
||||
|
@ -137,6 +138,7 @@ struct sun4i_usb_phy_data {
|
|||
void __iomem *base;
|
||||
const struct sun4i_usb_phy_cfg *cfg;
|
||||
struct sun4i_usb_phy_plat *usb_phy;
|
||||
struct udevice *vbus_power_supply;
|
||||
};
|
||||
|
||||
static int initial_usb_scan_delay = CONFIG_INITIAL_USB_SCAN_DELAY;
|
||||
|
@ -404,6 +406,8 @@ int sun4i_usb_phy_vbus_detect(struct phy *phy)
|
|||
mdelay(100);
|
||||
err = gpio_get_value(usb_phy->gpio_vbus_det);
|
||||
}
|
||||
} else if (data->vbus_power_supply) {
|
||||
err = regulator_get_enable(data->vbus_power_supply);
|
||||
}
|
||||
|
||||
return err;
|
||||
|
@ -447,6 +451,9 @@ static int sun4i_usb_phy_probe(struct udevice *dev)
|
|||
if (IS_ERR(data->base))
|
||||
return PTR_ERR(data->base);
|
||||
|
||||
device_get_supply_regulator(dev, "usb0_vbus_power-supply",
|
||||
&data->vbus_power_supply);
|
||||
|
||||
data->usb_phy = plat;
|
||||
for (i = 0; i < data->cfg->num_phys; i++) {
|
||||
struct sun4i_usb_phy_plat *phy = &plat[i];
|
||||
|
|
Loading…
Reference in a new issue