aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2014-05-16 16:36:07 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2014-05-16 16:36:07 +0000
commitdfe11c139540229835bcc6e5e813bd59d06cadb7 (patch)
treedccd99a4a591e3ee648a2b9307f706e5a2f78fe0 /sys/dev/usb
parent4a98da2cc0e2ca09d0f7a17eb45f618a2e5ee217 (diff)
Notes
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/controller/saf1761_otg.c19
-rw-r--r--sys/dev/usb/controller/saf1761_otg_reg.h10
2 files changed, 25 insertions, 4 deletions
diff --git a/sys/dev/usb/controller/saf1761_otg.c b/sys/dev/usb/controller/saf1761_otg.c
index 080e5ed6cf66..81821f47a31b 100644
--- a/sys/dev/usb/controller/saf1761_otg.c
+++ b/sys/dev/usb/controller/saf1761_otg.c
@@ -971,16 +971,20 @@ void
saf1761_otg_interrupt(struct saf1761_otg_softc *sc)
{
uint32_t status;
+ uint32_t hcstat;
USB_BUS_LOCK(&sc->sc_bus);
- status = SAF1761_READ_4(sc, SOTG_DCINTERRUPT);
+ hcstat = SAF1761_READ_4(sc, SOTG_HCINTERRUPT);
+ /* acknowledge all host controller interrupts */
+ SAF1761_WRITE_4(sc, SOTG_HCINTERRUPT, hcstat);
- /* acknowledge all interrupts */
+ status = SAF1761_READ_4(sc, SOTG_DCINTERRUPT);
+ /* acknowledge all device controller interrupts */
SAF1761_WRITE_4(sc, SOTG_DCINTERRUPT, status);
- DPRINTF("DCINTERRUPT=0x%08x SOF=0x%04x\n", status,
- SAF1761_READ_2(sc, SOTG_FRAME_NUM));
+ DPRINTF("DCINTERRUPT=0x%08x HCINTERRUPT=0x%08x SOF=0x%04x\n",
+ status, hcstat, SAF1761_READ_2(sc, SOTG_FRAME_NUM));
/* update VBUS and ID bits, if any */
if (status & SOTG_DCINTERRUPT_IEVBUS) {
@@ -1716,6 +1720,13 @@ saf1761_otg_init(struct saf1761_otg_softc *sc)
/* start the HC */
SAF1761_WRITE_4(sc, SOTG_USBCMD, SOTG_USBCMD_RS);
+ /* enable HC interrupts */
+ SAF1761_WRITE_4(sc, SOTG_HCINTERRUPT_ENABLE,
+ SOTG_HCINTERRUPT_OTG_IRQ |
+ SOTG_HCINTERRUPT_ISO_IRQ |
+ SOTG_HCINTERRUPT_ALT_IRQ |
+ SOTG_HCINTERRUPT_INT_IRQ);
+
/* poll initial VBUS status */
saf1761_otg_update_vbus(sc);
diff --git a/sys/dev/usb/controller/saf1761_otg_reg.h b/sys/dev/usb/controller/saf1761_otg_reg.h
index 2b74866b919c..a4efe0129429 100644
--- a/sys/dev/usb/controller/saf1761_otg_reg.h
+++ b/sys/dev/usb/controller/saf1761_otg_reg.h
@@ -210,5 +210,15 @@
#define SOTG_USBCMD_LHCR (1 << 7)
#define SOTG_USBCMD_HCRESET (1 << 1)
#define SOTG_USBCMD_RS (1 << 0)
+#define SOTG_HCINTERRUPT 0x310
+#define SOTG_HCINTERRUPT_OTG_IRQ (1 << 10)
+#define SOTG_HCINTERRUPT_ISO_IRQ (1 << 9)
+#define SOTG_HCINTERRUPT_ALT_IRQ (1 << 8)
+#define SOTG_HCINTERRUPT_INT_IRQ (1 << 7)
+#define SOTG_HCINTERRUPT_CLKREADY (1 << 6)
+#define SOTG_HCINTERRUPT_HCSUSP (1 << 5)
+#define SOTG_HCINTERRUPT_DMAEOTINT (1 << 3)
+#define SOTG_HCINTERRUPT_SOFITLINT (1 << 1)
+#define SOTG_HCINTERRUPT_ENABLE 0x314
#endif /* _SAF1761_OTG_REG_H_ */