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>
This commit is contained in:
committed by
Takashi Iwai
parent
3f54aa5091
commit
978be6d711
@@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user