Extend struct dw_hdmi_qp_plat_data to include the supported display
output formats and maximum bits per color channel.  When provided by the
platform driver, use them to setup the HDMI bridge accordingly.

Additionally, improve debug logging in dw_hdmi_qp_bridge_atomic_enable()
to also show the current HDMI output format and bpc.

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

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c 
b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
index 
42a90e0383061dad6c8416af21b27db7a3ba6d7d..8ff8ea8e0714ed6d6fa4b7865c86d04c32565d90
 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c
@@ -869,8 +869,9 @@ static void dw_hdmi_qp_bridge_atomic_enable(struct 
drm_bridge *bridge,
                return;
 
        if (connector->display_info.is_hdmi) {
-               dev_dbg(hdmi->dev, "%s mode=HDMI rate=%llu\n",
-                       __func__, conn_state->hdmi.tmds_char_rate);
+               dev_dbg(hdmi->dev, "%s mode=HDMI %s rate=%llu bpc=%u\n", 
__func__,
+                       
drm_hdmi_connector_get_output_format_name(conn_state->hdmi.output_format),
+                       conn_state->hdmi.tmds_char_rate, 
conn_state->hdmi.output_bpc);
                op_mode = 0;
                hdmi->tmds_char_rate = conn_state->hdmi.tmds_char_rate;
        } else {
@@ -1299,6 +1300,12 @@ struct dw_hdmi_qp *dw_hdmi_qp_bind(struct 
platform_device *pdev,
        hdmi->bridge.vendor = "Synopsys";
        hdmi->bridge.product = "DW HDMI QP TX";
 
+       if (plat_data->supported_formats)
+               hdmi->bridge.supported_formats = plat_data->supported_formats;
+
+       if (plat_data->max_bpc)
+               hdmi->bridge.max_bpc = plat_data->max_bpc;
+
        hdmi->bridge.ddc = dw_hdmi_qp_i2c_adapter(hdmi);
        if (IS_ERR(hdmi->bridge.ddc))
                return ERR_CAST(hdmi->bridge.ddc);
diff --git a/include/drm/bridge/dw_hdmi_qp.h b/include/drm/bridge/dw_hdmi_qp.h
index 
76ecf31301997718604a05f70ce9eab8695e26b5..3f461f6b9bbfbf67934bf642452d3c6f9253c4f9
 100644
--- a/include/drm/bridge/dw_hdmi_qp.h
+++ b/include/drm/bridge/dw_hdmi_qp.h
@@ -25,6 +25,10 @@ struct dw_hdmi_qp_plat_data {
        int main_irq;
        int cec_irq;
        unsigned long ref_clk_rate;
+       /* Supported output formats: bitmask of @hdmi_colorspace */
+       unsigned int supported_formats;
+       /* Maximum bits per color channel: 8, 10 or 12 */
+       unsigned int max_bpc;
 };
 
 struct dw_hdmi_qp *dw_hdmi_qp_bind(struct platform_device *pdev,

-- 
2.50.1

Reply via email to