[PATCH v2 00/15] Add support for MT8195/88 DPI, HDMIv2 and DDCv2

AngeloGioacchino Del Regno
2024-12-05T11:45:37Z

Changes in v2:
- Merged series "Add support for MT8195/8188 and Pattern Generator"
and "drm/mediatek: Add support for HDMIv2 and DDCv2 IPs" in one
as they are directly related, as requested by CK Hu
- More commonization: moved some audio functions to mtk_hdmi_common
- Fixed a bug in DDCv2 driver to allow sending a message with len=1
- Renamed some functions in HDMIv2 to consistently use the prefix
mtk_hdmi_v2_ across the driver
- Added .mode_valid() callback to HDMIv2
- Added .atomic_check() callback to HDMIv2
- Reordered drm_bridge_funcs in HDMIv2 driver
- Rewritten .edid_read() callback in HDMIv2 to move checking audio
availability to bridge_pre_enable() stage, and to stop using the
drm_edid_read_ddc() in favor of drm_edid_read()
- Added support for API provided HDMI Helpers
- Added .tmds_char_rate_valid() callback to HDMIv2 for HDMI helpers
- Added .hdmi_{read,write}_infoframe() callback to HDMIv2 for helpers
- Added support for Vendor infoframes in HDMIv2
- Added missing audio-dai-cells to HDMIv2 binding to fix check error
- Added more information to the HDMIv2 binding for clocks and PHY
- Added some comments to the HDMIv2 code to clarify why the controller
is preconfigured in bridge_pre_enable() instead of bridge_enable()
- Added a mention of the differences in HPD between v1 and v2 to the
commit introducing the v2 driver (v2 is not using CEC for HPD)
- ...and tested again on HW! :-)

This series adds support for the HDMI-TX v2 Encoder and DDCv2, and for
the direct connection DPI as found in MT8195, MT8188 and their variants.

Tested on Genio 700 EVK:
- ABIST ON: ok, pattern generated internally from HDMI is shown on
HDMI screen at the correct resolution;
- ABIST OFF + DPI Pattern Generator ON: ok, pattern coming from DPI is
shown on HDMI screen at the correct resolution;
- Can negotiate up to 4k60

and on MT8395 Radxa NIO 12L:
- ABIST ON: ok, pattern generated internally from HDMI is shown on
HDMI screen at the correct resolution;
- ABIST OFF + DPI Pattern Generator ON: ok, pattern coming from DPI is
shown on HDMI screen at the correct resolution;
- Dual screen usecase validated (DSI + HDMI 3840x2160p 60Hz)
- Can negotiate up to 4k60

Please note that this submission does *not* include support for HDCP
nor for CECv2, as I want this to be upstream before implementing
additional features which are not strictly required for simple
HDMI output.

Bonus in this series is the addition of support for the Pattern Generator
found in the DPI HW: since I needed this for debugging during development,
I had to code in the actual support bits and it looked like a waste of
time to just remove it.
I instead decided to clean it up and upstream it, as this will anyway come
handy for multiple things, of which the most important (imo) are:
- Adding support for new SoCs in the future will be less time consuming
as this driver already has the pattern generator in;
- CI Testing might be able to make use of this to validate that the
data that comes out is not garbled (so, to help testing display
support in an automated manner).

AngeloGioacchino Del Regno (14):
dt-bindings: display: mediatek: dpi: Add MT8195 and MT8188 compat
drm/mediatek: mtk_dpi: Add support for Pattern Generator in debugfs
drm/mediatek: mtk_dpi: Use an array for pixclk factor calculation
drm/mediatek: mtk_dpi: Move pixel clock setting flow to function
drm/mediatek: mtk_dpi: Add checks for reg_h_fre_con existence
drm/mediatek: Add support for MT8195 Digital Parallel Interface
dt-bindings: display: mediatek: Add binding for MT8195 HDMI-TX v2
drm/mediatek: mtk_cec: Switch to register as module_platform_driver
drm/mediatek: mtk_hdmi_ddc: Switch to register as
module_platform_driver
drm/mediatek: mtk_hdmi: Fix typo for aud_sampe_size member
drm/mediatek: mtk_hdmi: Split driver and add common probe function
drm/mediatek: mtk_hdmi_common: Assign DDC adapter pointer to bridge
drm/mediatek: mtk_hdmi_common: Add OP_HDMI, vendor and product strings
drm/mediatek: Introduce HDMI/DDC v2 for MT8195/MT8188

Guillaume Ranquet (1):
drm/mediatek: hdmi: Use regmap instead of iomem for main registers

.../display/mediatek/mediatek,dpi.yaml | 5 +
.../mediatek/mediatek,mt8195-hdmi.yaml | 154 ++
drivers/gpu/drm/mediatek/Kconfig | 19 +-
drivers/gpu/drm/mediatek/Makefile | 5 +
drivers/gpu/drm/mediatek/mtk_cec.c | 5 +-
drivers/gpu/drm/mediatek/mtk_dpi.c | 311 +++-
drivers/gpu/drm/mediatek/mtk_dpi_regs.h | 10 +
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +
drivers/gpu/drm/mediatek/mtk_hdmi.c | 896 ++--------
drivers/gpu/drm/mediatek/mtk_hdmi.h | 14 -
drivers/gpu/drm/mediatek/mtk_hdmi_common.c | 438 +++++
drivers/gpu/drm/mediatek/mtk_hdmi_common.h | 204 +++
drivers/gpu/drm/mediatek/mtk_hdmi_ddc.c | 4 +-
drivers/gpu/drm/mediatek/mtk_hdmi_ddc_v2.c | 403 +++++
drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h | 263 +++
drivers/gpu/drm/mediatek/mtk_hdmi_v2.c | 1488 +++++++++++++++++
16 files changed, 3384 insertions(+), 837 deletions(-)
create mode 100644 Documentation/devicetree/bindings/display/mediatek/mediatek,mt8195-hdmi.yaml
delete mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi.h
create mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi_common.c
create mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi_common.h
create mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi_ddc_v2.c
create mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi_regs_v2.h
create mode 100644 drivers/gpu/drm/mediatek/mtk_hdmi_v2.c

--
2.47.0