Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Apr 2009 18:18:07 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r190720 - head/sys/dev/usb/controller
Message-ID:  <200904051818.n35II77S027302@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: thompsa
Date: Sun Apr  5 18:18:07 2009
New Revision: 190720
URL: http://svn.freebsd.org/changeset/base/190720

Log:
  MFp4 //depot/projects/usb@159671
  
  Fix interrupt register setting on the atmegadci controller.
  
  Submitted by:	Hans Petter Selasky

Modified:
  head/sys/dev/usb/controller/atmegadci.c

Modified: head/sys/dev/usb/controller/atmegadci.c
==============================================================================
--- head/sys/dev/usb/controller/atmegadci.c	Sun Apr  5 18:18:01 2009	(r190719)
+++ head/sys/dev/usb/controller/atmegadci.c	Sun Apr  5 18:18:07 2009	(r190720)
@@ -649,7 +649,7 @@ atmegadci_interrupt(struct atmegadci_sof
 	status = ATMEGA_READ_1(sc, ATMEGA_UDINT);
 
 	/* clear all set interrupts */
-	ATMEGA_WRITE_1(sc, ATMEGA_UDINT, ~status);
+	ATMEGA_WRITE_1(sc, ATMEGA_UDINT, (~status) & 0x7D);
 
 	DPRINTFN(14, "UDINT=0x%02x\n", status);
 
@@ -719,7 +719,7 @@ atmegadci_interrupt(struct atmegadci_sof
 	status = ATMEGA_READ_1(sc, ATMEGA_USBINT);
 
 	/* clear all set interrupts */
-	ATMEGA_WRITE_1(sc, ATMEGA_USBINT, ~status);
+	ATMEGA_WRITE_1(sc, ATMEGA_USBINT, (~status) & 0x03);
 
 	if (status & ATMEGA_USBINT_VBUSTI) {
 		uint8_t temp;
@@ -731,10 +731,7 @@ atmegadci_interrupt(struct atmegadci_sof
 	}
 	/* check for any endpoint interrupts */
 	status = ATMEGA_READ_1(sc, ATMEGA_UEINT);
-
-	/* clear all set interrupts */
-	ATMEGA_WRITE_1(sc, ATMEGA_UEINT, ~status);
-
+	/* the hardware will clear the UEINT bits automatically */
 	if (status) {
 
 		DPRINTFN(5, "real endpoint interrupt UEINT=0x%02x\n", status);
@@ -1249,6 +1246,12 @@ atmegadci_init(struct atmegadci_softc *s
 	ATMEGA_WRITE_1(sc, ATMEGA_UHWCON,
 	    ATMEGA_UHWCON_UVREGE | ATMEGA_UHWCON_UIMOD);
 #endif
+	/* make sure USB is enabled */
+	ATMEGA_WRITE_1(sc, ATMEGA_USBCON,
+	    ATMEGA_USBCON_USBE |
+	    ATMEGA_USBCON_OTGPADE |
+	    ATMEGA_USBCON_VBUSTE);
+
 	/* turn on clocks */
 	(sc->sc_clocks_on) (&sc->sc_bus);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200904051818.n35II77S027302>