From 38961a5ecba35bad75d616a6c5a85804889887c5 Mon Sep 17 00:00:00 2001 From: sai madhu Date: Mon, 20 Apr 2026 06:45:44 +0000 Subject: [PATCH 1/5] drm/mediatek: hdmi: Convert DRM_ERROR() to drm_err() The DRM_ERROR() macro is deprecated in favor of drm_err() which provides device-specific logging. Replace DRM_ERROR() with drm_err() in the Mediatek HDMI bridge driver and pass the drm_device pointer via bridge->dev. No functional change intended. Signed-off-by: sai madhu Reviewed-by: CK Hu Link: https://patchwork.kernel.org/project/dri-devel/patch/20260420064544.266478-1-suryasaimadhu369@gmail.com/ Signed-off-by: Chun-Kuang Hu --- drivers/gpu/drm/mediatek/mtk_hdmi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index 1ea259854780..4ddcdbf7bc8c 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -981,8 +981,8 @@ static int mtk_hdmi_bridge_attach(struct drm_bridge *bridge, int ret; if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) { - DRM_ERROR("%s: The flag DRM_BRIDGE_ATTACH_NO_CONNECTOR must be supplied\n", - __func__); + drm_err(bridge->dev, + "DRM_BRIDGE_ATTACH_NO_CONNECTOR must be supplied\n"); return -EINVAL; } From d78733e9508637d556e2d9ca629ab2dfad0276d5 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Mon, 30 Mar 2026 17:23:57 -0700 Subject: [PATCH 2/5] drm/mediatek: Simplify mtk_crtc allocation Use a flexible array member to combine allocations. Signed-off-by: Rosen Penev Reviewed-by: CK Hu Link: https://patchwork.kernel.org/project/dri-devel/patch/20260331002357.7995-1-rosenp@gmail.com/ Signed-off-by: Chun-Kuang Hu --- drivers/gpu/drm/mediatek/mtk_crtc.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_crtc.c b/drivers/gpu/drm/mediatek/mtk_crtc.c index fcb16f3f7b23..cd05e18c87da 100644 --- a/drivers/gpu/drm/mediatek/mtk_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_crtc.c @@ -62,7 +62,6 @@ struct mtk_crtc { struct device *dma_dev; struct mtk_mutex *mutex; unsigned int ddp_comp_nr; - struct mtk_ddp_comp **ddp_comp; unsigned int num_conn_routes; const struct mtk_drm_route *conn_routes; @@ -71,6 +70,8 @@ struct mtk_crtc { bool config_updating; /* lock for config_updating to cmd buffer */ spinlock_t config_lock; + + struct mtk_ddp_comp *ddp_comp[]; }; struct mtk_crtc_state { @@ -1048,18 +1049,14 @@ int mtk_crtc_create(struct drm_device *drm_dev, const unsigned int *path, } } - mtk_crtc = devm_kzalloc(dev, sizeof(*mtk_crtc), GFP_KERNEL); + mtk_crtc = devm_kzalloc(dev, + struct_size(mtk_crtc, ddp_comp, path_len + (conn_routes ? 1 : 0)), + GFP_KERNEL); if (!mtk_crtc) return -ENOMEM; - mtk_crtc->mmsys_dev = priv->mmsys_dev; mtk_crtc->ddp_comp_nr = path_len; - mtk_crtc->ddp_comp = devm_kcalloc(dev, - mtk_crtc->ddp_comp_nr + (conn_routes ? 1 : 0), - sizeof(*mtk_crtc->ddp_comp), - GFP_KERNEL); - if (!mtk_crtc->ddp_comp) - return -ENOMEM; + mtk_crtc->mmsys_dev = priv->mmsys_dev; mtk_crtc->mutex = mtk_mutex_get(priv->mutex_dev); if (IS_ERR(mtk_crtc->mutex)) { From 13703c8ee79be7f5237358053262890de0fb1e74 Mon Sep 17 00:00:00 2001 From: Shivam Kalra Date: Fri, 3 Apr 2026 17:30:26 +0530 Subject: [PATCH 3/5] drm/mediatek: mtk_dpi: Open-code drm_simple_encoder_init() The helper drm_simple_encoder_init() is a trivial wrapper around drm_encoder_init() that only provides a static drm_encoder_funcs with .destroy set to drm_encoder_cleanup(). Open-code the initialization with a driver-specific instance of drm_encoder_funcs and remove the dependency on drm_simple_kms_helper. Suggested-by: Thomas Zimmermann Signed-off-by: Shivam Kalra Reviewed-by: Thomas Zimmermann Reviewed-by: CK Hu Link: https://patchwork.kernel.org/project/dri-devel/patch/20260403-drm-mediatek-opencode-encoder-init-v1-1-7be86241b876@zohomail.in/ Signed-off-by: Chun-Kuang Hu --- drivers/gpu/drm/mediatek/mtk_dpi.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c index 53360b5d12ba..5b83ca6aecb2 100644 --- a/drivers/gpu/drm/mediatek/mtk_dpi.c +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c @@ -25,8 +25,8 @@ #include #include #include +#include #include -#include #include "mtk_ddp_comp.h" #include "mtk_disp_drv.h" @@ -993,6 +993,10 @@ static const struct drm_bridge_funcs mtk_dpi_bridge_funcs = { .debugfs_init = mtk_dpi_debugfs_init, }; +static const struct drm_encoder_funcs mtk_dpi_encoder_funcs = { + .destroy = drm_encoder_cleanup, +}; + void mtk_dpi_start(struct device *dev) { struct mtk_dpi *dpi = dev_get_drvdata(dev); @@ -1026,8 +1030,8 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) int ret; dpi->mmsys_dev = priv->mmsys_dev; - ret = drm_simple_encoder_init(drm_dev, &dpi->encoder, - DRM_MODE_ENCODER_TMDS); + ret = drm_encoder_init(drm_dev, &dpi->encoder, &mtk_dpi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); if (ret) { dev_err(dev, "Failed to initialize decoder: %d\n", ret); return ret; From c319b83e152181cc669a761695a9475510f5d3e5 Mon Sep 17 00:00:00 2001 From: Abhishek Rajput Date: Mon, 20 Apr 2026 10:50:08 +0530 Subject: [PATCH 4/5] drm/mediatek: Convert legacy DRM logging to drm_* helpers in mtk_dsi.c Replace DRM_INFO(), DRM_WARN() and DRM_ERROR() calls in drivers/gpu/drm/mediatek/mtk_dsi.c with the corresponding drm_info(), drm_warn() and drm_err() helpers. The drm_*() logging helpers take a struct drm_device * argument, allowing the DRM core to prefix log messages with the correct device name and instance. This is required to correctly distinguish log messages on systems with multiple GPUs. This change aligns the radeon driver with the DRM TODO item: "Convert logging to drm_* functions with drm_device parameter". Signed-off-by: Abhishek Rajput Reviewed-by: CK Hu Link: https://patchwork.kernel.org/project/dri-devel/patch/20260420052008.5417-1-abhiraj21put@gmail.com/ Signed-off-by: Chun-Kuang Hu --- drivers/gpu/drm/mediatek/mtk_dsi.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 5aa71fcdcfab..2934dc2d841c 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -511,6 +511,7 @@ static void mtk_dsi_config_vdo_timing_per_line_lp(struct mtk_dsi *dsi) u32 delta; struct mtk_phy_timing *timing = &dsi->phy_timing; struct videomode *vm = &dsi->vm; + struct drm_device *drm = dsi->bridge.dev; if (dsi->format == MIPI_DSI_FMT_RGB565) dsi_tmp_buf_bpp = 2; @@ -544,7 +545,7 @@ static void mtk_dsi_config_vdo_timing_per_line_lp(struct mtk_dsi *dsi) horizontal_backporch_byte / horizontal_front_back_byte; } else { - DRM_WARN("HFP + HBP less than d-phy, FPS will under 60Hz\n"); + drm_warn(drm, "HFP + HBP less than d-phy, FPS will under 60Hz\n"); } if ((dsi->mode_flags & MIPI_DSI_HS_PKT_END_ALIGNED) && @@ -624,12 +625,13 @@ static s32 mtk_dsi_wait_for_irq_done(struct mtk_dsi *dsi, u32 irq_flag, { s32 ret = 0; unsigned long jiffies = msecs_to_jiffies(timeout); + struct drm_device *drm = dsi->bridge.dev; ret = wait_event_interruptible_timeout(dsi->irq_wait_queue, dsi->irq_data & irq_flag, jiffies); if (ret == 0) { - DRM_WARN("Wait DSI IRQ(0x%08x) Timeout\n", irq_flag); + drm_warn(drm, "Wait DSI IRQ(0x%08x) Timeout\n", irq_flag); mtk_dsi_enable(dsi); mtk_dsi_reset_engine(dsi); @@ -664,9 +666,10 @@ static s32 mtk_dsi_switch_to_cmd_mode(struct mtk_dsi *dsi, u8 irq_flag, u32 t) { mtk_dsi_irq_data_clear(dsi, irq_flag); mtk_dsi_set_cmd_mode(dsi); + struct drm_device *drm = dsi->bridge.dev; if (!mtk_dsi_wait_for_irq_done(dsi, irq_flag, t)) { - DRM_ERROR("failed to switch cmd mode\n"); + drm_err(drm, "failed to switch cmd mode\n"); return -ETIME; } else { return 0; @@ -849,11 +852,12 @@ static void mtk_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge, struct drm_atomic_state *state) { struct mtk_dsi *dsi = bridge_to_dsi(bridge); + struct drm_device *drm = bridge->dev; int ret; ret = mtk_dsi_poweron(dsi); if (ret < 0) - DRM_ERROR("failed to power on dsi\n"); + drm_err(drm, "failed to power on dsi\n"); } static void mtk_dsi_bridge_atomic_post_disable(struct drm_bridge *bridge, @@ -916,7 +920,7 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = drm_simple_encoder_init(drm, &dsi->encoder, DRM_MODE_ENCODER_DSI); if (ret) { - DRM_ERROR("Failed to encoder init to drm\n"); + drm_err(drm, "Failed to encoder init to drm\n"); return ret; } @@ -932,7 +936,7 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) dsi->connector = drm_bridge_connector_init(drm, &dsi->encoder); if (IS_ERR(dsi->connector)) { - DRM_ERROR("Unable to create bridge connector\n"); + drm_err(drm, "Unable to create bridge connector\n"); ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } @@ -985,6 +989,7 @@ static int mtk_dsi_host_attach(struct mipi_dsi_host *host, { struct mtk_dsi *dsi = host_to_dsi(host); struct device *dev = host->dev; + struct drm_device *drm = dsi->bridge.dev; int ret; dsi->lanes = device->lanes; @@ -1006,7 +1011,7 @@ static int mtk_dsi_host_attach(struct mipi_dsi_host *host, ret = component_add(host->dev, &mtk_dsi_component_ops); if (ret) { - DRM_ERROR("failed to add dsi_host component: %d\n", ret); + drm_err(drm, "failed to add dsi_host component: %d\n", ret); drm_bridge_remove(&dsi->bridge); return ret; } @@ -1028,11 +1033,12 @@ static void mtk_dsi_wait_for_idle(struct mtk_dsi *dsi) { int ret; u32 val; + struct drm_device *drm = dsi->bridge.dev; ret = readl_poll_timeout(dsi->regs + DSI_INTSTA, val, !(val & DSI_BUSY), 4, 2000000); if (ret) { - DRM_WARN("polling dsi wait not busy timeout!\n"); + drm_warn(drm, "polling dsi wait not busy timeout!\n"); mtk_dsi_enable(dsi); mtk_dsi_reset_engine(dsi); @@ -1120,6 +1126,7 @@ static ssize_t mtk_dsi_host_transfer(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg) { struct mtk_dsi *dsi = host_to_dsi(host); + struct drm_device *drm = dsi->bridge.dev; ssize_t recv_cnt; u8 read_data[16]; void *src_addr; @@ -1150,7 +1157,7 @@ static ssize_t mtk_dsi_host_transfer(struct mipi_dsi_host *host, } if (!msg->rx_buf) { - DRM_ERROR("dsi receive buffer size may be NULL\n"); + drm_err(drm, "dsi receive buffer size may be NULL\n"); ret = -EINVAL; goto restore_dsi_mode; } @@ -1174,7 +1181,7 @@ static ssize_t mtk_dsi_host_transfer(struct mipi_dsi_host *host, if (recv_cnt) memcpy(msg->rx_buf, src_addr, recv_cnt); - DRM_INFO("dsi get %zd byte data from the panel address(0x%x)\n", + drm_info(drm, "dsi get %zd byte data from the panel address(0x%x)\n", recv_cnt, *((u8 *)(msg->tx_buf))); restore_dsi_mode: From 6428eaf0c1f39815b08d57054895c1934d5782f3 Mon Sep 17 00:00:00 2001 From: Luca Leonardo Scorcia Date: Tue, 5 May 2026 22:45:00 +0100 Subject: [PATCH 5/5] drm/mediatek: dsi: Add compatible for mt8167-dsi The mt8167 DSI controller is fully compatible with the one found in mt2701. Unfortunately the device tree has a dedicated compatible for mt8167 since 2022 and it cannot be changed with a fallback nor removed at this point. The only way to get the device to work is to add the compatible to the driver. Signed-off-by: Luca Leonardo Scorcia Reviewed-by: AngeloGioacchino Del Regno Reviewed-by: CK Hu Link: https://patchwork.kernel.org/project/dri-devel/patch/20260505214541.333657-3-l.scorcia@gmail.com/ Signed-off-by: Chun-Kuang Hu --- drivers/gpu/drm/mediatek/mtk_dsi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 2934dc2d841c..2257966bbaa9 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -1312,6 +1312,7 @@ static const struct mtk_dsi_driver_data mt8188_dsi_driver_data = { static const struct of_device_id mtk_dsi_of_match[] = { { .compatible = "mediatek,mt2701-dsi", .data = &mt2701_dsi_driver_data }, + { .compatible = "mediatek,mt8167-dsi", .data = &mt2701_dsi_driver_data }, { .compatible = "mediatek,mt8173-dsi", .data = &mt8173_dsi_driver_data }, { .compatible = "mediatek,mt8183-dsi", .data = &mt8183_dsi_driver_data }, { .compatible = "mediatek,mt8186-dsi", .data = &mt8186_dsi_driver_data },