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]>

Reply via email to