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);