[alsa-devel] Wrong channel order with multichannel HDMI on MCP7A

Anssi Hannula anssi.hannula at iki.fi
Wed Jul 28 04:42:09 CEST 2010


Wei Ni kirjoitti tiistai, 27. heinäkuuta 2010 10:14:37:
> Hi, Takashi
> MCP7x use old HW design in HDMI, they don't support channel mapping like
> MCP89. It use nvhdmi_dig_playback_pcm_prepare_8ch() to prepare channel
> mapping and steam id,format.
> 
> Anssi Hannula
> Please try the following changes in patch_nvhdmi.c
> static hda_nid_t nvhdmi_con_nids_7x[4] = {
> 	/*front, rear, clfe, rear_surr */
> -	0x6, 0x8, 0xa, 0xc,
> +	0x6, 0xa, 0x8, 0xc,
> };

I actually tried that already, but for some reason changing the order in 
nvhdmi_con_nids_7x doesn't have any effect.

Actually, disabling the whole for loop that assigns the channels in 
nvhdmi_dig_playback_pcm_prepare_8ch() has no effect, leading me to believe 
that the commands are not reaching the hardware or they are being overridden.

I also just noticed that the HDMI output is the only detected output, even 
though this board has analog audio and S/PDIF outputs as well. I'm not sure if 
this is related or not.

 
> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Monday, July 26, 2010 5:35 PM
> To: Anssi Hannula
> Cc: alsa-devel at alsa-project.org; Wei Ni
> Subject: Re: [alsa-devel] Wrong channel order with multichannel HDMI on
> MCP7A
> 
> At Mon, 26 Jul 2010 11:14:17 +0200,
> 
> 私 wrote:
> > At Sun, 25 Jul 2010 19:51:39 +0300,
> > 
> > Anssi Hannula wrote:
> > > Hi all!
> > > 
> > > I have a motherboard with NVIDIA MCP7A HDMI audio.
> > > However, multichannel audio is not mapped properly into the HDMI order.
> > > 
> > > On 5.1, I get RL in FC, RR in LFE, FC in RL, LFE in RR.
> > > 
> > > Interestingly, this is not consistent with the ALSA channel order (FL
> > > FR RL RR FC LFE) being passed directly to HDMI (FL FR LFE FC RL RR).
> > > Instead it looks like there has been a waveformatex (FL FR FC LFE RL
> > > RR; windows?) => HDMI conversion instead of ALSA => HDMI.
> > > 
> > > Same happens for 7.1.
> > > 
> > > Is it possible to set the hardware to do an ALSA => HDMI conversion
> > > instead? If not, we should manually compensate for this somewhere,
> > > right?
> > 
> > Does the patch below change anything?
> 
> Ah crap, it should be irrelevant.
> Wei, don't MCP 7x chips support the channel mapping as MCP 89?
> 
> 
> thanks,
> 
> Takashi
> 
> > > Somewhat relatedly, trying to output 4 channels results in silence
> > > only.
> > 
> > Although 5.1/7.1 work?
> > 
> > > Trying to output 3 or 5 channels triggers a timeout with I/O error,
> > > with the following in the kernel log: "ALSA pcm_lib.c:1757: playback
> > > write error (DMA or IRQ trouble?)"
> > 
> > HD-audio doesn't support the odd number of channels in general, so
> > they should be played as 4 or 6 channels.  But, it looks like
> > something wrong in the setup...
> > 
> > 
> > thanks,
> > 
> > Takashi
> > 
> > ---
> > diff --git a/sound/pci/hda/patch_nvhdmi.c b/sound/pci/hda/patch_nvhdmi.c
> > index 3c10c0b..7355c60 100644
> > --- a/sound/pci/hda/patch_nvhdmi.c
> > +++ b/sound/pci/hda/patch_nvhdmi.c
> > @@ -511,6 +511,8 @@ static int patch_nvhdmi_8ch_7x(struct hda_codec
> > *codec)
> > 
> >  	codec->patch_ops = nvhdmi_patch_ops_8ch_7x;
> > 
> > +	init_channel_allocations();
> > +
> > 
> >  	return 0;
> >  
> >  }
> 
> ---------------------------------------------------------------------------
> -------- This email message is for the sole use of the intended
> recipient(s) and may contain confidential information.  Any unauthorized
> review, use, disclosure or distribution is prohibited.  If you are not the
> intended recipient, please contact the sender by reply email and destroy
> all copies of the original message.
> ---------------------------------------------------------------------------
> -------- _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

-- 
Anssi Hannula


More information about the Alsa-devel mailing list