aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWu Fengguang <fengguang.wu@intel.com>2009-11-18 12:38:04 +0800
committerTakashi Iwai <tiwai@suse.de>2009-11-18 07:43:12 +0100
commit978be6d711be237e0344eca21c3922ae88a240bc (patch)
treeaa1f40beeea1f27c2a4ac8c7a9a04d72957d2d75
parent3f54aa5091f48e9d8ce6e99b248449d08acccb26 (diff)
ALSA: intelhdmi - separate out infoframe checksum routine
And make it right when called for more than one times. Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/patch_intelhdmi.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_intelhdmi.c b/sound/pci/hda/patch_intelhdmi.c
index c5fd011567f..d68dba9ac11 100644
--- a/sound/pci/hda/patch_intelhdmi.c
+++ b/sound/pci/hda/patch_intelhdmi.c
@@ -508,24 +508,35 @@ static void hdmi_clear_dip_buffers(struct hda_codec *codec, hda_nid_t pin_nid)
#endif
}
+static void hdmi_checksum_audio_infoframe(struct hdmi_audio_infoframe *ai)
+{
+ u8 *bytes = (u8 *)ai;
+ u8 sum = 0;
+ int i;
+
+ ai->checksum = 0;
+
+ for (i = 0; i < sizeof(*ai); i++)
+ sum += bytes[i];
+
+ ai->checksum = - sum;
+}
+
static void hdmi_fill_audio_infoframe(struct hda_codec *codec,
hda_nid_t pin_nid,
struct hdmi_audio_infoframe *ai)
{
- u8 *params = (u8 *)ai;
- u8 sum = 0;
+ u8 *bytes = (u8 *)ai;
int i;
hdmi_debug_dip_size(codec, pin_nid);
hdmi_clear_dip_buffers(codec, pin_nid); /* be paranoid */
- for (i = 0; i < sizeof(*ai); i++)
- sum += params[i];
- ai->checksum = - sum;
+ hdmi_checksum_audio_infoframe(ai);
hdmi_set_dip_index(codec, pin_nid, 0x0, 0x0);
for (i = 0; i < sizeof(*ai); i++)
- hdmi_write_dip_byte(codec, pin_nid, params[i]);
+ hdmi_write_dip_byte(codec, pin_nid, bytes[i]);
}
/*