|
@@ -99,6 +99,7 @@ enum sun4i_usb_phy_type {
|
|
|
sun6i_a31_phy,
|
|
|
sun8i_a33_phy,
|
|
|
sun8i_h3_phy,
|
|
|
+ sun8i_v3s_phy,
|
|
|
sun50i_a64_phy,
|
|
|
};
|
|
|
|
|
@@ -188,7 +189,8 @@ static void sun4i_usb_phy_write(struct sun4i_usb_phy *phy, u32 addr, u32 data,
|
|
|
spin_lock_irqsave(&phy_data->reg_lock, flags);
|
|
|
|
|
|
if (phy_data->cfg->type == sun8i_a33_phy ||
|
|
|
- phy_data->cfg->type == sun50i_a64_phy) {
|
|
|
+ phy_data->cfg->type == sun50i_a64_phy ||
|
|
|
+ phy_data->cfg->type == sun8i_v3s_phy) {
|
|
|
/* A33 or A64 needs us to set phyctl to 0 explicitly */
|
|
|
writel(0, phyctl);
|
|
|
}
|
|
@@ -825,6 +827,15 @@ static const struct sun4i_usb_phy_cfg sun8i_h3_cfg = {
|
|
|
.enable_pmu_unk1 = true,
|
|
|
};
|
|
|
|
|
|
+static const struct sun4i_usb_phy_cfg sun8i_v3s_cfg = {
|
|
|
+ .num_phys = 1,
|
|
|
+ .type = sun8i_v3s_phy,
|
|
|
+ .disc_thresh = 3,
|
|
|
+ .phyctl_offset = REG_PHYCTL_A33,
|
|
|
+ .dedicated_clocks = true,
|
|
|
+ .enable_pmu_unk1 = true,
|
|
|
+};
|
|
|
+
|
|
|
static const struct sun4i_usb_phy_cfg sun50i_a64_cfg = {
|
|
|
.num_phys = 2,
|
|
|
.type = sun50i_a64_phy,
|
|
@@ -842,6 +853,7 @@ static const struct of_device_id sun4i_usb_phy_of_match[] = {
|
|
|
{ .compatible = "allwinner,sun8i-a23-usb-phy", .data = &sun8i_a23_cfg },
|
|
|
{ .compatible = "allwinner,sun8i-a33-usb-phy", .data = &sun8i_a33_cfg },
|
|
|
{ .compatible = "allwinner,sun8i-h3-usb-phy", .data = &sun8i_h3_cfg },
|
|
|
+ { .compatible = "allwinner,sun8i-v3s-usb-phy", .data = &sun8i_v3s_cfg },
|
|
|
{ .compatible = "allwinner,sun50i-a64-usb-phy",
|
|
|
.data = &sun50i_a64_cfg},
|
|
|
{ },
|