Module Name:    src
Committed By:   jmcneill
Date:           Sun Nov 20 13:30:46 UTC 2011

Modified Files:
        src/sys/arch/zaurus/dev [jmcneill-audiomp3]: zaudio.c

Log Message:
adapt to audiomp api changes


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.15.4.1 src/sys/arch/zaurus/dev/zaudio.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/zaurus/dev/zaudio.c
diff -u src/sys/arch/zaurus/dev/zaudio.c:1.15 src/sys/arch/zaurus/dev/zaudio.c:1.15.4.1
--- src/sys/arch/zaurus/dev/zaudio.c:1.15	Thu Jun 23 10:56:03 2011
+++ src/sys/arch/zaurus/dev/zaudio.c	Sun Nov 20 13:30:46 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: zaudio.c,v 1.15 2011/06/23 10:56:03 nonaka Exp $	*/
+/*	$NetBSD: zaudio.c,v 1.15.4.1 2011/11/20 13:30:46 jmcneill Exp $	*/
 /*	$OpenBSD: zaurus_audio.c,v 1.8 2005/08/18 13:23:02 robert Exp $	*/
 
 /*
@@ -51,13 +51,13 @@
 #include "opt_zaudio.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.15 2011/06/23 10:56:03 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: zaudio.c,v 1.15.4.1 2011/11/20 13:30:46 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/callout.h>
 #include <sys/device.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 #include <sys/kernel.h>
 #include <sys/audioio.h>
 #include <sys/mutex.h>
@@ -104,6 +104,8 @@ struct zaudio_volume {
 
 struct zaudio_softc {
 	device_t		sc_dev;
+	kmutex_t		sc_lock;
+	kmutex_t		sc_intr_lock;
 
 	/* i2s device softc */
 	/* NB: pxa2x0_i2s requires this to be the second struct member */
@@ -218,6 +220,7 @@ static void zaudio_freem(void  *, void *
 static size_t zaudio_round_buffersize(void *, int, size_t);
 static paddr_t zaudio_mappage(void *, void *, off_t, int);
 static int zaudio_get_props(void *);
+static void zaudio_get_locks(void *, kmutex_t **, kmutex_t **);
 
 struct audio_hw_if wm8750_hw_if = {
 	.open			= zaudio_open,
@@ -248,6 +251,7 @@ struct audio_hw_if wm8750_hw_if = {
 	.trigger_input		= NULL,
 	.dev_ioctl		= NULL,
 	.powerstate		= NULL,
+	.get_locks		= zaudio_get_locks,
 };
 
 static const uint16_t playback_regs[][2] = {
@@ -338,6 +342,8 @@ zaudio_attach(device_t parent, device_t 
 
 	sc->sc_dev = self;
 	sc->sc_i2c = ia->ia_tag;
+	mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
+	mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_SCHED);
 
 	aprint_normal(": I2S, WM8750 Audio\n");
 	aprint_naive("\n");
@@ -888,7 +894,9 @@ zaudio_halt_output(void *hdl)
 	struct zaudio_softc *sc = hdl;
 	int rv;
 
+	mutex_spin_enter(&sc->sc_intr_lock);
 	rv = pxa2x0_i2s_halt_output(&sc->sc_i2s);
+	mutex_spin_exit(&sc->sc_intr_lock);
 	if (!sc->sc_recording)
 		zaudio_standby(sc);
 	sc->sc_playing = 0;
@@ -902,7 +910,9 @@ zaudio_halt_input(void *hdl)
 	struct zaudio_softc *sc = hdl;
 	int rv;
 
+	mutex_spin_enter(&sc->sc_intr_lock);
 	rv = pxa2x0_i2s_halt_input(&sc->sc_i2s);
+	mutex_spin_exit(&sc->sc_intr_lock);
 	if (!sc->sc_playing)
 		zaudio_standby(sc);
 	sc->sc_recording = 0;
@@ -1270,12 +1280,16 @@ zaudio_start_output(void *hdl, void *blo
 	}
 
 	/* Start DMA via I2S */
+	mutex_spin_enter(&sc->sc_intr_lock);
 	rv = pxa2x0_i2s_start_output(&sc->sc_i2s, block, bsize, intr, intrarg);
+	mutex_spin_exit(&sc->sc_intr_lock);
+
 	if (rv) {
 		if (!sc->sc_recording)
 			zaudio_standby(sc);
 		sc->sc_playing = 0;
 	}
+
 	return rv;
 }
 
@@ -1293,7 +1307,10 @@ zaudio_start_input(void *hdl, void *bloc
 	}
 
 	/* Start DMA via I2S */
+	mutex_spin_enter(&sc->sc_intr_lock);
 	rv = pxa2x0_i2s_start_input(&sc->sc_i2s, block, bsize, intr, intrarg);
+	mutex_spin_exit(&sc->sc_intr_lock);
+
 	if (rv) {
 		if (!sc->sc_playing)
 			zaudio_standby(sc);
@@ -1301,3 +1318,12 @@ zaudio_start_input(void *hdl, void *bloc
 	}
 	return rv;
 }
+
+static void
+zaudio_get_locks(void *hdl, kmutex_t **intr, kmutex_t **thread)
+{
+	struct zaudio_softc *sc = hdl;
+
+	*intr = &sc->sc_intr_lock;
+	*thread = &sc->sc_lock;
+}

Reply via email to