mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-04-12 01:11:33 +00:00
sunxi: phy: Add USB PHY support for Allwinner H6
The USB PHY used in the Allwinner H6 SoC has some pecularities (as usual), which require a small addition to the USB PHY driver: In this case the second PHY is PHY3, not PHY1, so we need to skip number 1 and 2 in the code. Just use the respective code from Linux for that. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Tested-by: Corentin Labbe <clabbe.montjoie@gmail.com> # Pine-H64 Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
This commit is contained in:
parent
106c1300a5
commit
35fa673e0e
1 changed files with 20 additions and 0 deletions
|
@ -75,6 +75,7 @@ enum sun4i_usb_phy_type {
|
||||||
sun8i_h3_phy,
|
sun8i_h3_phy,
|
||||||
sun8i_v3s_phy,
|
sun8i_v3s_phy,
|
||||||
sun50i_a64_phy,
|
sun50i_a64_phy,
|
||||||
|
sun50i_h6_phy,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sun4i_usb_phy_cfg {
|
struct sun4i_usb_phy_cfg {
|
||||||
|
@ -85,6 +86,7 @@ struct sun4i_usb_phy_cfg {
|
||||||
bool dedicated_clocks;
|
bool dedicated_clocks;
|
||||||
bool enable_pmu_unk1;
|
bool enable_pmu_unk1;
|
||||||
bool phy0_dual_route;
|
bool phy0_dual_route;
|
||||||
|
int missing_phys;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sun4i_usb_phy_info {
|
struct sun4i_usb_phy_info {
|
||||||
|
@ -349,6 +351,9 @@ static int sun4i_usb_phy_xlate(struct phy *phy,
|
||||||
if (args->args_count >= data->cfg->num_phys)
|
if (args->args_count >= data->cfg->num_phys)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (data->cfg->missing_phys & BIT(args->args[0]))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (args->args_count)
|
if (args->args_count)
|
||||||
phy->id = args->args[0];
|
phy->id = args->args[0];
|
||||||
else
|
else
|
||||||
|
@ -429,6 +434,9 @@ static int sun4i_usb_phy_probe(struct udevice *dev)
|
||||||
struct sun4i_usb_phy_info *info = &phy_info[i];
|
struct sun4i_usb_phy_info *info = &phy_info[i];
|
||||||
char name[16];
|
char name[16];
|
||||||
|
|
||||||
|
if (data->cfg->missing_phys & BIT(i))
|
||||||
|
continue;
|
||||||
|
|
||||||
phy->gpio_vbus = sunxi_name_to_gpio(info->gpio_vbus);
|
phy->gpio_vbus = sunxi_name_to_gpio(info->gpio_vbus);
|
||||||
if (phy->gpio_vbus >= 0) {
|
if (phy->gpio_vbus >= 0) {
|
||||||
ret = gpio_request(phy->gpio_vbus, "usb_vbus");
|
ret = gpio_request(phy->gpio_vbus, "usb_vbus");
|
||||||
|
@ -583,6 +591,17 @@ static const struct sun4i_usb_phy_cfg sun50i_a64_cfg = {
|
||||||
.phy0_dual_route = true,
|
.phy0_dual_route = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct sun4i_usb_phy_cfg sun50i_h6_cfg = {
|
||||||
|
.num_phys = 4,
|
||||||
|
.type = sun50i_h6_phy,
|
||||||
|
.disc_thresh = 3,
|
||||||
|
.phyctl_offset = REG_PHYCTL_A33,
|
||||||
|
.dedicated_clocks = true,
|
||||||
|
.enable_pmu_unk1 = true,
|
||||||
|
.phy0_dual_route = true,
|
||||||
|
.missing_phys = BIT(1) | BIT(2),
|
||||||
|
};
|
||||||
|
|
||||||
static const struct udevice_id sun4i_usb_phy_ids[] = {
|
static const struct udevice_id sun4i_usb_phy_ids[] = {
|
||||||
{ .compatible = "allwinner,sun4i-a10-usb-phy", .data = (ulong)&sun4i_a10_cfg },
|
{ .compatible = "allwinner,sun4i-a10-usb-phy", .data = (ulong)&sun4i_a10_cfg },
|
||||||
{ .compatible = "allwinner,sun5i-a13-usb-phy", .data = (ulong)&sun5i_a13_cfg },
|
{ .compatible = "allwinner,sun5i-a13-usb-phy", .data = (ulong)&sun5i_a13_cfg },
|
||||||
|
@ -594,6 +613,7 @@ static const struct udevice_id sun4i_usb_phy_ids[] = {
|
||||||
{ .compatible = "allwinner,sun8i-h3-usb-phy", .data = (ulong)&sun8i_h3_cfg },
|
{ .compatible = "allwinner,sun8i-h3-usb-phy", .data = (ulong)&sun8i_h3_cfg },
|
||||||
{ .compatible = "allwinner,sun8i-v3s-usb-phy", .data = (ulong)&sun8i_v3s_cfg },
|
{ .compatible = "allwinner,sun8i-v3s-usb-phy", .data = (ulong)&sun8i_v3s_cfg },
|
||||||
{ .compatible = "allwinner,sun50i-a64-usb-phy", .data = (ulong)&sun50i_a64_cfg},
|
{ .compatible = "allwinner,sun50i-a64-usb-phy", .data = (ulong)&sun50i_a64_cfg},
|
||||||
|
{ .compatible = "allwinner,sun50i-h6-usb-phy", .data = (ulong)&sun50i_h6_cfg},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue