This patch series adds support for the ITE IT61620 MIPI DSI to HDMI bridge chip.
The IT61620 is an I2C-controlled bridge that receives MIPI DSI input and outputs HDMI signals. A single-port MIPI DSI input is converted to an HDMI 1.4 output. This series introduces: - A device tree binding YAML file describing the hardware - A new DRM bridge driver implementing the basic functionality Hotplug may be provided by the next bridge (typically hdmi-connector with hpd-gpios). If that bridge already implements OP_HPD / OP_DETECT, this driver leaves those ops to it and only receives hpd_notify(). Otherwise it owns connector status from the chip HPD pin. That pin also carries HDCP Ri pulses, so chip HPD IRQs are debounced before drm_bridge_hpd_notify(). Signed-off-by: Pet Weng <[email protected]> --- Changes in v10: - dt-bindings: no change since v9; keep Reviewed-by from Krzysztof - drm/bridge: dropped Reviewed-by from Dmitry due to functional changes 1. HDMI IRQ: test int_status1 bits, not the TX_REG_INT1 address 2. Use pm_runtime_get_if_in_use() in the threaded IRQ to avoid deadlocking with disable_irq() in runtime suspend 3. Update HDCP content-protection from work that takes connection_mutex (do not call the helper from IRQ / hdcp_work) 4. Serialize DDC abort on HDCP auth fail with ddc_lock 5. Clamp KSV FIFO reads; treat an empty FIFO as an error 6. Include the 8 M0 bytes in the HDCP SHA-1 input length 7. Write AVI infoframe after clearing the AVI packet, not VSIF 8. Write A0 pattern-generator registers through tx_regmap 9. Parse MIPI endpoint data-lanes / lane-polarities; attach DSI with the parsed lane count instead of a hard-coded 4 10. Implement OP_DETECT / OP_HPD when the next bridge does not: detect() and edid_read() resume the chip; hpd_enable() holds runtime PM; HPD IRQs are debounced; power-on W1Cs latched HPD_CHG before enable_irq() 11. hpd_notify() does not touch runtime PM when this driver owns OP_HPD 12. Use devm_pm_runtime_enable(); cancel HDCP/HPD work on remove and let devres unwind DSI, bridge and PM (no early mutex_destroy) 13. Switch to drm_atomic_commit / atomic_create_state 14. Use abs_diff() for the MIPI htotal delay; drop redundant pm_runtime_mark_last_busy(); log pre_enable resume failures - Link to v9: https://lore.kernel.org/r/[email protected] Changes in v9: - Fix commit message wrapping to follow kernel style - Run checkpatch.pl and address reported issues - Restore Reviewed-by from Krzysztof as the change is non-functional - Link to v8: https://lore.kernel.org/r/[email protected] Changes in v8: - dt-binding: 1. Clarify the hardware differences between IT6162 and IT61620 in the description (IT61620 is single-port and lacks an internal MCU). [Krzysztof] 2. Dropped Reviewed-by from Krzysztof due to description changes. - Call drm_atomic_helper_connector_hdmi_clear_audio_infoframe() in audio shutdown path [Dmitry] - Link to v7: https://lore.kernel.org/r/[email protected] Changes in v7: - The dt-bindings were previously reviewed by Krzysztof Kozlowski. - drm/bridge: [Dmitry] 1. drop redundant register access wrappers and use regmap APIs directly 2. use drm_dbg_kms() instead of drm_dbg() when printing display timing information 3. use drm_display_mode directly for video timing 4. add helper for writing 16-bit timing registers 5. simplify HDMI interrupt handling 6. add mono audio support 7. program audio parameters directly 8. inline audio infoframe disable logic - MAINTAINERS: squash to driver patch [Dmitry] - Link to v6: https://lore.kernel.org/r/[email protected] Changes in v6: - In patch 1 [Luca] 1. Fix a typo in the commit message. 2. Remove redundant assignment of bridge.funcs, which is already set by devm_drm_bridge_alloc(). - Link to v5: https://lore.kernel.org/r/[email protected] Changes in v5: - Fix dt_binding_check errors by adding missing unevaluatedProperties constraints for port and endpoint nodes in the device tree binding. [Rob] - Link to v4: https://lore.kernel.org/r/[email protected] Changes in v4: - In patch 1 [Krzysztof] 1. Remove redundant "description" fields from interrupts and regulators 2. Drop pinctrl-names and pinctrl-0; driver does not require them 3. Remove port/endpoint properties already covered by video interfaces schema 4. Fix example indentation to 4 spaces for readability - In patch 2 [Jani] 1. Use connector->display_info from DRM helper instead of parsing EDID manually - In patch 2 [Dmitry] 1. Remove redundant powered check in reg access 2. Use TMDS character rate instead of pixel clock for N/CTS 3. Use consistent lowercase naming for tmds. 4. Use test_bit() instead of custom bit-test helper 5. Use tmds_char_rate_valid instead of custom mode_valid 6. Use custom EDID read instead of DDC bus for segment handling 7. Drop redundant atomic feature check 8. Pass flags directly to drm_bridge_attach() 9. Check DRM_BRIDGE_ATTACH_NO_CONNECTOR flag before drm_bridge_attach() 10. Short-circuit HPD update if connector status unchanged 11. Remove unnecessary NULL check for connector state 12. Rename cached_edid to edid since it's no longer cached 13. Remove redundant sample rate checks; rely on hdmi-codec validation 14. Remove unsupported 18-bit audio sample size; rely on hdmi-codec 15. Remove unnecessary fmt switch; rely on hdmi-codec defaults 16. Check and propagate errors from it61620_audio_update_hw_params instead of ignoring them - In patch 3 [Krzysztof] 1. Remove unnecessary T: field pointing to git; subsystem already defines it - Link to v3: https://lore.kernel.org/r/[email protected] Changes in v3: - Wrapped description lines to comply with 80-character line length limit in patch 1. [Rob] - Renamed node from "it61620@58" to "bridge@58" in patch 1. [Rob] - Add port@2 for I2S audio input in patch 1. [Dmitry] - Updated the Kconfig dependency from CRYPTO and CRYPTO_HASH to CRYPTO_LIB_SHA1 in patch 2. [Eric] - In patch 2 [Dmitry] 1. Audio and InfoFrame - Rename audfmt to i2s_input_format for clarity. - Remove unused infoframe[HDMI_INFOFRAME_SIZE(AUDIO)]. 2. Platform data and structure - Drop platform data usage; migrate members into struct it61620 3. Code organization - Reorder functions to avoid the need for forward declarations. - Add static inline to small helper functions (e.g. bridge_to_it61620()). 4. HDCP handling - Make HDCP enable/disable conditional on conn_state->content_protection. - Report authentication result using drm_hdcp_update_content_protection(). 5. Error handling - Replace manual error path with dev_err_probe(). 6. Power management - Inline suspend/resume callbacks. - Use DEFINE_RUNTIME_DEV_PM_OPS() instead of explicit struct definition. 7. Bridge callbacks - Drop empty bridge_detach(). - Inline it61620_bridge_mode_valid(). 8. EDID handling - Remove unnecessary cached EDID duplication. 9. Mode set and pixel clock - Move mode handling to atomic_enable(). - Keep only pixelclock for future N/CTS audio calculations. 10. Logging - Replace noisy drm_err() calls with drm_dbg(). 11. InfoFrame support - Add support for SPD and Vendor InfoFrames. - Link to v2: https://lore.kernel.org/r/[email protected] Changes in v2: - Call the sha1() library function instead of using the crypto_shash "sha1" in patch 2. - Rewrite it61620_hdmi_ddc_wait() with readx_poll_timeout() in patch 2. [Pin-yen] - Rewrite it61620_hdmi_hdcp_wait_ksv_list() with readx_poll_timeout() in patch 2. - Replace interrupts-extended with interrupts in patch 1. [Rob] - Replace dsi-lanes with the standard property data-lanes from the graph binding. [Rob] - Replace "#/$defs/port-base" with "#/properties/port" in patch 1. [Rob] - Drop unused labels and "hdmi" for the node name. [Rob] - Drop status in patch 1. [Rob] - Link to v1: https://lore.kernel.org/r/[email protected] --- Pet Weng (2): dt-bindings: display: Add ITE IT61620 MIPI DSI to HDMI bridge drm/bridge: Add ITE IT61620 MIPI DSI to HDMI bridge driver Documentation/devicetree/bindings/display/bridge/ite,it61620.yaml | 152 ++++++++ MAINTAINERS | 7 + drivers/gpu/drm/bridge/Kconfig | 18 + drivers/gpu/drm/bridge/Makefile | 1 + drivers/gpu/drm/bridge/ite-it61620.c | 2763 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 2941 insertions(+) --- base-commit: 7d66a68c6f216b78ea22ce8a4c7f8d456c76e8ba change-id: 20250714-it61620-0714-ab4ab4ceff29 Best regards, -- Pet Weng <[email protected]>
