diff --git a/drivers/gpu/drm/mediatek/mtk_crtc.c b/drivers/gpu/drm/mediatek/mtk_crtc.c index caa02a708d0a..8e552cdc3b53 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)) { diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c index cc6d74ce8b5e..bb4b7e6f1e29 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; diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 46cf4b043f12..eb325e68aa59 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_commit *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; } @@ -984,6 +988,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; @@ -1005,7 +1010,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; } @@ -1027,11 +1032,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); @@ -1119,6 +1125,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; @@ -1149,7 +1156,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; } @@ -1173,7 +1180,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: @@ -1304,6 +1311,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 }, diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index 17b10de5ff60..38a7c7953874 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; }