diff options
author | Benjamin Gaignard <benjamin.gaignard@linaro.org> | 2014-12-04 05:26:59 -0500 |
---|---|---|
committer | Benjamin Gaignard <benjamin.gaignard@linaro.org> | 2014-12-11 07:59:31 -0500 |
commit | 589b347b54932b2cd2f50845166c95f3981aa7db (patch) | |
tree | 496943db0f67908c390542c9761f8e9aabfbb049 | |
parent | eb929dc4d36db7881bbf90d5532b024615f64c0f (diff) |
drm: sti: fix hdmi avi infoframe
The hardware expect to have the infoframe checksum in the first byte.
In consequence shift all infoframe on one byte.
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
-rw-r--r-- | drivers/gpu/drm/sti/sti_hdmi.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c index 192119761c14..d032e024b0b8 100644 --- a/drivers/gpu/drm/sti/sti_hdmi.c +++ b/drivers/gpu/drm/sti/sti_hdmi.c | |||
@@ -272,31 +272,32 @@ static int hdmi_avi_infoframe_config(struct sti_hdmi *hdmi) | |||
272 | hdmi_write(hdmi, val, HDMI_SW_DI_CFG); | 272 | hdmi_write(hdmi, val, HDMI_SW_DI_CFG); |
273 | 273 | ||
274 | /* Infoframe header */ | 274 | /* Infoframe header */ |
275 | val = buffer[0x0]; | 275 | val = buffer[0]; |
276 | val |= buffer[0x1] << 8; | 276 | val |= buffer[1] << 8; |
277 | val |= buffer[0x2] << 16; | 277 | val |= buffer[2] << 16; |
278 | hdmi_write(hdmi, val, HDMI_SW_DI_N_HEAD_WORD(HDMI_IFRAME_SLOT_AVI)); | 278 | hdmi_write(hdmi, val, HDMI_SW_DI_N_HEAD_WORD(HDMI_IFRAME_SLOT_AVI)); |
279 | 279 | ||
280 | /* Infoframe packet bytes */ | 280 | /* Infoframe packet bytes */ |
281 | val = frame[0x0]; | 281 | val = buffer[3]; |
282 | val |= frame[0x1] << 8; | 282 | val |= *(frame++) << 8; |
283 | val |= frame[0x2] << 16; | 283 | val |= *(frame++) << 16; |
284 | val |= frame[0x3] << 24; | 284 | val |= *(frame++) << 24; |
285 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD0(HDMI_IFRAME_SLOT_AVI)); | 285 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD0(HDMI_IFRAME_SLOT_AVI)); |
286 | 286 | ||
287 | val = frame[0x4]; | 287 | val = *(frame++); |
288 | val |= frame[0x5] << 8; | 288 | val |= *(frame++) << 8; |
289 | val |= frame[0x6] << 16; | 289 | val |= *(frame++) << 16; |
290 | val |= frame[0x7] << 24; | 290 | val |= *(frame++) << 24; |
291 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD1(HDMI_IFRAME_SLOT_AVI)); | 291 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD1(HDMI_IFRAME_SLOT_AVI)); |
292 | 292 | ||
293 | val = frame[0x8]; | 293 | val = *(frame++); |
294 | val |= frame[0x9] << 8; | 294 | val |= *(frame++) << 8; |
295 | val |= frame[0xA] << 16; | 295 | val |= *(frame++) << 16; |
296 | val |= frame[0xB] << 24; | 296 | val |= *(frame++) << 24; |
297 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD2(HDMI_IFRAME_SLOT_AVI)); | 297 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD2(HDMI_IFRAME_SLOT_AVI)); |
298 | 298 | ||
299 | val = frame[0xC]; | 299 | val = *(frame++); |
300 | val |= *(frame) << 8; | ||
300 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD3(HDMI_IFRAME_SLOT_AVI)); | 301 | hdmi_write(hdmi, val, HDMI_SW_DI_N_PKT_WORD3(HDMI_IFRAME_SLOT_AVI)); |
301 | 302 | ||
302 | /* Enable transmission slot for AVI infoframe | 303 | /* Enable transmission slot for AVI infoframe |