On MT8167, only CEA modes and anything using a clock below 148500 is
supported for HDMI. This change adds some checks to make sure the
video format is OK for MT8167.

Signed-off-by: Fabien Parent <fpar...@baylibre.com>
Signed-off-by: Neil Armstrong <narmstr...@baylibre.com>
---
 drivers/gpu/drm/mediatek/mtk_hdmi.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c 
b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 8ee55f9e2954..991e2e935b93 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -148,6 +148,8 @@ struct hdmi_audio_param {
 
 struct mtk_hdmi_conf {
        bool tz_disabled;
+       unsigned long max_mode_clock;
+       bool cea_modes_only;
 };
 
 struct mtk_hdmi {
@@ -1259,6 +1261,13 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector 
*conn,
                        return MODE_BAD;
        }
 
+       if (hdmi->conf->cea_modes_only && !drm_match_cea_mode(mode))
+               return MODE_BAD;
+
+       if (hdmi->conf->max_mode_clock &&
+           mode->clock > hdmi->conf->max_mode_clock)
+               return MODE_CLOCK_HIGH;
+
        if (mode->clock < 27000)
                return MODE_CLOCK_LOW;
        if (mode->clock > 297000)
@@ -1810,10 +1819,18 @@ static const struct mtk_hdmi_conf mtk_hdmi_conf_mt2701 
= {
        .tz_disabled = true,
 };
 
+static const struct mtk_hdmi_conf mtk_hdmi_conf_mt8167 = {
+       .max_mode_clock = 148500,
+       .cea_modes_only = true,
+};
+
 static const struct of_device_id mtk_drm_hdmi_of_ids[] = {
        { .compatible = "mediatek,mt2701-hdmi",
          .data = &mtk_hdmi_conf_mt2701,
        },
+       { .compatible = "mediatek,mt8167-hdmi",
+         .data = &mtk_hdmi_conf_mt8167,
+       },
        { .compatible = "mediatek,mt8173-hdmi",
        },
        {}
-- 
2.25.1

Reply via email to