Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- +#define VENDOR_IFRAME_LINE_NUMBER 3
- +
- +static void msm_hdmi_config_vs_infoframe(struct hdmi *hdmi)
- +{
- + struct drm_crtc *crtc = hdmi->encoder->crtc;
- + const struct drm_display_mode *mode = &crtc->state->adjusted_mode;
- + struct hdmi_vendor_infoframe frame;
- + u8 buffer[HDMI_INFOFRAME_SIZE(VENDOR)];
- + u32 val;
- + int len;
- +
- + drm_hdmi_vendor_infoframe_from_display_mode(&frame,
- + hdmi->connector, mode);
- +
- + len = hdmi_vendor_infoframe_pack(&frame, buffer, sizeof(buffer));
- + if (len < 0) {
- + DRM_DEV_ERROR(&hdmi->pdev->dev,
- + "failed to configure vendor infoframe\n");
- + return;
- + }
- +
- + val = (buffer[3] << 8) | buffer[7] | buffer[2];
- + if (frame.s3d_struct != HDMI_3D_STRUCTURE_INVALID)
- + val |= frame.s3d_struct << 24;
- + else
- + val |= frame.vic << 16;
- +
- + hdmi_write(hdmi, REG_HDMI_VENSPEC_INFO(0), val);
- + hdmi_write(hdmi, REG_HDMI_VENSPEC_INFO(1), buffer[9] >> 4);
- + hdmi_write(hdmi, REG_HDMI_INFOFRAME_CTRL0,
- + HDMI_INFOFRAME_CTRL0_VENSPEC_INFO_SEND |
- + HDMI_INFOFRAME_CTRL0_VENSPEC_INFO_CONT);
- +
- + val = hdmi_read(hdmi, REG_HDMI_INFOFRAME_CTRL1);
- + val &= ~HDMI_INFOFRAME_CTRL1_VENSPEC_INFO_LINE__MASK;
- + val |= HDMI_INFOFRAME_CTRL1_VENSPEC_INFO_LINE(VENDOR_IFRAME_LINE_NUMBER);
- + hdmi_write(hdmi, REG_HDMI_INFOFRAME_CTRL1, val);
- +}
- +
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement