[PATCH v2 00/20] Clean and update tilcdc driver to support DRM_BRIDGE_ATTACH_NO_CONNECTOR

Kory Maincent (TI.com)
2025-12-11T16:39:43Z

The starting point for this work was adding support for the HDMI cape:
https://www.seeedstudio.com/Seeed-Studio-BeagleBone-Green-HDMI-Cape.html
This will be sent in a later series.

Initially, Miguel proposed modifying the ite-it66121 bridge to support
the legacy behavior without the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag:
https://lore.kernel.org/lkml/20250909-it66121-fix-v1-1-bc79ca83df17@bootlin.com/
This patch was NAK'd as we don't want to add more legacy code. Maxime
requested that the tilcdc driver be updated to use
DRM_BRIDGE_ATTACH_NO_CONNECTOR instead.

While working on this update, I discovered that the tilcdc driver
contained significant amounts of legacy code that needed cleaning.
Since this driver was developed alongside the tda998x driver for
several AM335x boards, the tda998x driver also required cleanup and
support for the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag.

A new tilcdc_panel_legacy driver replaces the old tilcdc_panel driver.
It modifies the devicetree at boot time to properly bind the tilcdc driver
with the standard panel-simple driver.

This series is based on the tilcdc fix sent to mainline:
https://lore.kernel.org/lkml/20251125090546.137193-1-kory.maincent@bootlin.com/

This series has been tested on:
- BeagleBone Black (tilcdc + tda998x bridge)
- BeagleBone Black with LCD cape (tilcdc + ti,tilcdc,panel binding)
- BeagleBone Green Eco with HDMI cape (tilcdc + it66121 bridge)

The following mainline devicetrees still use ti,tilcdc,panel binding.
I believe this series maintains compatibility, but I cannot test without
hardware:
- da850-evm.dts
- am335x-guardian.dts
- am335x-pdu001.dts
- am335x-pepper.dts
- am335x-sbc-t335.dts
- am335x-sl50.dts

Patches 1-2: Convert tilcdc binding to YAML and set the ti,tilcdc,panel
sub-binding as legacy.
Patches 3-6: Replace tilcdc_panel driver to the new tilcdc_panel_legacy
driver which is tweaking the devicetree at boot time.
Patches 7-15: Clean up tilcdc driver.
Patches 16-18: Clean up tda998x driver.
Patch 19: Add DRM_BRIDGE_ATTACH_NO_CONNECTOR support for tda998x driver.
Patch 20: Add DRM_BRIDGE_ATTACH_NO_CONNECTOR support for tilcdc driver.

Changes in v2:
- Remove patch 2 that add fifo-threshold property. Use FIFO threshold
value from SoC id instead.
- Remove the part that breaks DTB compatibility.
- Add tilcdc_panel_legacy to modify the devicetree at boot time to properly
bind the tilcdc driver with the standard panel-simple driver.
- Link to v1: https://lore.kernel.org/r/20251126-feature_tilcdc-v1-0-49b9ef2e3aa0@bootlin.com

Signed-off-by: Kory Maincent (TI.com) <kory.maincent@bootlin.com>
---
Kory Maincent (TI.com) (20):
dt-bindings: display: tilcdc: Convert to DT schema
dt-bindings: display: tilcdc: Mark panel binding as deprecated
drm/tilcdc: Remove simulate_vesa_sync flag
drm/tilcdc: Add support for DRM bus flags and simplify panel config
drm/tilcdc: Convert legacy panel binding via DT overlay at boot time
drm/tilcdc: Remove tilcdc panel driver
drm/tilcdc: Remove component framework support
drm/tilcdc: Remove tilcdc_panel_info structure
drm/tilcdc: Remove redundant #endif/#ifdef in debugfs code
drm/tilcdc: Remove unused encoder and connector tracking arrays
drm/tilcdc: Rename external_encoder and external_connector to encoder and connector
drm/tilcdc: Rename tilcdc_external to tilcdc_encoder
drm/tilcdc: Remove the useless module list support
drm/tilcdc: Modernize driver initialization and cleanup paths
drm/tilcdc: Remove the use of drm_device private_data
drm/bridge: tda998x: Remove component support
drm/bridge: tda998x: Move tda998x_create/destroy into probe and remove
drm/bridge: tda998x: Remove useless tda998x_connector_destroy wrapper
drm/bridge: tda998x: Add support for DRM_BRIDGE_ATTACH_NO_CONNECTOR
drm/tilcdc: Add support for DRM_BRIDGE_ATTACH_NO_CONNECTOR

.../devicetree/bindings/display/tilcdc/panel.txt | 1 +
.../devicetree/bindings/display/tilcdc/tilcdc.txt | 82 ----
.../devicetree/bindings/display/tilcdc/tilcdc.yaml | 96 +++++
drivers/gpu/drm/bridge/tda998x_drv.c | 251 +++++------
drivers/gpu/drm/tilcdc/Kconfig | 14 +
drivers/gpu/drm/tilcdc/Makefile | 5 +-
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 117 ++---
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 479 ++++++++-------------
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 88 +---
drivers/gpu/drm/tilcdc/tilcdc_encoder.c | 93 ++++
.../tilcdc/{tilcdc_external.h => tilcdc_encoder.h} | 5 +-
drivers/gpu/drm/tilcdc/tilcdc_external.c | 179 --------
drivers/gpu/drm/tilcdc/tilcdc_panel.c | 408 ------------------
drivers/gpu/drm/tilcdc/tilcdc_panel.h | 15 -
drivers/gpu/drm/tilcdc/tilcdc_panel_legacy.c | 159 +++++++
drivers/gpu/drm/tilcdc/tilcdc_panel_legacy.dtso | 44 ++
drivers/gpu/drm/tilcdc/tilcdc_plane.c | 2 +-
drivers/gpu/drm/tilcdc/tilcdc_regs.h | 8 +-
18 files changed, 752 insertions(+), 1294 deletions(-)
---
base-commit: f1c12d4576a46c82d3fdace1343e040daa0561f2
change-id: 20251014-feature_tilcdc-79cd49e67bf9

Best regards,
--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering