Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/bridge: synopsys: dw-mipi-dsi: Add mode fixup support

Vendor drivers may need to fixup mode due to pixel clock tree limitation,
so introduce the ->mode_fixup() callcack to struct dw_mipi_dsi_plat_data
and call it at atomic check stage if available.

Signed-off-by: Liu Ying <victor.liu@nxp.com>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230821034008.3876938-5-victor.liu@nxp.com

authored by

Liu Ying and committed by
Robert Foss
5a67ec8c d5116fb2

+17
+14
drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
··· 573 573 struct drm_crtc_state *crtc_state, 574 574 struct drm_connector_state *conn_state) 575 575 { 576 + struct dw_mipi_dsi *dsi = bridge_to_dsi(bridge); 577 + const struct dw_mipi_dsi_plat_data *pdata = dsi->plat_data; 578 + bool ret; 579 + 576 580 bridge_state->input_bus_cfg.flags = 577 581 DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE; 582 + 583 + if (pdata->mode_fixup) { 584 + ret = pdata->mode_fixup(pdata->priv_data, &crtc_state->mode, 585 + &crtc_state->adjusted_mode); 586 + if (!ret) { 587 + DRM_DEBUG_DRIVER("failed to fixup mode " DRM_MODE_FMT "\n", 588 + DRM_MODE_ARG(&crtc_state->mode)); 589 + return -EINVAL; 590 + } 591 + } 578 592 579 593 return 0; 580 594 }
+3
include/drm/bridge/dw_mipi_dsi.h
··· 59 59 unsigned long mode_flags, 60 60 u32 lanes, u32 format); 61 61 62 + bool (*mode_fixup)(void *priv_data, const struct drm_display_mode *mode, 63 + struct drm_display_mode *adjusted_mode); 64 + 62 65 u32 *(*get_input_bus_fmts)(void *priv_data, 63 66 struct drm_bridge *bridge, 64 67 struct drm_bridge_state *bridge_state,