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 /drivers/gpu | |
| 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>
Diffstat (limited to 'drivers/gpu')
| -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 |
