[alsa-devel] Wrong channel order with multichannel HDMI on MCP7A
Anssi Hannula
anssi.hannula at iki.fi
Mon Jul 26 11:32:23 CEST 2010
Takashi Iwai kirjoitti maanantai, 26. heinäkuuta 2010 12:14:17:
> 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?
AFAICS no stuff from patch_hdmi.c is used for MCP7x, so it has no effect.
Tested anyway, it doesn't change anything.
> > Somewhat relatedly, trying to output 4 channels results in silence only.
>
> Although 5.1/7.1 work?
Yep, with wrong channel order.
> > 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;
> }
--
Anssi Hannula
More information about the Alsa-devel
mailing list