ALSA: hda: HDMI channel mapping cleanups
authorWu Fengguang <wfg@linux.intel.com>
Wed, 19 Nov 2008 00:56:18 +0000 (08:56 +0800)
committerTakashi Iwai <tiwai@suse.de>
Wed, 19 Nov 2008 06:35:44 +0000 (07:35 +0100)
Refactor the channel mapping code for consistent naming
and make it more informed about channel allocations.

Signed-off-by: Wu Fengguang <wfg@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_intelhdmi.c

index 6b5c3e2..747aa84 100644 (file)
@@ -290,7 +290,7 @@ static void hdmi_set_channel_count(struct hda_codec *codec, int chs)
                                chs, hdmi_get_channel_count(codec));
 }
 
-static void hdmi_debug_slot_mapping(struct hda_codec *codec)
+static void hdmi_debug_channel_mapping(struct hda_codec *codec)
 {
 #ifdef CONFIG_SND_DEBUG_VERBOSE
        int i;
@@ -305,13 +305,6 @@ static void hdmi_debug_slot_mapping(struct hda_codec *codec)
 #endif
 }
 
-static void hdmi_setup_channel_mapping(struct hda_codec *codec)
-{
-       snd_hda_sequence_write(codec, def_chan_map);
-       hdmi_debug_slot_mapping(codec);
-}
-
-
 static void hdmi_parse_eld(struct hda_codec *codec)
 {
        struct intel_hdmi_spec *spec = codec->spec;
@@ -461,6 +454,22 @@ static int hdmi_setup_channel_allocation(struct hda_codec *codec,
        return -1;
 }
 
+static void hdmi_setup_channel_mapping(struct hda_codec *codec,
+                                       struct hdmi_audio_infoframe *ai)
+{
+       if (!ai->CA)
+               return;
+
+       /*
+        * TODO: adjust channel mapping if necessary
+        * ALSA sequence is front/surr/clfe/side?
+        */
+
+       snd_hda_sequence_write(codec, def_chan_map);
+       hdmi_debug_channel_mapping(codec);
+}
+
+
 static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
                                        struct snd_pcm_substream *substream)
 {
@@ -472,6 +481,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
        };
 
        hdmi_setup_channel_allocation(codec, &ai);
+       hdmi_setup_channel_mapping(codec, &ai);
 
        hdmi_fill_audio_infoframe(codec, &ai);
 }
@@ -569,9 +579,6 @@ static int intel_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
 
        hdmi_set_channel_count(codec, substream->runtime->channels);
 
-       /* wfg: channel mapping not supported by DEVCTG */
-       hdmi_setup_channel_mapping(codec);
-
        hdmi_setup_audio_infoframe(codec, substream);
 
        hdmi_enable_output(codec);