drm/mediatek: dsi: Add mode_valid callback to DSI bridge
authorShuijing Li <shuijing.li@mediatek.com>
Wed, 23 Aug 2023 09:20:47 +0000 (17:20 +0800)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Wed, 27 Sep 2023 22:53:54 +0000 (22:53 +0000)
Support IGT (Intel GPU Tools) in Mediatek DSI driver.
According to the description of MIPI Alliance Specification for D-PHY
Version 1.1, the maximum supported data rate is 1.5Gbps, so add mode_valid
callback to dsi bridge to filter out the data rate exceeding the
Specification.

Signed-off-by: Shuijing Li <shuijing.li@mediatek.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20230823092047.32258-1-shuijing.li@mediatek.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_dsi.c

index 49bfc1dd11ae8a93f001df9b5dab42650e186590..79861157066679f23f07a101513f0a01d0239f21 100644 (file)
@@ -808,6 +808,25 @@ static void mtk_dsi_bridge_atomic_post_disable(struct drm_bridge *bridge,
        mtk_dsi_poweroff(dsi);
 }
 
+static enum drm_mode_status
+mtk_dsi_bridge_mode_valid(struct drm_bridge *bridge,
+                         const struct drm_display_info *info,
+                         const struct drm_display_mode *mode)
+{
+       struct mtk_dsi *dsi = bridge_to_dsi(bridge);
+       u32 bpp;
+
+       if (dsi->format == MIPI_DSI_FMT_RGB565)
+               bpp = 16;
+       else
+               bpp = 24;
+
+       if (mode->clock * bpp / dsi->lanes > 1500000)
+               return MODE_CLOCK_HIGH;
+
+       return MODE_OK;
+}
+
 static const struct drm_bridge_funcs mtk_dsi_bridge_funcs = {
        .attach = mtk_dsi_bridge_attach,
        .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
@@ -817,6 +836,7 @@ static const struct drm_bridge_funcs mtk_dsi_bridge_funcs = {
        .atomic_pre_enable = mtk_dsi_bridge_atomic_pre_enable,
        .atomic_post_disable = mtk_dsi_bridge_atomic_post_disable,
        .atomic_reset = drm_atomic_helper_bridge_reset,
+       .mode_valid = mtk_dsi_bridge_mode_valid,
        .mode_set = mtk_dsi_bridge_mode_set,
 };