[alsa-devel] channel map for intel8x0
Takashi Iwai
tiwai at suse.de
Mon Nov 4 14:19:49 CET 2013
At Mon, 4 Nov 2013 20:52:38 +0800,
Raymond Yau wrote:
>
> >
> > > Refer to patch ALSA: Implement channel maps for standard onboard AC97
> > > drivers
> > >
> > > e36e3b86c78cee9c7435eb33e0ef8a788193e812<
> > https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/sound/pci/intel8x0.c?id=e36e3b86c78cee9c7435eb33e0ef8a788193e812
> > >
> > >
> > > It seem that channal map is not working when testing with
> > > alsa-lib/test/chmap.c with the emulated intel8x0 inside virtualbox
> >
> > What doesn't work actually? The lack of chmap for the capture?
> > Please give a bit more explanations about your problem.
> >
> >
> /alsa-lib/test$ ./chmap -Dhw:0,0 query
> Cannot query maps
OK. An untested fix patch is below.
> > - if (rec->ac97_idx == ICHD_PCMOUT && rec->playback_ops)
> > +if (device == 0 && rec->playback_ops) {
> >
>
> after change the above line
>
> /alsa-lib/test$ ./chmap -Dhw:0,0 query
> Type = FIXED, Channels = 2
> FL FR
>
> is there any option to test the channel map of the capture device ?
The -s option specifies the stream direction. I forgot to add the
help string, just take a look at the source.
Meanwhile, most of drivers don't provide the chmap for the capture
direction just because they are up to two channels, and obviously it's
only FL/FR. The chmap support has been added for drivers of consumer
cards that are capable of multi channels.
Takashi
---
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
index 59c8aaebb91e..8d7a92ac616d 100644
--- a/sound/pci/intel8x0.c
+++ b/sound/pci/intel8x0.c
@@ -1541,17 +1541,15 @@ static int snd_intel8x0_pcm1(struct intel8x0 *chip, int device,
snd_dma_pci_data(chip->pci),
rec->prealloc_size, rec->prealloc_max_size);
- if (rec->ac97_idx == ICHD_PCMOUT && rec->playback_ops) {
+ if (rec->playback_ops == &snd_intel8x0_playback_ops) {
struct snd_pcm_chmap *chmap;
int chs = 2;
- if (rec->ac97_idx == ICHD_PCMOUT) {
- if (chip->multi8)
- chs = 8;
- else if (chip->multi6)
- chs = 6;
- else if (chip->multi4)
- chs = 4;
- }
+ if (chip->multi8)
+ chs = 8;
+ else if (chip->multi6)
+ chs = 6;
+ else if (chip->multi4)
+ chs = 4;
err = snd_pcm_add_chmap_ctls(pcm, SNDRV_PCM_STREAM_PLAYBACK,
snd_pcm_alt_chmaps, chs, 0,
&chmap);
More information about the Alsa-devel
mailing list