Page MenuHomeFreeBSD

D59069.diff
No OneTemporary

D59069.diff

diff --git a/sys/arm/allwinner/a10_codec.c b/sys/arm/allwinner/a10_codec.c
--- a/sys/arm/allwinner/a10_codec.c
+++ b/sys/arm/allwinner/a10_codec.c
@@ -1150,6 +1150,8 @@
val |= DAC_DPC_EN_DA;
CODEC_WRITE(sc, AC_DAC_DPC(sc), val);
+ pcm_init(dev, sc);
+
if (mixer_init(dev, sc->cfg->mixer_class, sc)) {
device_printf(dev, "mixer_init failed\n");
goto fail;
@@ -1165,8 +1167,6 @@
pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE);
- pcm_init(dev, sc);
-
pcm_addchan(dev, PCMDIR_PLAY, &a10codec_chan_class, sc);
pcm_addchan(dev, PCMDIR_REC, &a10codec_chan_class, sc);
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_audio.c b/sys/arm/broadcom/bcm2835/bcm2835_audio.c
--- a/sys/arm/broadcom/bcm2835/bcm2835_audio.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_audio.c
@@ -1027,13 +1027,13 @@
sc->dest = DEST_AUTO;
sc->verbose_trace = 0;
+ pcm_init(sc->dev, sc);
+
if (mixer_init(sc->dev, &bcmmixer_class, sc)) {
device_printf(sc->dev, "mixer_init failed\n");
goto no;
}
- pcm_init(sc->dev, sc);
-
pcm_addchan(sc->dev, PCMDIR_PLAY, &bcmchan_class, sc);
snprintf(status, SND_STATUSLEN, "at VCHIQ");
if (pcm_register(sc->dev, status)) {
diff --git a/sys/arm/freescale/imx/imx6_ssi.c b/sys/arm/freescale/imx/imx6_ssi.c
--- a/sys/arm/freescale/imx/imx6_ssi.c
+++ b/sys/arm/freescale/imx/imx6_ssi.c
@@ -808,6 +808,8 @@
pcm_init(dev, scp);
+ mixer_init(dev, &ssimixer_class, scp);
+
scp->chnum = 0;
pcm_addchan(dev, PCMDIR_PLAY, &ssichan_class, scp);
scp->chnum++;
@@ -819,7 +821,6 @@
return (ENXIO);
}
- mixer_init(dev, &ssimixer_class, scp);
setup_ssi(sc);
imx_ccm_ssi_configure(dev);
diff --git a/sys/arm/freescale/vybrid/vf_sai.c b/sys/arm/freescale/vybrid/vf_sai.c
--- a/sys/arm/freescale/vybrid/vf_sai.c
+++ b/sys/arm/freescale/vybrid/vf_sai.c
@@ -760,6 +760,8 @@
pcm_init(dev, scp);
+ mixer_init(dev, &saimixer_class, scp);
+
scp->chnum = 0;
pcm_addchan(dev, PCMDIR_PLAY, &saichan_class, scp);
scp->chnum++;
@@ -771,8 +773,6 @@
return (ENXIO);
}
- mixer_init(dev, &saimixer_class, scp);
-
setup_dma(scp);
setup_sai(sc);
diff --git a/sys/dev/sound/dummy.c b/sys/dev/sound/dummy.c
--- a/sys/dev/sound/dummy.c
+++ b/sys/dev/sound/dummy.c
@@ -376,6 +376,7 @@
pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE);
pcm_init(dev, sc);
+ mixer_init(dev, &dummy_mixer_class, sc);
for (i = 0; i < DUMMY_NPCHAN; i++)
pcm_addchan(dev, PCMDIR_PLAY, &dummy_chan_class, sc);
for (i = 0; i < DUMMY_NRCHAN; i++)
@@ -385,7 +386,6 @@
device_get_nameunit(device_get_parent(dev)));
if (pcm_register(dev, status))
return (ENXIO);
- mixer_init(dev, &dummy_mixer_class, sc);
/*
* Create an alias so that tests do not need to guess which one is the
diff --git a/sys/dev/sound/fdt/audio_soc.c b/sys/dev/sound/fdt/audio_soc.c
--- a/sys/dev/sound/fdt/audio_soc.c
+++ b/sys/dev/sound/fdt/audio_soc.c
@@ -398,6 +398,11 @@
pcm_init(sc->dev, sc);
+ AUDIO_DAI_SETUP_MIXER(sc->codec_dev, sc->dev);
+ SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
+ AUDIO_DAI_SETUP_MIXER(aux_node->dev, sc->dev);
+ }
+
sc->play_channel.sc = sc;
sc->rec_channel.sc = sc;
@@ -410,10 +415,6 @@
}
AUDIO_DAI_SETUP_INTR(sc->cpu_dev, audio_soc_intr, sc);
- AUDIO_DAI_SETUP_MIXER(sc->codec_dev, sc->dev);
- SLIST_FOREACH(aux_node, &sc->aux_devs, link) {
- AUDIO_DAI_SETUP_MIXER(aux_node->dev, sc->dev);
- }
}
static int
diff --git a/sys/dev/sound/macio/aoa.h b/sys/dev/sound/macio/aoa.h
--- a/sys/dev/sound/macio/aoa.h
+++ b/sys/dev/sound/macio/aoa.h
@@ -41,6 +41,6 @@
};
void aoa_interrupt(void *);
-int aoa_attach(void *xsc);
+int aoa_attach(void *xsc, kobj_class_t mixer_class, void *mixer_devinfo);
#endif /* SOUND_AOA_H */
diff --git a/sys/dev/sound/macio/aoa.c b/sys/dev/sound/macio/aoa.c
--- a/sys/dev/sound/macio/aoa.c
+++ b/sys/dev/sound/macio/aoa.c
@@ -362,7 +362,7 @@
CHANNEL_DECLARE(aoa_chan);
int
-aoa_attach(void *xsc)
+aoa_attach(void *xsc, kobj_class_t mixer_class, void *mixer_devinfo)
{
char status[SND_STATUSLEN];
struct aoa_softc *sc;
@@ -374,6 +374,10 @@
pcm_init(self, sc);
+ /* Install the codec's mixer, if we have one. */
+ if (mixer_class != NULL)
+ mixer_init(self, mixer_class, mixer_devinfo);
+
err = pcm_getbuffersize(self, AOA_BUFFER_SIZE, AOA_BUFFER_SIZE,
AOA_BUFFER_SIZE);
DPRINTF(("pcm_getbuffersize returned %d\n", err));
diff --git a/sys/dev/sound/macio/davbus.c b/sys/dev/sound/macio/davbus.c
--- a/sys/dev/sound/macio/davbus.c
+++ b/sys/dev/sound/macio/davbus.c
@@ -495,6 +495,7 @@
struct davbus_softc *sc;
struct resource *dbdma_irq, *cintr;
void *cookie;
+ kobj_class_t mixer_class;
char compat[64];
int rid, oirq, err;
@@ -557,16 +558,18 @@
bus_write_4(sc->reg, DAVBUS_SOUND_CTRL, DAVBUS_INPUT_SUBFRAME0 |
DAVBUS_OUTPUT_SUBFRAME0 | DAVBUS_RATE_44100 | DAVBUS_INTR_PORTCHG);
- /* Attach DBDMA engine and PCM layer */
- err = aoa_attach(sc);
- if (err)
- return (err);
-
- /* Install codec module */
+ /* Pick the codec module */
if (strcmp(compat, "screamer") == 0)
- mixer_init(self, &screamer_mixer_class, sc);
+ mixer_class = &screamer_mixer_class;
else if (strcmp(compat, "burgundy") == 0)
- mixer_init(self, &burgundy_mixer_class, sc);
+ mixer_class = &burgundy_mixer_class;
+ else
+ mixer_class = NULL;
+
+ /* Attach DBDMA engine, codec mixer and PCM layer */
+ err = aoa_attach(sc, mixer_class, sc);
+ if (err)
+ return (err);
return (0);
}
diff --git a/sys/dev/sound/macio/i2s.c b/sys/dev/sound/macio/i2s.c
--- a/sys/dev/sound/macio/i2s.c
+++ b/sys/dev/sound/macio/i2s.c
@@ -249,7 +249,7 @@
if (config_intrhook_establish(i2s_delayed_attach) != 0)
return (ENOMEM);
- return (aoa_attach(sc));
+ return (0);
}
/*****************************************************************************
@@ -737,9 +737,13 @@
/* Reset the codec. */
i2s_audio_hw_reset(sc);
- /* If we have a codec, initialize it. */
- if (i2s_mixer)
- mixer_init(self, i2s_mixer_class, i2s_mixer);
+ /*
+ * Attach the DBDMA engine and the PCM layer, along with the codec's
+ * mixer, if we have one. This is deferred until now because the codec
+ * only becomes available once the I2C controller has attached.
+ */
+ if (aoa_attach(sc, i2s_mixer_class, i2s_mixer) != 0)
+ device_printf(self, "could not attach PCM layer\n");
/* Read initial port status. */
i2s_cint(sc);
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c
--- a/sys/dev/sound/pci/als4000.c
+++ b/sys/dev/sound/pci/als4000.c
@@ -832,13 +832,13 @@
goto bad_attach;
}
+ pcm_init(dev, sc);
+
if (mixer_init(dev, &als_mixer_class, sc)) {
device_printf(dev, "failed to initialize mixer\n");
goto bad_attach;
}
- pcm_init(dev, sc);
-
pcm_addchan(dev, PCMDIR_PLAY, &alspchan_class, sc);
pcm_addchan(dev, PCMDIR_REC, &alsrchan_class, sc);
diff --git a/sys/dev/sound/pci/atiixp.c b/sys/dev/sound/pci/atiixp.c
--- a/sys/dev/sound/pci/atiixp.c
+++ b/sys/dev/sound/pci/atiixp.c
@@ -1080,10 +1080,10 @@
break;
}
- mixer_init(sc->dev, ac97_getmixerclass(), sc->codec);
-
pcm_init(sc->dev, sc);
+ mixer_init(sc->dev, ac97_getmixerclass(), sc->codec);
+
for (i = 0; i < ATI_IXP_NPCHAN; i++)
pcm_addchan(sc->dev, PCMDIR_PLAY, &atiixp_chan_class, sc);
for (i = 0; i < ATI_IXP_NRCHAN; i++)
diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c
--- a/sys/dev/sound/pci/cmi.c
+++ b/sys/dev/sound/pci/cmi.c
@@ -980,11 +980,11 @@
if (cmi_init(sc))
goto bad;
+ pcm_init(dev, sc);
+
if (mixer_init(dev, &cmi_mixer_class, sc))
goto bad;
- pcm_init(dev, sc);
-
cmi_initsys(sc);
pcm_addchan(dev, PCMDIR_PLAY, &cmichan_class, sc);
diff --git a/sys/dev/sound/pci/cs4281.c b/sys/dev/sound/pci/cs4281.c
--- a/sys/dev/sound/pci/cs4281.c
+++ b/sys/dev/sound/pci/cs4281.c
@@ -837,10 +837,10 @@
if (codec == NULL)
goto bad;
- mixer_init(dev, ac97_getmixerclass(), codec);
-
pcm_init(dev, sc);
+ mixer_init(dev, ac97_getmixerclass(), codec);
+
pcm_addchan(dev, PCMDIR_PLAY, &cs4281chan_class, sc);
pcm_addchan(dev, PCMDIR_REC, &cs4281chan_class, sc);
diff --git a/sys/dev/sound/pci/csapcm.c b/sys/dev/sound/pci/csapcm.c
--- a/sys/dev/sound/pci/csapcm.c
+++ b/sys/dev/sound/pci/csapcm.c
@@ -809,6 +809,7 @@
}
if (csa->card->inv_eapd)
ac97_setflags(codec, AC97_F_EAPD_INV);
+ pcm_init(dev, csa);
if (mixer_init(dev, ac97_getmixerclass(), codec) == -1) {
ac97_destroy(codec);
csa_releaseres(csa, dev);
@@ -829,7 +830,6 @@
csa_writemem(resp, BA1_CIE, (csa_readmem(resp, BA1_CIE) & ~0x0000003f) | 0x00000001);
csa_active(csa, -1);
- pcm_init(dev, csa);
pcm_addchan(dev, PCMDIR_REC, &csachan_class, csa);
pcm_addchan(dev, PCMDIR_PLAY, &csachan_class, csa);
if (pcm_register(dev, status)) {
diff --git a/sys/dev/sound/pci/emu10k1.c b/sys/dev/sound/pci/emu10k1.c
--- a/sys/dev/sound/pci/emu10k1.c
+++ b/sys/dev/sound/pci/emu10k1.c
@@ -2114,6 +2114,7 @@
codec = AC97_CREATE(dev, sc, emu_ac97);
if (codec == NULL) goto bad;
gotmic = (ac97_getcaps(codec) & AC97_CAP_MICCHANNEL) ? 1 : 0;
+ pcm_init(dev, sc);
if (mixer_init(dev, ac97_getmixerclass(), codec) == -1) goto bad;
emu_midiattach(sc);
@@ -2131,7 +2132,6 @@
rman_get_start(sc->reg), rman_get_start(sc->irq),
device_get_nameunit(device_get_parent(dev)));
- pcm_init(dev, sc);
for (i = 0; i < sc->nchans; i++)
pcm_addchan(dev, PCMDIR_PLAY, &emupchan_class, sc);
for (i = 0; i < (gotmic ? 3 : 2); i++)
diff --git a/sys/dev/sound/pci/emu10kx-pcm.c b/sys/dev/sound/pci/emu10kx-pcm.c
--- a/sys/dev/sound/pci/emu10kx-pcm.c
+++ b/sys/dev/sound/pci/emu10kx-pcm.c
@@ -1376,6 +1376,7 @@
sc->emu10k1_volcache[1][1] = 75;
BUS_READ_IVAR(device_get_parent(dev), dev, EMU_VAR_ROUTE, &route);
sc->route = route;
+ pcm_init(dev, sc);
switch (route) {
case RT_FRONT:
sc->rt.amounts_left[0] = 0xff;
@@ -1457,7 +1458,6 @@
pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE);
/* XXX we should better get number of available channels from parent */
- pcm_init(dev, sc);
sc->pnum = 0;
if (route != RT_MCHRECORD)
pcm_addchan(dev, PCMDIR_PLAY, &emupchan_class, sc);
diff --git a/sys/dev/sound/pci/envy24.c b/sys/dev/sound/pci/envy24.c
--- a/sys/dev/sound/pci/envy24.c
+++ b/sys/dev/sound/pci/envy24.c
@@ -2570,11 +2570,12 @@
goto bad;
}
+ pcm_init(dev, sc);
+
/* set multi track mixer */
mixer_init(dev, &envy24mixer_class, sc);
/* set channel information */
- pcm_init(dev, sc);
sc->chnum = 0;
for (i = 0; i < 5; i++) {
pcm_addchan(dev, PCMDIR_PLAY, &envy24chan_class, sc);
diff --git a/sys/dev/sound/pci/envy24ht.c b/sys/dev/sound/pci/envy24ht.c
--- a/sys/dev/sound/pci/envy24ht.c
+++ b/sys/dev/sound/pci/envy24ht.c
@@ -2474,11 +2474,12 @@
goto bad;
}
+ pcm_init(dev, sc);
+
/* set multi track mixer */
mixer_init(dev, &envy24htmixer_class, sc);
/* set channel information */
- pcm_init(dev, sc);
sc->chnum = 0;
/* for (i = 0; i < 5; i++) { */
pcm_addchan(dev, PCMDIR_PLAY, &envy24htchan_class, sc);
diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c
--- a/sys/dev/sound/pci/es137x.c
+++ b/sys/dev/sound/pci/es137x.c
@@ -1798,6 +1798,7 @@
es->escfg = ES_SET_NUMREC(es->escfg, 1);
devid = pci_get_devid(dev);
+ pcm_init(dev, es);
switch (devid) {
case ES1371_PCI_ID:
case ES1371_PCI_ID2:
@@ -1858,7 +1859,6 @@
rman_get_start(es->reg), rman_get_start(es->irq),
device_get_nameunit(device_get_parent(dev)));
- pcm_init(dev, es);
for (i = 0; i < numplay; i++)
pcm_addchan(dev, PCMDIR_PLAY, ct, es);
pcm_addchan(dev, PCMDIR_REC, ct, es);
diff --git a/sys/dev/sound/pci/fm801.c b/sys/dev/sound/pci/fm801.c
--- a/sys/dev/sound/pci/fm801.c
+++ b/sys/dev/sound/pci/fm801.c
@@ -613,6 +613,7 @@
codec = AC97_CREATE(dev, fm801, fm801_ac97);
if (codec == NULL) goto oops;
+ pcm_init(dev, fm801);
if (mixer_init(dev, ac97_getmixerclass(), codec) == -1) goto oops;
fm801->irqid = 0;
@@ -642,7 +643,6 @@
device_get_nameunit(device_get_parent(dev)));
#define FM801_MAXPLAYCH 1
- pcm_init(dev, fm801);
pcm_addchan(dev, PCMDIR_PLAY, &fm801ch_class, fm801);
pcm_addchan(dev, PCMDIR_REC, &fm801ch_class, fm801);
if (pcm_register(dev, status))
diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c
--- a/sys/dev/sound/pci/hda/hdaa.c
+++ b/sys/dev/sound/pci/hda/hdaa.c
@@ -7114,12 +7114,6 @@
*/
pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE);
- HDA_BOOTHVERBOSE(
- device_printf(dev, "OSS mixer initialization...\n");
- );
- if (mixer_init(dev, &hdaa_audio_ctl_ossmixer_class, pdevinfo) != 0)
- device_printf(dev, "Can't register mixer\n");
-
HDA_BOOTHVERBOSE(
device_printf(dev, "Registering PCM channels...\n");
);
@@ -7127,6 +7121,12 @@
pdevinfo->registered++;
+ HDA_BOOTHVERBOSE(
+ device_printf(dev, "OSS mixer initialization...\n");
+ );
+ if (mixer_init(dev, &hdaa_audio_ctl_ossmixer_class, pdevinfo) != 0)
+ device_printf(dev, "Can't register mixer\n");
+
d = device_get_softc(dev);
if (pdevinfo->playas >= 0) {
as = &devinfo->as[pdevinfo->playas];
diff --git a/sys/dev/sound/pci/hdsp-pcm.c b/sys/dev/sound/pci/hdsp-pcm.c
--- a/sys/dev/sound/pci/hdsp-pcm.c
+++ b/sys/dev/sound/pci/hdsp-pcm.c
@@ -1071,6 +1071,8 @@
pcm_init(dev, scp);
+ mixer_init(dev, &hdspmixer_class, scp);
+
play = (hdsp_channel_play_ports(scp->hc)) ? 1 : 0;
rec = (hdsp_channel_rec_ports(scp->hc)) ? 1 : 0;
@@ -1095,8 +1097,6 @@
return (ENXIO);
}
- mixer_init(dev, &hdspmixer_class, scp);
-
return (0);
}
diff --git a/sys/dev/sound/pci/hdspe-pcm.c b/sys/dev/sound/pci/hdspe-pcm.c
--- a/sys/dev/sound/pci/hdspe-pcm.c
+++ b/sys/dev/sound/pci/hdspe-pcm.c
@@ -1051,6 +1051,8 @@
pcm_init(dev, scp);
+ mixer_init(dev, &hdspemixer_class, scp);
+
play = (hdspe_channel_play_ports(scp->hc)) ? 1 : 0;
rec = (hdspe_channel_rec_ports(scp->hc)) ? 1 : 0;
@@ -1075,8 +1077,6 @@
return (ENXIO);
}
- mixer_init(dev, &hdspemixer_class, scp);
-
/* Register the PCM child for interrupt dispatch. */
mtx_lock(&sc->lock);
for (i = 0; i < HDSPE_MAX_PCMDEV; i++) {
diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c
--- a/sys/dev/sound/pci/ich.c
+++ b/sys/dev/sound/pci/ich.c
@@ -1029,6 +1029,8 @@
break;
}
+ pcm_init(dev, sc);
+
mixer_init(dev, ac97_getmixerclass(), sc->codec);
/* check and set VRA function */
@@ -1067,8 +1069,6 @@
ich_setmap, sc, 0))
goto bad;
- pcm_init(dev, sc);
-
pcm_addchan(dev, PCMDIR_PLAY, &ichchan_class, sc); /* play */
pcm_addchan(dev, PCMDIR_REC, &ichchan_class, sc); /* record */
if (sc->hasmic)
diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c
--- a/sys/dev/sound/pci/maestro3.c
+++ b/sys/dev/sound/pci/maestro3.c
@@ -1416,6 +1416,7 @@
device_printf(dev, "ac97_create error\n");
goto bad;
}
+ pcm_init(dev, sc);
if (mixer_init(dev, ac97_getmixerclass(), codec)) {
device_printf(dev, "mixer_init error\n");
goto bad;
@@ -1423,7 +1424,6 @@
m3_enable_ints(sc);
- pcm_init(dev, sc);
for (i=0 ; i<dacn ; i++) {
if (pcm_addchan(dev, PCMDIR_PLAY, &m3_pch_class, sc)) {
device_printf(dev, "pcm_addchan (play) error\n");
diff --git a/sys/dev/sound/pci/neomagic.c b/sys/dev/sound/pci/neomagic.c
--- a/sys/dev/sound/pci/neomagic.c
+++ b/sys/dev/sound/pci/neomagic.c
@@ -692,6 +692,7 @@
codec = AC97_CREATE(dev, sc, nm_ac97);
if (codec == NULL) goto bad;
+ pcm_init(dev, sc);
if (mixer_init(dev, ac97_getmixerclass(), codec) == -1) goto bad;
sc->irqid = 0;
@@ -707,7 +708,6 @@
rman_get_start(sc->irq),
device_get_nameunit(device_get_parent(dev)));
- pcm_init(dev, sc);
pcm_addchan(dev, PCMDIR_REC, &nmchan_class, sc);
pcm_addchan(dev, PCMDIR_PLAY, &nmchan_class, sc);
if (pcm_register(dev, status))
diff --git a/sys/dev/sound/pci/solo.c b/sys/dev/sound/pci/solo.c
--- a/sys/dev/sound/pci/solo.c
+++ b/sys/dev/sound/pci/solo.c
@@ -1017,6 +1017,8 @@
if (sc->newspeed)
ess_setmixer(sc, 0x71, 0x2a);
+ pcm_init(dev, sc);
+
if (mixer_init(dev, &solomixer_class, sc))
goto no;
@@ -1025,7 +1027,6 @@
rman_get_start(sc->irq),
device_get_nameunit(device_get_parent(dev)));
- pcm_init(dev, sc);
pcm_addchan(dev, PCMDIR_REC, &esschan_class, sc);
pcm_addchan(dev, PCMDIR_PLAY, &esschan_class, sc);
if (pcm_register(dev, status))
diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c
--- a/sys/dev/sound/pci/t4dwave.c
+++ b/sys/dev/sound/pci/t4dwave.c
@@ -874,6 +874,7 @@
codec = AC97_CREATE(dev, tr, tr_ac97);
if (codec == NULL) goto bad;
+ pcm_init(dev, tr);
if (mixer_init(dev, ac97_getmixerclass(), codec) == -1) goto bad;
tr->irqid = 0;
@@ -922,7 +923,6 @@
rman_get_start(tr->reg), rman_get_start(tr->irq),
device_get_nameunit(device_get_parent(dev)));
- pcm_init(dev, tr);
pcm_addchan(dev, PCMDIR_REC, &trrchan_class, tr);
for (i = 0; i < dacn; i++)
pcm_addchan(dev, PCMDIR_PLAY, &trpchan_class, tr);
diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c
--- a/sys/dev/sound/pci/via8233.c
+++ b/sys/dev/sound/pci/via8233.c
@@ -1331,6 +1331,7 @@
if (!via->codec)
goto bad;
+ pcm_init(dev, via);
mixer_init(dev, ac97_getmixerclass(), via->codec);
via->codec_caps = ac97_getextcaps(via->codec);
@@ -1350,7 +1351,6 @@
device_get_nameunit(device_get_parent(dev)));
/* Register */
- pcm_init(dev, via);
for (i = 0; i < via_dxs_chnum; i++)
pcm_addchan(dev, PCMDIR_PLAY, &via8233dxs_class, via);
for (i = 0; i < via_sgd_chnum; i++)
diff --git a/sys/dev/sound/pci/via82c686.c b/sys/dev/sound/pci/via82c686.c
--- a/sys/dev/sound/pci/via82c686.c
+++ b/sys/dev/sound/pci/via82c686.c
@@ -535,6 +535,7 @@
if (!via->codec)
goto bad;
+ pcm_init(dev, via);
if (mixer_init(dev, ac97_getmixerclass(), via->codec))
goto bad;
@@ -585,7 +586,6 @@
device_get_nameunit(device_get_parent(dev)));
/* Register */
- pcm_init(dev, via);
pcm_addchan(dev, PCMDIR_PLAY, &viachan_class, via);
pcm_addchan(dev, PCMDIR_REC, &viachan_class, via);
if (pcm_register(dev, status))
diff --git a/sys/dev/sound/pci/vibes.c b/sys/dev/sound/pci/vibes.c
--- a/sys/dev/sound/pci/vibes.c
+++ b/sys/dev/sound/pci/vibes.c
@@ -785,6 +785,8 @@
sv_power(sc, 0);
sv_init(sc);
+ pcm_init(dev, sc);
+
if (mixer_init(dev, &sv_mixer_class, sc) != 0) {
device_printf(dev, "sv_attach: Mixer failed to initialize\n");
goto fail;
@@ -867,7 +869,6 @@
if (bootverbose)
printf("Sonicvibes: revision %d.\n", sc->rev);
- pcm_init(dev, sc);
pcm_addchan(dev, PCMDIR_PLAY, &svpchan_class, sc);
pcm_addchan(dev, PCMDIR_REC, &svrchan_class, sc);
diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c
--- a/sys/dev/sound/usb/uaudio.c
+++ b/sys/dev/sound/usb/uaudio.c
@@ -1197,12 +1197,6 @@
DPRINTF("device needs bitperfect by default\n");
uaudio_pcm_setflags(dev, SD_F_BITPERFECT);
}
- if (mixer_init(dev, mixer_class, sc))
- goto detach;
- sc->sc_child[i].mixer_init = 1;
-
- mixer_hwvol_init(dev);
-
device_set_descf(dev, "%s %s",
usb_get_manufacturer(sc->sc_udev),
usb_get_product(sc->sc_udev));
@@ -1214,6 +1208,12 @@
uaudio_pcm_setflags(dev, SD_F_MPSAFE);
+ if (mixer_init(dev, mixer_class, sc))
+ goto detach;
+ sc->sc_child[i].mixer_init = 1;
+
+ mixer_hwvol_init(dev);
+
if (sc->sc_play_chan[i].num_alt > 0) {
sc->sc_play_chan[i].priv_sc = sc;
pcm_addchan(dev, PCMDIR_PLAY, chan_class,

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 31, 10:45 PM (11 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37083929
Default Alt Text
D59069.diff (19 KB)

Event Timeline