[alsa-devel] channel map for intel8x0

Takashi Iwai tiwai at suse.de
Tue Nov 5 18:03:38 CET 2013


At Mon, 04 Nov 2013 14:19:49 +0100,
Takashi Iwai wrote:
> 
> 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.

Let me know if the patch worked.  Then I'll apply it with Cc to
stable.


thanks,

Takashi

> 
> > > - 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