summaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_intelhdmi.c
diff options
context:
space:
mode:
authorWu Fengguang <wfg@linux.intel.com>2008-11-19 08:56:18 +0800
committerTakashi Iwai <tiwai@suse.de>2008-11-19 07:35:44 +0100
commit9c8641e8ee438273079337c86f4d739fbfdd8b33 (patch)
treedbceafd733b7469c776da4d5a2d01b2e3aaf926d /sound/pci/hda/patch_intelhdmi.c
parent698544de8a31a7cadc26c27cbaa69ae82dd4f86c (diff)
ALSA: hda: HDMI channel mapping cleanups
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>
Diffstat (limited to 'sound/pci/hda/patch_intelhdmi.c')
-rw-r--r--sound/pci/hda/patch_intelhdmi.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/sound/pci/hda/patch_intelhdmi.c b/sound/pci/hda/patch_intelhdmi.c
index 6b5c3e2cf93..747aa84d0ec 100644
--- a/sound/pci/hda/patch_intelhdmi.c
+++ b/sound/pci/hda/patch_intelhdmi.c
@@ -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);