summaryrefslogtreecommitdiff
path: root/sys/arm
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2020-10-12 10:51:34 +0000
committerAndriy Gapon <avg@FreeBSD.org>2020-10-12 10:51:34 +0000
commit7a6f1ce8816d4112293cd97714ddbf6b8877967d (patch)
tree8addff3d3a1e4505fb19c8608b60a10635cf9aa0 /sys/arm
parentf05bb707d9e06a0b8d8e7e8f63477ae2f3bda5f5 (diff)
Notes
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/allwinner/aw_usbphy.c23
-rw-r--r--sys/arm/allwinner/files.allwinner1
2 files changed, 24 insertions, 0 deletions
diff --git a/sys/arm/allwinner/aw_usbphy.c b/sys/arm/allwinner/aw_usbphy.c
index 0b8bcf539602..df988d08c319 100644
--- a/sys/arm/allwinner/aw_usbphy.c
+++ b/sys/arm/allwinner/aw_usbphy.c
@@ -161,6 +161,18 @@ DEFINE_CLASS_1(awusbphy_phynode, awusbphy_phynode_class, awusbphy_phynode_method
#define CLR4(res, o, m) WR4(res, o, RD4(res, o) & ~(m))
#define SET4(res, o, m) WR4(res, o, RD4(res, o) | (m))
+#define PHY_CSR 0x00
+#define ID_PULLUP_EN (1 << 17)
+#define DPDM_PULLUP_EN (1 << 16)
+#define FORCE_ID (0x3 << 14)
+#define FORCE_ID_SHIFT 14
+#define FORCE_ID_LOW 2
+#define FORCE_VBUS_VALID (0x3 << 12)
+#define FORCE_VBUS_VALID_SHIFT 12
+#define FORCE_VBUS_VALID_HIGH 3
+#define VBUS_CHANGE_DET (1 << 6)
+#define ID_CHANGE_DET (1 << 5)
+#define DPDM_CHANGE_DET (1 << 4)
#define OTG_PHY_CFG 0x20
#define OTG_PHY_ROUTE_OTG (1 << 0)
#define PMU_IRQ_ENABLE 0x00
@@ -206,6 +218,7 @@ awusbphy_init(device_t dev)
struct awusbphy_softc *sc;
phandle_t node;
char pname[20];
+ uint32_t val;
int error, off, rid;
regulator_t reg;
hwreset_t rst;
@@ -281,6 +294,16 @@ awusbphy_init(device_t dev)
}
}
+ /* Enable OTG PHY for host mode */
+ val = bus_read_4(sc->phy_ctrl, PHY_CSR);
+ val &= ~(VBUS_CHANGE_DET | ID_CHANGE_DET | DPDM_CHANGE_DET);
+ val |= (ID_PULLUP_EN | DPDM_PULLUP_EN);
+ val &= ~FORCE_ID;
+ val |= (FORCE_ID_LOW << FORCE_ID_SHIFT);
+ val &= ~FORCE_VBUS_VALID;
+ val |= (FORCE_VBUS_VALID_HIGH << FORCE_VBUS_VALID_SHIFT);
+ bus_write_4(sc->phy_ctrl, PHY_CSR, val);
+
return (0);
}
diff --git a/sys/arm/allwinner/files.allwinner b/sys/arm/allwinner/files.allwinner
index 6cc3a27a4ed1..0af53670e5e2 100644
--- a/sys/arm/allwinner/files.allwinner
+++ b/sys/arm/allwinner/files.allwinner
@@ -27,6 +27,7 @@ dev/usb/controller/generic_ohci.c optional ohci
dev/usb/controller/generic_usb_if.m optional ohci
dev/usb/controller/generic_ehci.c optional ehci
dev/usb/controller/generic_ehci_fdt.c optional ehci
+dev/usb/controller/musb_otg_allwinner.c optional musb
arm/allwinner/aw_sid.c optional aw_sid
arm/allwinner/aw_thermal.c optional aw_thermal
arm/allwinner/aw_cir.c optional aw_cir evdev