mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-11-07 04:36:52 -10:00
sound: Standardize mixer_init() call order
Device drivers call mixer_init() in a non-standard order - some before pcm_init(), and some after pcm_register(). However, both approaches are potentially risky, and logically weak, since pcm_register() is supposed to be the function that finalizes sound(4) attach. Standardize the call ordering by moving all mixer_init() calls after pcm_init(). This is also necessary for a follow-up patch, which expects pcm_init() to have run first and initialized the PCM lock. Sponsored by: The FreeBSD Foundation MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D59069
This commit is contained in:
1 parent
f014795ec3
commit
13fcc9caaf
33 files changed
+85
-67
No files matched your search
@@ -1150,6 +1150,8 @@ a10codec_attach(device_t dev)
|
||||
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 @@ a10codec_attach(device_t dev)
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -1037,13 +1037,13 @@ bcm2835_audio_delayed_init(void *xsc)
|
||||
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)) {
|
||||
|
||||
@@ -808,6 +808,8 @@ ssi_attach(device_t dev)
|
||||
|
||||
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 @@ ssi_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
mixer_init(dev, &ssimixer_class, scp);
|
||||
setup_ssi(sc);
|
||||
|
||||
imx_ccm_ssi_configure(dev);
|
||||
|
||||
@@ -760,6 +760,8 @@ sai_attach(device_t dev)
|
||||
|
||||
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 @@ sai_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
mixer_init(dev, &saimixer_class, scp);
|
||||
|
||||
setup_dma(scp);
|
||||
setup_sai(sc);
|
||||
|
||||
|
||||
@@ -376,6 +376,7 @@ dummy_attach(device_t dev)
|
||||
|
||||
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 @@ dummy_attach(device_t dev)
|
||||
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
|
||||
|
||||
@@ -398,6 +398,11 @@ audio_soc_init(void *arg)
|
||||
|
||||
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_soc_init(void *arg)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -362,7 +362,7 @@ static kobj_method_t aoa_chan_methods[] = {
|
||||
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 @@ aoa_attach(void *xsc)
|
||||
|
||||
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));
|
||||
|
||||
@@ -41,6 +41,6 @@ struct aoa_softc {
|
||||
};
|
||||
|
||||
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 */
|
||||
@@ -495,6 +495,7 @@ davbus_attach(device_t self)
|
||||
struct davbus_softc *sc;
|
||||
struct resource *dbdma_irq, *cintr;
|
||||
void *cookie;
|
||||
kobj_class_t mixer_class;
|
||||
char compat[64];
|
||||
int rid, oirq, err;
|
||||
|
||||
@@ -557,17 +558,19 @@ davbus_attach(device_t self)
|
||||
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);
|
||||
/* Pick the codec module */
|
||||
if (strcmp(compat, "screamer") == 0)
|
||||
mixer_class = &screamer_mixer_class;
|
||||
else if (strcmp(compat, "burgundy") == 0)
|
||||
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);
|
||||
|
||||
/* Install codec module */
|
||||
if (strcmp(compat, "screamer") == 0)
|
||||
mixer_init(self, &screamer_mixer_class, sc);
|
||||
else if (strcmp(compat, "burgundy") == 0)
|
||||
mixer_init(self, &burgundy_mixer_class, sc);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ i2s_attach(device_t self)
|
||||
if (config_intrhook_establish(i2s_delayed_attach) != 0)
|
||||
return (ENOMEM);
|
||||
|
||||
return (aoa_attach(sc));
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -737,9 +737,13 @@ i2s_postattach(void *xsc)
|
||||
/* 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);
|
||||
|
||||
@@ -832,13 +832,13 @@ als_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
|
||||
@@ -1080,10 +1080,10 @@ atiixp_chip_post_init(void *arg)
|
||||
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++)
|
||||
|
||||
@@ -980,11 +980,11 @@ cmi_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -837,10 +837,10 @@ cs4281_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
|
||||
@@ -809,6 +809,7 @@ pcmcsa_attach(device_t dev)
|
||||
}
|
||||
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 @@ pcmcsa_attach(device_t dev)
|
||||
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)) {
|
||||
|
||||
@@ -2114,6 +2114,7 @@ emu_pci_attach(device_t dev)
|
||||
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 @@ emu_pci_attach(device_t dev)
|
||||
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++)
|
||||
|
||||
@@ -1393,6 +1393,7 @@ emu_pcm_attach(device_t dev)
|
||||
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;
|
||||
@@ -1474,7 +1475,6 @@ emu_pcm_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -2570,11 +2570,12 @@ envy24_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -2474,11 +2474,12 @@ envy24ht_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -1798,6 +1798,7 @@ es_pci_attach(device_t dev)
|
||||
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 @@ es_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -613,6 +613,7 @@ fm801_pci_attach(device_t dev)
|
||||
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 @@ fm801_pci_attach(device_t dev)
|
||||
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))
|
||||
|
||||
@@ -7114,12 +7114,6 @@ hdaa_pcm_attach(device_t dev)
|
||||
*/
|
||||
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 @@ hdaa_pcm_attach(device_t dev)
|
||||
|
||||
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];
|
||||
|
||||
@@ -1070,6 +1070,8 @@ hdsp_pcm_attach(device_t dev)
|
||||
|
||||
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;
|
||||
|
||||
@@ -1094,8 +1096,6 @@ hdsp_pcm_attach(device_t dev)
|
||||
return (ENXIO);
|
||||
}
|
||||
|
||||
mixer_init(dev, &hdspmixer_class, scp);
|
||||
|
||||
/* Register the PCM child for interrupt dispatch. */
|
||||
mtx_lock(&sc->lock);
|
||||
for (i = 0; i < HDSP_MAX_PCMDEV; i++) {
|
||||
|
||||
@@ -1064,6 +1064,8 @@ hdspe_pcm_attach(device_t dev)
|
||||
|
||||
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;
|
||||
|
||||
@@ -1088,8 +1090,6 @@ hdspe_pcm_attach(device_t dev)
|
||||
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++) {
|
||||
|
||||
@@ -1029,6 +1029,8 @@ ich_pci_attach(device_t dev)
|
||||
break;
|
||||
}
|
||||
|
||||
pcm_init(dev, sc);
|
||||
|
||||
mixer_init(dev, ac97_getmixerclass(), sc->codec);
|
||||
|
||||
/* check and set VRA function */
|
||||
@@ -1067,8 +1069,6 @@ ich_pci_attach(device_t dev)
|
||||
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)
|
||||
|
||||
@@ -1416,6 +1416,7 @@ m3_pci_attach(device_t dev)
|
||||
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_pci_attach(device_t dev)
|
||||
|
||||
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");
|
||||
|
||||
@@ -692,6 +692,7 @@ nm_pci_attach(device_t dev)
|
||||
|
||||
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 @@ nm_pci_attach(device_t dev)
|
||||
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))
|
||||
|
||||
@@ -1017,6 +1017,8 @@ ess_attach(device_t dev)
|
||||
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 @@ ess_attach(device_t dev)
|
||||
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))
|
||||
|
||||
@@ -874,6 +874,7 @@ tr_pci_attach(device_t dev)
|
||||
|
||||
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 @@ tr_pci_attach(device_t dev)
|
||||
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);
|
||||
|
||||
@@ -1331,6 +1331,7 @@ via_attach(device_t dev)
|
||||
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 @@ via_attach(device_t dev)
|
||||
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++)
|
||||
|
||||
@@ -535,6 +535,7 @@ via_attach(device_t dev)
|
||||
if (!via->codec)
|
||||
goto bad;
|
||||
|
||||
pcm_init(dev, via);
|
||||
if (mixer_init(dev, ac97_getmixerclass(), via->codec))
|
||||
goto bad;
|
||||
|
||||
@@ -585,7 +586,6 @@ via_attach(device_t dev)
|
||||
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))
|
||||
|
||||
@@ -785,6 +785,8 @@ sv_attach(device_t dev) {
|
||||
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 @@ sv_attach(device_t dev) {
|
||||
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);
|
||||
|
||||
|
||||
@@ -1204,13 +1204,6 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_clas
|
||||
DPRINTF("device needs bitperfect by default\n");
|
||||
uaudio_pcm_setflags(dev, SD_F_BITPERFECT);
|
||||
}
|
||||
if (mixer_init(dev, mixer_class, sc))
|
||||
goto detach;
|
||||
mix_set(sc->sc_child[i].mixer_dev, SOUND_MIXER_MONITOR,
|
||||
UAUDIO_DEFAULT_MONITOR, UAUDIO_DEFAULT_MONITOR);
|
||||
sc->sc_child[i].mixer_init = 1;
|
||||
|
||||
mixer_hwvol_init(dev);
|
||||
|
||||
device_set_descf(dev, "%s %s",
|
||||
usb_get_manufacturer(sc->sc_udev),
|
||||
@@ -1223,6 +1216,14 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_clas
|
||||
|
||||
uaudio_pcm_setflags(dev, SD_F_MPSAFE);
|
||||
|
||||
if (mixer_init(dev, mixer_class, sc))
|
||||
goto detach;
|
||||
mix_set(sc->sc_child[i].mixer_dev, SOUND_MIXER_MONITOR,
|
||||
UAUDIO_DEFAULT_MONITOR, UAUDIO_DEFAULT_MONITOR);
|
||||
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,
|
||||
|
||||
Reference in new issue
Block a user