aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Gaignard <benjamin.gaignard@linaro.org>2014-12-04 05:26:59 -0500
committerBenjamin Gaignard <benjamin.gaignard@linaro.org>2014-12-11 07:59:31 -0500
commit589b347b54932b2cd2f50845166c95f3981aa7db (patch)
tree496943db0f67908c390542c9761f8e9aabfbb049
parenteb929dc4d36db7881bbf90d5532b024615f64c0f (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.c33
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