Index: sys/dev/audio.c
===================================================================
RCS file: /home/repos/netbsd-current/src/sys/dev/audio.c,v
retrieving revision 1.243
diff -u -r1.243 audio.c
--- sys/dev/audio.c 10 Jun 2008 22:53:08 -0000 1.243
+++ sys/dev/audio.c 16 Jan 2009 23:40:54 -0000
@@ -285,16 +285,35 @@
struct audio_attach_args *sa;
const struct audio_hw_if *hwp;
void *hdlp;
- int error;
- mixer_devinfo_t mi;
- int iclass, mclass, oclass, rclass, props;
- int record_master_found, record_source_found;
sc = device_private(self);
sc->dev = self;
+
sa = aux;
hwp = sa->hwif;
hdlp = sa->hdl;
+
+ sc->hw_if = hwp;
+ sc->hw_hdl = hdlp;
+ sc->sc_dev = parent;
+
+ audio_attach(sc);
+}
+
+void
+audio_attach(struct audio_softc *sc)
+{
+ const struct audio_hw_if *hwp;
+ void *hdlp;
+
+ int error;
+ mixer_devinfo_t mi;
+ int iclass, mclass, oclass, rclass, props;
+ int record_master_found, record_source_found;
+
+ hwp = sc->hw_if;
+ hdlp = sc->hw_hdl;
+
#ifdef DIAGNOSTIC
if (hwp == 0 ||
hwp->query_encoding == 0 ||
@@ -330,9 +349,6 @@
aprint_normal("\n");
- sc->hw_if = hwp;
- sc->hw_hdl = hdlp;
- sc->sc_dev = parent;
sc->sc_opencnt = 0;
sc->sc_writing = sc->sc_waitcomp = 0;
sc->sc_lastinfovalid = false;
@@ -495,25 +511,25 @@
#ifdef AUDIO_PM_IDLE
callout_init(&sc->sc_idle_counter, 0);
- callout_setfunc(&sc->sc_idle_counter, audio_idle, self);
+ callout_setfunc(&sc->sc_idle_counter, audio_idle, sc->dev);
#endif
- if (!pmf_device_register(self, audio_suspend, audio_resume))
- aprint_error_dev(self, "couldn't establish power handler\n");
+ if (!pmf_device_register(sc->dev, audio_suspend, audio_resume))
+ aprint_error_dev(sc->dev, "couldn't establish power handler\n");
#ifdef AUDIO_PM_IDLE
- if (!device_active_register(self, audio_activity))
- aprint_error_dev(self, "couldn't register activity handler\n");
+ if (!device_active_register(sc->dev, audio_activity))
+ aprint_error_dev(sc->dev, "couldn't register activity handler\n");
#endif
- if (!pmf_event_register(self, PMFE_AUDIO_VOLUME_DOWN,
+ if (!pmf_event_register(sc->dev, PMFE_AUDIO_VOLUME_DOWN,
audio_volume_down, true))
- aprint_error_dev(self, "couldn't add volume down handler\n");
- if (!pmf_event_register(self, PMFE_AUDIO_VOLUME_UP,
+ aprint_error_dev(sc->dev, "couldn't add volume down handler\n");
+ if (!pmf_event_register(sc->dev, PMFE_AUDIO_VOLUME_UP,
audio_volume_up, true))
- aprint_error_dev(self, "couldn't add volume up handler\n");
- if (!pmf_event_register(self, PMFE_AUDIO_VOLUME_TOGGLE,
+ aprint_error_dev(sc->dev, "couldn't add volume up handler\n");
+ if (!pmf_event_register(sc->dev, PMFE_AUDIO_VOLUME_TOGGLE,
audio_volume_toggle, true))
- aprint_error_dev(self, "couldn't add volume toggle handler\n");
+ aprint_error_dev(sc->dev, "couldn't add volume toggle handler\n");
#ifdef AUDIO_PM_IDLE
callout_schedule(&sc->sc_idle_counter, audio_idle_timeout * hz);
@@ -3583,6 +3599,10 @@
s = splaudio();
init_error = audio_initbufs(sc);
if (init_error) goto err;
+ if (sc->sc_pustream == NULL ||
+ sc->sc_rustream == NULL) {
+ goto err;
+ }
if (sc->sc_pr.blksize != oldpblksize ||
sc->sc_rr.blksize != oldrblksize ||
sc->sc_pustream != oldpus ||
Index: sys/dev/audio_if.h
===================================================================
RCS file: /home/repos/netbsd-current/src/sys/dev/audio_if.h,v
retrieving revision 1.65
diff -u -r1.65 audio_if.h
--- sys/dev/audio_if.h 4 Mar 2008 18:23:44 -0000 1.65
+++ sys/dev/audio_if.h 14 Jan 2009 23:16:49 -0000
@@ -254,6 +254,10 @@
/* Attach the MI driver(s) to the MD driver. */
device_t audio_attach_mi(const struct audio_hw_if *, void *, device_t);
+
+/* Generic audio(9) attach routine */
+void audio_attach(struct audio_softc *);
+
int audioprint(void *, const char *);
/* Device identity flags */
Index: sys/dev/audiovar.h
===================================================================
RCS file: /home/repos/netbsd-current/src/sys/dev/audiovar.h,v
retrieving revision 1.45
diff -u -r1.45 audiovar.h
--- sys/dev/audiovar.h 28 Apr 2008 20:23:46 -0000 1.45
+++ sys/dev/audiovar.h 14 Jan 2009 23:16:49 -0000
@@ -65,6 +65,9 @@
*/
#ifndef _SYS_DEV_AUDIOVAR_H_
#define _SYS_DEV_AUDIOVAR_H_
+
+#include <sys/select.h>
+
#include <dev/audio_if.h>
/*