Commit 15dcd350 authored by Damien Lespiau's avatar Damien Lespiau Committed by Daniel Vetter

drm/i915/sdvo: Port the infoframe code to the shared infrastructure

Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDamien 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: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 5adaea79
...@@ -963,30 +963,32 @@ static bool intel_sdvo_write_infoframe(struct intel_sdvo *intel_sdvo, ...@@ -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, static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo,
const struct drm_display_mode *adjusted_mode) const struct drm_display_mode *adjusted_mode)
{ {
struct dip_infoframe avi_if = { uint8_t sdvo_data[HDMI_INFOFRAME_SIZE(AVI)];
.type = DIP_TYPE_AVI, struct drm_crtc *crtc = intel_sdvo->base.base.crtc;
.ver = DIP_VERSION_AVI, struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
.len = DIP_LEN_AVI, union hdmi_infoframe frame;
}; int ret;
uint8_t sdvo_data[4 + sizeof(avi_if.body.avi)]; ssize_t len;
struct intel_crtc *intel_crtc = to_intel_crtc(intel_sdvo->base.base.crtc);
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_sdvo->rgb_quant_range_selectable) {
if (intel_crtc->config.limited_color_range) 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 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); len = hdmi_infoframe_pack(&frame, sdvo_data, sizeof(sdvo_data));
if (len < 0)
intel_dip_infoframe_csum(&avi_if); return false;
/* 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));
return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF, return intel_sdvo_write_infoframe(intel_sdvo, SDVO_HBUF_INDEX_AVI_IF,
SDVO_HBUF_TX_VSYNC, SDVO_HBUF_TX_VSYNC,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment