In preparation to add support for the HDMI 2.1 Quad-Pixel TX Controller
and minimize code duplication, factor out the AVI infoframe setup from
hdmi_config_AVI() into a common dw_hdmi_prep_avi_infoframe() helper.

Signed-off-by: Cristian Ciocaltea <cristian.ciocal...@collabora.com>
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi-common.h |  4 ++
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c        | 57 ++++++++++++++----------
 2 files changed, 37 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-common.h 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-common.h
index ffd2ee16466c..0569196bbe3b 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-common.h
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-common.h
@@ -150,6 +150,10 @@ struct i2c_adapter *dw_hdmi_i2c_adapter(struct dw_hdmi 
*hdmi,
                                        const struct i2c_algorithm *algo);
 bool dw_hdmi_support_scdc(struct dw_hdmi *hdmi,
                          const struct drm_display_info *display);
+void dw_hdmi_prep_avi_infoframe(struct hdmi_avi_infoframe *frame,
+                               struct dw_hdmi *hdmi,
+                               const struct drm_connector *connector,
+                               const struct drm_display_mode *mode);
 
 enum drm_connector_status
 dw_hdmi_connector_detect(struct drm_connector *connector, bool force);
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 5dd0e2bc080d..81d73fbcb2e6 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1638,66 +1638,75 @@ static void hdmi_tx_hdcp_config(struct dw_hdmi *hdmi)
                  HDMI_A_HDCPCFG1_ENCRYPTIONDISABLE_MASK, HDMI_A_HDCPCFG1);
 }
 
-static void hdmi_config_AVI(struct dw_hdmi *hdmi,
-                           const struct drm_connector *connector,
-                           const struct drm_display_mode *mode)
+void dw_hdmi_prep_avi_infoframe(struct hdmi_avi_infoframe *frame,
+                               struct dw_hdmi *hdmi,
+                               const struct drm_connector *connector,
+                               const struct drm_display_mode *mode)
 {
-       struct hdmi_avi_infoframe frame;
-       u8 val;
-
        /* Initialise info frame from DRM mode */
-       drm_hdmi_avi_infoframe_from_display_mode(&frame, connector, mode);
+       drm_hdmi_avi_infoframe_from_display_mode(frame, connector, mode);
 
        if (hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format)) {
-               drm_hdmi_avi_infoframe_quant_range(&frame, connector, mode,
+               drm_hdmi_avi_infoframe_quant_range(frame, connector, mode,
                                                   
hdmi->hdmi_data.rgb_limited_range ?
                                                   
HDMI_QUANTIZATION_RANGE_LIMITED :
                                                   
HDMI_QUANTIZATION_RANGE_FULL);
        } else {
-               frame.quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT;
-               frame.ycc_quantization_range =
+               frame->quantization_range = HDMI_QUANTIZATION_RANGE_DEFAULT;
+               frame->ycc_quantization_range =
                        HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
        }
 
        if (hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format))
-               frame.colorspace = HDMI_COLORSPACE_YUV444;
+               frame->colorspace = HDMI_COLORSPACE_YUV444;
        else if (hdmi_bus_fmt_is_yuv422(hdmi->hdmi_data.enc_out_bus_format))
-               frame.colorspace = HDMI_COLORSPACE_YUV422;
+               frame->colorspace = HDMI_COLORSPACE_YUV422;
        else if (hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format))
-               frame.colorspace = HDMI_COLORSPACE_YUV420;
+               frame->colorspace = HDMI_COLORSPACE_YUV420;
        else
-               frame.colorspace = HDMI_COLORSPACE_RGB;
+               frame->colorspace = HDMI_COLORSPACE_RGB;
 
        /* Set up colorimetry */
        if (!hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format)) {
                switch (hdmi->hdmi_data.enc_out_encoding) {
                case V4L2_YCBCR_ENC_601:
                        if (hdmi->hdmi_data.enc_in_encoding == 
V4L2_YCBCR_ENC_XV601)
-                               frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
+                               frame->colorimetry = HDMI_COLORIMETRY_EXTENDED;
                        else
-                               frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
-                       frame.extended_colorimetry =
+                               frame->colorimetry = HDMI_COLORIMETRY_ITU_601;
+                       frame->extended_colorimetry =
                                        HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
                        break;
                case V4L2_YCBCR_ENC_709:
                        if (hdmi->hdmi_data.enc_in_encoding == 
V4L2_YCBCR_ENC_XV709)
-                               frame.colorimetry = HDMI_COLORIMETRY_EXTENDED;
+                               frame->colorimetry = HDMI_COLORIMETRY_EXTENDED;
                        else
-                               frame.colorimetry = HDMI_COLORIMETRY_ITU_709;
-                       frame.extended_colorimetry =
+                               frame->colorimetry = HDMI_COLORIMETRY_ITU_709;
+                       frame->extended_colorimetry =
                                        HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
                        break;
                default: /* Carries no data */
-                       frame.colorimetry = HDMI_COLORIMETRY_ITU_601;
-                       frame.extended_colorimetry =
+                       frame->colorimetry = HDMI_COLORIMETRY_ITU_601;
+                       frame->extended_colorimetry =
                                        HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
                        break;
                }
        } else {
-               frame.colorimetry = HDMI_COLORIMETRY_NONE;
-               frame.extended_colorimetry =
+               frame->colorimetry = HDMI_COLORIMETRY_NONE;
+               frame->extended_colorimetry =
                        HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
        }
+}
+EXPORT_SYMBOL_GPL(dw_hdmi_prep_avi_infoframe);
+
+static void hdmi_config_AVI(struct dw_hdmi *hdmi,
+                           const struct drm_connector *connector,
+                           const struct drm_display_mode *mode)
+{
+       struct hdmi_avi_infoframe frame;
+       u8 val;
+
+       dw_hdmi_prep_avi_infoframe(&frame, hdmi, connector, mode);
 
        /*
         * The Designware IP uses a different byte format from standard

-- 
2.45.0

Reply via email to