When resuming the audio device, call audiosetinfo with the last known good
parameters. Fixes an issue with suspending the audio device while playback is paused.
This commit is contained in:
parent
df6e82e8f8
commit
67153124ea
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: audio.c,v 1.228 2007/12/11 00:08:14 martin Exp $ */
|
/* $NetBSD: audio.c,v 1.229 2007/12/13 14:02:53 jmcneill Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1991-1993 Regents of the University of California.
|
* Copyright (c) 1991-1993 Regents of the University of California.
|
||||||
|
@ -61,7 +61,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.228 2007/12/11 00:08:14 martin Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.229 2007/12/13 14:02:53 jmcneill Exp $");
|
||||||
|
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#if NAUDIO > 0
|
#if NAUDIO > 0
|
||||||
|
@ -329,6 +329,7 @@ audioattach(struct device *parent, struct device *self, void *aux)
|
||||||
sc->sc_dev = parent;
|
sc->sc_dev = parent;
|
||||||
sc->sc_opencnt = 0;
|
sc->sc_opencnt = 0;
|
||||||
sc->sc_writing = sc->sc_waitcomp = 0;
|
sc->sc_writing = sc->sc_waitcomp = 0;
|
||||||
|
sc->sc_lastinfovalid = false;
|
||||||
|
|
||||||
error = audio_alloc_ring(sc, &sc->sc_pr, AUMODE_PLAY, AU_RING_SIZE);
|
error = audio_alloc_ring(sc, &sc->sc_pr, AUMODE_PLAY, AU_RING_SIZE);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -3544,6 +3545,9 @@ audiosetinfo(struct audio_softc *sc, struct audio_info *ai)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sc->sc_lastinfo = *ai;
|
||||||
|
sc->sc_lastinfovalid = true;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (cleared || pausechange) {
|
if (cleared || pausechange) {
|
||||||
int init_error;
|
int init_error;
|
||||||
|
@ -4012,6 +4016,8 @@ audio_resume(device_t dv)
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
s = splaudio();
|
s = splaudio();
|
||||||
|
if (sc->sc_lastinfovalid)
|
||||||
|
audiosetinfo(sc, &sc->sc_lastinfo);
|
||||||
audio_mixer_restore(sc);
|
audio_mixer_restore(sc);
|
||||||
if (sc->sc_pbus == true)
|
if (sc->sc_pbus == true)
|
||||||
audiostartp(sc);
|
audiostartp(sc);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: audiovar.h,v 1.40 2007/12/09 20:27:52 jmcneill Exp $ */
|
/* $NetBSD: audiovar.h,v 1.41 2007/12/13 14:02:53 jmcneill Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
||||||
|
@ -226,6 +226,8 @@ struct audio_softc {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u_int sc_lastgain;
|
u_int sc_lastgain;
|
||||||
|
struct audio_info sc_lastinfo;
|
||||||
|
bool sc_lastinfovalid;
|
||||||
|
|
||||||
mixer_ctrl_t *sc_mixer_state;
|
mixer_ctrl_t *sc_mixer_state;
|
||||||
int sc_nmixer_states;
|
int sc_nmixer_states;
|
||||||
|
|
Loading…
Reference in New Issue