aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h4
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c11
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d51f27faa202..3e0918834e7e 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -280,12 +280,12 @@ struct dip_infoframe {
280 uint16_t bottom_bar_start; 280 uint16_t bottom_bar_start;
281 uint16_t left_bar_end; 281 uint16_t left_bar_end;
282 uint16_t right_bar_start; 282 uint16_t right_bar_start;
283 } avi; 283 } __attribute__ ((packed)) avi;
284 struct { 284 struct {
285 uint8_t vn[8]; 285 uint8_t vn[8];
286 uint8_t pd[16]; 286 uint8_t pd[16];
287 uint8_t sdi; 287 uint8_t sdi;
288 } spd; 288 } __attribute__ ((packed)) spd;
289 uint8_t payload[27]; 289 uint8_t payload[27];
290 } __attribute__ ((packed)) body; 290 } __attribute__ ((packed)) body;
291} __attribute__((packed)); 291} __attribute__((packed));
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 7d3f238e8265..125228e77c50 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -887,17 +887,24 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo)
887 }; 887 };
888 uint8_t tx_rate = SDVO_HBUF_TX_VSYNC; 888 uint8_t tx_rate = SDVO_HBUF_TX_VSYNC;
889 uint8_t set_buf_index[2] = { 1, 0 }; 889 uint8_t set_buf_index[2] = { 1, 0 };
890 uint64_t *data = (uint64_t *)&avi_if; 890 uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)];
891 uint64_t *data = (uint64_t *)sdvo_data;
891 unsigned i; 892 unsigned i;
892 893
893 intel_dip_infoframe_csum(&avi_if); 894 intel_dip_infoframe_csum(&avi_if);
894 895
896 /* sdvo spec says that the ecc is handled by the hw, and it looks like
897 * we must not send the ecc field, either. */
898 memcpy(sdvo_data, &avi_if, 3);
899 sdvo_data[3] = avi_if.checksum;
900 memcpy(&sdvo_data[4], &avi_if.body, sizeof(avi_if.body.avi));
901
895 if (!intel_sdvo_set_value(intel_sdvo, 902 if (!intel_sdvo_set_value(intel_sdvo,
896 SDVO_CMD_SET_HBUF_INDEX, 903 SDVO_CMD_SET_HBUF_INDEX,
897 set_buf_index, 2)) 904 set_buf_index, 2))
898 return false; 905 return false;
899 906
900 for (i = 0; i < sizeof(avi_if); i += 8) { 907 for (i = 0; i < sizeof(sdvo_data); i += 8) {
901 if (!intel_sdvo_set_value(intel_sdvo, 908 if (!intel_sdvo_set_value(intel_sdvo,
902 SDVO_CMD_SET_HBUF_DATA, 909 SDVO_CMD_SET_HBUF_DATA,
903 data, 8)) 910 data, 8))