Module Name:    src
Committed By:   phx
Date:           Fri Nov 12 12:26:30 UTC 2010

Modified Files:
        src/sys/arch/macppc/dev: snapper.c

Log Message:
Get the dma registers from the soundbus property. This should work with all
snapper-compatible hardware.
Tested on PowerBook G4, MacMini and iBook G4. Failed on the PowerBook before.


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/macppc/dev/snapper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/macppc/dev/snapper.c
diff -u src/sys/arch/macppc/dev/snapper.c:1.35 src/sys/arch/macppc/dev/snapper.c:1.36
--- src/sys/arch/macppc/dev/snapper.c:1.35	Sat Oct 16 18:22:37 2010
+++ src/sys/arch/macppc/dev/snapper.c	Fri Nov 12 12:26:29 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: snapper.c,v 1.35 2010/10/16 18:22:37 phx Exp $	*/
+/*	$NetBSD: snapper.c,v 1.36 2010/11/12 12:26:29 phx Exp $	*/
 /*	Id: snapper.c,v 1.11 2002/10/31 17:42:13 tsubai Exp	*/
 /*	Id: i2s.c,v 1.12 2005/01/15 14:32:35 tsubai Exp		*/
 
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: snapper.c,v 1.35 2010/10/16 18:22:37 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: snapper.c,v 1.36 2010/11/12 12:26:29 phx Exp $");
 
 #include <sys/param.h>
 #include <sys/audioio.h>
@@ -721,8 +721,8 @@
 {
 	struct snapper_softc *sc;
 	struct confargs *ca;
-	int cirq, oirq, iirq, cirq_type, oirq_type, iirq_type;
-	int soundbus, intr[6];
+	int cirq, oirq, iirq, cirq_type, oirq_type, iirq_type, soundbus;
+	uint32_t intr[6], reg[6];
 	char compat[32];
 
 	sc = device_private(self);
@@ -757,17 +757,20 @@
 				     sizeof(struct dbdma_command));
 
 	sc->sc_baseaddr = ca->ca_baseaddr;
-	ca->ca_reg[0] += ca->ca_baseaddr;
-	ca->ca_reg[2] += ca->ca_baseaddr;
-	ca->ca_reg[4] += ca->ca_baseaddr;
+	OF_getprop(soundbus, "reg", reg, sizeof reg);
+	reg[0] += ca->ca_baseaddr;
+	reg[2] += ca->ca_baseaddr;
+	reg[4] += ca->ca_baseaddr;
 
 	sc->sc_node = ca->ca_node;
 	sc->sc_tag = ca->ca_tag;
-	bus_space_map(sc->sc_tag, ca->ca_reg[0], ca->ca_reg[1], 0, &sc->sc_bsh);
-	bus_space_map(sc->sc_tag, ca->ca_reg[2], ca->ca_reg[3],
+
+	bus_space_map(sc->sc_tag, reg[0], reg[1], 0, &sc->sc_bsh);
+	bus_space_map(sc->sc_tag, reg[2], reg[3],
 	    BUS_SPACE_MAP_LINEAR, &sc->sc_odmah);
-	bus_space_map(sc->sc_tag, ca->ca_reg[4], ca->ca_reg[5],
+	bus_space_map(sc->sc_tag, reg[4], reg[5],
 	    BUS_SPACE_MAP_LINEAR, &sc->sc_idmah);
+
 	sc->sc_odma = bus_space_vaddr(sc->sc_tag, sc->sc_odmah);
 	sc->sc_idma = bus_space_vaddr(sc->sc_tag, sc->sc_idmah);
 

Reply via email to