|
@@ -634,19 +634,21 @@ tda998x_write_aif(struct tda998x_priv *priv, struct tda998x_encoder_params *p)
|
|
|
static void
|
|
|
tda998x_write_avi(struct tda998x_priv *priv, struct drm_display_mode *mode)
|
|
|
{
|
|
|
- u8 buf[PB(HDMI_AVI_INFOFRAME_SIZE) + 1];
|
|
|
+ struct hdmi_avi_infoframe frame;
|
|
|
+ u8 buf[HDMI_INFOFRAME_HEADER_SIZE + HDMI_AVI_INFOFRAME_SIZE];
|
|
|
+ ssize_t len;
|
|
|
|
|
|
- memset(buf, 0, sizeof(buf));
|
|
|
- buf[HB(0)] = HDMI_INFOFRAME_TYPE_AVI;
|
|
|
- buf[HB(1)] = 0x02;
|
|
|
- buf[HB(2)] = HDMI_AVI_INFOFRAME_SIZE;
|
|
|
- buf[PB(1)] = HDMI_SCAN_MODE_UNDERSCAN;
|
|
|
- buf[PB(2)] = HDMI_ACTIVE_ASPECT_PICTURE;
|
|
|
- buf[PB(3)] = HDMI_QUANTIZATION_RANGE_FULL << 2;
|
|
|
- buf[PB(4)] = drm_match_cea_mode(mode);
|
|
|
-
|
|
|
- tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf,
|
|
|
- sizeof(buf));
|
|
|
+ drm_hdmi_avi_infoframe_from_display_mode(&frame, mode);
|
|
|
+
|
|
|
+ frame.quantization_range = HDMI_QUANTIZATION_RANGE_FULL;
|
|
|
+
|
|
|
+ len = hdmi_avi_infoframe_pack(&frame, buf, sizeof(buf));
|
|
|
+ if (len < 0) {
|
|
|
+ dev_err(&priv->hdmi->dev, "hdmi_avi_infoframe_pack() failed: %d\n", len);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ tda998x_write_if(priv, DIP_IF_FLAGS_IF2, REG_IF2_HB0, buf, len);
|
|
|
}
|
|
|
|
|
|
static void tda998x_audio_mute(struct tda998x_priv *priv, bool on)
|