| From 946cb86257b3e587b6f60de2684a7425c92122c9 Mon Sep 17 00:00:00 2001 |
| From: Damien Lespiau <damien.lespiau@intel.com> |
| Date: Tue, 6 Aug 2013 20:32:20 +0100 |
| Subject: drm/i915/sdvo: Port the infoframe code to the shared infrastructure |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> |
| Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com> |
| Signed-off-by: Thierry Reding <thierry.reding at avionic-design.de> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 15dcd3502160a46acf11e5cb5e80e9d90a6f9f60) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_sdvo.c | 38 ++++++++++++++++++++------------------ |
| 1 file changed, 20 insertions(+), 18 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c |
| index 47423f31f82b..02f220b4e4a1 100644 |
| --- a/drivers/gpu/drm/i915/intel_sdvo.c |
| +++ b/drivers/gpu/drm/i915/intel_sdvo.c |
| @@ -963,30 +963,32 @@ static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, |
| static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, |
| const struct drm_display_mode *adjusted_mode) |
| { |
| - struct dip_infoframe avi_if = { |
| - .type = DIP_TYPE_AVI, |
| - .ver = DIP_VERSION_AVI, |
| - .len = DIP_LEN_AVI, |
| - }; |
| - uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)]; |
| - struct intel_crtc *intel_crtc = to_intel_crtc(intel_sdvo->base.base.crtc); |
| + uint8_t sdvo_data[HDMI_INFOFRAME_SIZE(AVI)]; |
| + struct drm_crtc *crtc = intel_sdvo->base.base.crtc; |
| + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| + union hdmi_infoframe frame; |
| + int ret; |
| + ssize_t len; |
| + |
| + ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi, |
| + adjusted_mode); |
| + if (ret < 0) { |
| + DRM_ERROR("couldn't fill AVI infoframe\n"); |
| + return false; |
| + } |
| |
| if (intel_sdvo->rgb_quant_range_selectable) { |
| if (intel_crtc->config.limited_color_range) |
| - avi_if.body.avi.ITC_EC_Q_SC |= DIP_AVI_RGB_QUANT_RANGE_LIMITED; |
| + frame.avi.quantization_range = |
| + HDMI_QUANTIZATION_RANGE_LIMITED; |
| else |
| - avi_if.body.avi.ITC_EC_Q_SC |= DIP_AVI_RGB_QUANT_RANGE_FULL; |
| + frame.avi.quantization_range = |
| + HDMI_QUANTIZATION_RANGE_FULL; |
| } |
| |
| - avi_if.body.avi.VIC = drm_match_cea_mode(adjusted_mode); |
| - |
| - intel_dip_infoframe_csum(&avi_if); |
| - |
| - /* sdvo spec says that the ecc is handled by the hw, and it looks like |
| - * we must not send the ecc field, either. */ |
| - memcpy(sdvo_data, &avi_if, 3); |
| - sdvo_data[3] = avi_if.checksum; |
| - memcpy(&sdvo_data[4], &avi_if.body, sizeof(avi_if.body.avi)); |
| + len = hdmi_infoframe_pack(&frame, sdvo_data, sizeof(sdvo_data)); |
| + if (len < 0) |
| + return false; |
| |
| return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, |
| SDVO_HBUF_TX_VSYNC, |
| -- |
| 1.8.5.rc3 |
| |