Commit 978be6d7 authored by Wu Fengguang's avatar Wu Fengguang Committed by Takashi Iwai

ALSA: intelhdmi - separate out infoframe checksum routine

And make it right when called for more than one times.
Signed-off-by: default avatarWu Fengguang <fengguang.wu@intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 3f54aa50
...@@ -508,24 +508,35 @@ static void hdmi_clear_dip_buffers(struct hda_codec *codec, hda_nid_t pin_nid) ...@@ -508,24 +508,35 @@ static void hdmi_clear_dip_buffers(struct hda_codec *codec, hda_nid_t pin_nid)
#endif #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, static void hdmi_fill_audio_infoframe(struct hda_codec *codec,
hda_nid_t pin_nid, hda_nid_t pin_nid,
struct hdmi_audio_infoframe *ai) struct hdmi_audio_infoframe *ai)
{ {
u8 *params = (u8 *)ai; u8 *bytes = (u8 *)ai;
u8 sum = 0;
int i; int i;
hdmi_debug_dip_size(codec, pin_nid); hdmi_debug_dip_size(codec, pin_nid);
hdmi_clear_dip_buffers(codec, pin_nid); /* be paranoid */ hdmi_clear_dip_buffers(codec, pin_nid); /* be paranoid */
for (i = 0; i < sizeof(*ai); i++) hdmi_checksum_audio_infoframe(ai);
sum += params[i];
ai->checksum = - sum;
hdmi_set_dip_index(codec, pin_nid, 0x0, 0x0); hdmi_set_dip_index(codec, pin_nid, 0x0, 0x0);
for (i = 0; i < sizeof(*ai); i++) 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]);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment