summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgonzo <gonzo@FreeBSD.org>2013-02-15 21:29:03 +0000
committergonzo <gonzo@FreeBSD.org>2013-02-15 21:29:03 +0000
commit1da1883208c0ebabdae363e0661c310c16f47004 (patch)
treef82cbb2aeec124afaf0fe9042ca8f8768f58838f
parentcf0dd26a09241b64a1f777488cd61147a0c0d588 (diff)
downloadFreeBSD-src-1da1883208c0ebabdae363e0661c310c16f47004.zip
FreeBSD-src-1da1883208c0ebabdae363e0661c310c16f47004.tar.gz
Enable USB1 (which is EHCI0) for Allwinner A10
Tested by: ganbold@
-rw-r--r--sys/arm/allwinner/a10_clk.c1
-rw-r--r--sys/arm/allwinner/a10_clk.h1
-rw-r--r--sys/arm/allwinner/a10_ehci.c5
-rw-r--r--sys/boot/fdt/dts/cubieboard.dts9
4 files changed, 15 insertions, 1 deletions
diff --git a/sys/arm/allwinner/a10_clk.c b/sys/arm/allwinner/a10_clk.c
index 275ec4b..64251fb 100644
--- a/sys/arm/allwinner/a10_clk.c
+++ b/sys/arm/allwinner/a10_clk.c
@@ -129,6 +129,7 @@ a10_clk_usb_activate(void)
/* Gating AHB clock for USB */
reg_value = ccm_read_4(sc, CCM_AHB_GATING0);
reg_value |= CCM_AHB_GATING_USB0; /* AHB clock gate usb0 */
+ reg_value |= CCM_AHB_GATING_EHCI0; /* AHB clock gate ehci1 */
reg_value |= CCM_AHB_GATING_EHCI1; /* AHB clock gate ehci1 */
ccm_write_4(sc, CCM_AHB_GATING0, reg_value);
diff --git a/sys/arm/allwinner/a10_clk.h b/sys/arm/allwinner/a10_clk.h
index 7316a22..a2a6bc9 100644
--- a/sys/arm/allwinner/a10_clk.h
+++ b/sys/arm/allwinner/a10_clk.h
@@ -101,6 +101,7 @@
#define CCM_MALI400_CLK 0x0154
#define CCM_AHB_GATING_USB0 (1 << 0)
+#define CCM_AHB_GATING_EHCI0 (1 << 1)
#define CCM_AHB_GATING_EHCI1 (1 << 3)
#define CCM_USB_PHY (1 << 8)
diff --git a/sys/arm/allwinner/a10_ehci.c b/sys/arm/allwinner/a10_ehci.c
index 0d1636b..4145a5c 100644
--- a/sys/arm/allwinner/a10_ehci.c
+++ b/sys/arm/allwinner/a10_ehci.c
@@ -75,6 +75,7 @@ __FBSDID("$FreeBSD$");
#define SW_AHB_INCRX_ALIGN (1 << 8)
#define SW_AHB_INCR4 (1 << 9)
#define SW_AHB_INCR8 (1 << 10)
+#define GPIO_USB1_PWR 230
#define GPIO_USB2_PWR 227
#define A10_READ_4(sc, reg) \
@@ -182,6 +183,10 @@ a10_ehci_attach(device_t self)
GPIO_PIN_SETFLAGS(sc_gpio_dev, GPIO_USB2_PWR, GPIO_PIN_OUTPUT);
GPIO_PIN_SET(sc_gpio_dev, GPIO_USB2_PWR, GPIO_PIN_HIGH);
+ /* Give power to USB */
+ GPIO_PIN_SETFLAGS(sc_gpio_dev, GPIO_USB1_PWR, GPIO_PIN_OUTPUT);
+ GPIO_PIN_SET(sc_gpio_dev, GPIO_USB1_PWR, GPIO_PIN_HIGH);
+
/* Enable passby */
reg_value = A10_READ_4(sc, SW_USB_PMU_IRQ_ENABLE);
reg_value |= SW_AHB_INCR8; /* AHB INCR8 enable */
diff --git a/sys/boot/fdt/dts/cubieboard.dts b/sys/boot/fdt/dts/cubieboard.dts
index 1ef8b42..abb3f45 100644
--- a/sys/boot/fdt/dts/cubieboard.dts
+++ b/sys/boot/fdt/dts/cubieboard.dts
@@ -91,7 +91,14 @@
interrupt-parent = <&AINTC>;
};
- usb1: usb@01c1c000 {
+ usb1: usb@01c14000 {
+ compatible = "allwinner,usb-ehci", "usb-ehci";
+ reg = <0x01c14000 0x1000>;
+ interrupts = < 39 >;
+ interrupt-parent = <&AINTC>;
+ };
+
+ usb2: usb@01c1c000 {
compatible = "allwinner,usb-ehci", "usb-ehci";
reg = <0x01c1c000 0x1000>;
interrupts = < 40 >;
OpenPOWER on IntegriCloud