2026年6月3日

IT6616 Linux V4L2 driver


在 Linux 嵌入式系統中,IT6616一款由 ITE 聯陽半導體 (ITE) 推出的 HDMI 1.4 轉 MIPI CSI-2/DSI 的橋接晶片 (Bridge Chip)。在視訊輸入(HDMI-IN轉MIPI捕獲)的應用場景下,它通常被納入 Linux V4L2 (Video for Linux 2) 子系統中,作為一個 v4l2_subdev(子設備)驅動來實現。 [1, 2, 3]
以下是關於 IT6616 V4L2 驅動的架構、源碼定位、核心功能以及在主流平台(如 Rockchip 瑞芯微)上的配置指南:
驅動源碼架構與定位
在系統拓撲中,IT6616 通過 I2C 總線 接收主控端的控制信號(用於初始化、解析度偵測和 EDID 設定),並將輸入的 HDMI 視訊訊號轉換為多路 MIPI CSI-2 數據流 餵給 SoC 的 CSI 接收器。 [1, 2, 3]
  • 內核原始碼路徑:通常位於內核的 drivers/media/i2c/it6616.c
  • 相容性與維護者:各大 SoC 晶片廠(例如 Rockchip 瑞芯微kernel-5.10 / kernel-6.1 分支)皆已將該晶片標準整合進其 BSP 軟體包中。 [1, 2]

V4L2 驅動實現的核心功能 [1]
一個標準的 IT6616 V4L2 子設備驅動會實現以下核心 API 回調:
  1. 動態解析度偵測 (v4l2_subdev_video_ops)
    • 實現 query_dv_timingsg_dv_timings
    • 當前端 HDMI 信號源的解析度改變(例如從 1080p60 變成 720p),驅動會通過中斷(IRQ)獲取晶片內部的狀態更新,並將硬體 Timing(H-blank, V-blank, Pixel Clock 等)回報給 V4L2 核心。 [1]
  2. 格式與色彩空間轉換 (v4l2_subdev_pad_ops)
    • IT6616 支援 RGB 與 YUV444/422/420 之間的色彩空間轉換 (CSC)。
    • 驅動需實作 get_fmtset_fmt 來設定 MIPI Pad 端的輸出格式(如 MEDIA_BUS_FMT_UYVY8_2X8MEDIA_BUS_FMT_YUYV8_2X8)。 [1, 2, 3, 4]
  3. HDMI CEC (消費性電子控制) 整合
    • IT6616 內置硬體 CEC 控制器。
    • 高階驅動通常會調用內核的 cec_allocate_adapter 註冊一個 CEC 接口,以便上層應用能直接發送遙控指令。 [1, 2, 3]

設備樹 (Device Tree / DTS) 配置範例
要在系統中啟用 IT6616,必須在 DTS 中正確描述 I2C 控制節點以及 MIPI CSI 連接拓撲(使用 Linux 內核標準的 port 節點)。
以下以 Rockchip (如 RK3588) 平台常見的配置為例:
dts
&i2c1 {
    status = "okay";
    
    it6616: it6616@5c {
        compatible = "ite,it6616";
        reg = <0x5c>; /* I2C 設備位址 */
        
        /* 電源與復位腳位 */
        pinctrl-names = "default";
        pinctrl-0 = <&it6616_gpios>;
        reset-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
        pwr-gpios = <&gpio1 RK_PC3 GPIO_ACTIVE_HIGH>;
        
        /* 中斷腳位:用於監聽 HDMI 熱插拔(HPD)與解析度變更 */
        interrupt-parent = <&gpio1>;
        interrupts = <RK_PD0 IRQ_TYPE_LEVEL_LOW>;
        
        /* 視訊輸出埠:連接到 SoC 的 MIPI CSI 接收器 */
        ports {
            #address-cells = <1>;
            #size-cells = <0>;
            
            it6616_out: port@0 {
                reg = <0>;
                it6616_out_ep: endpoint {
                    remote-endpoint = <&mipi_csi2_in_ep>;
                    data-lanes = <1 2 3 4>; /* 依硬體使用 1/2/4 通道 */
                }
            };
        };
    };
};
請謹慎使用程式碼。

常見調試方法與報錯解決
在調試 IT6616 驅動時,工程師經常會藉由以下 V4L2 工具進行鏈路檢查:
  • 檢查媒體拓撲結構 (Media Controller)
    使用 media-ctl 檢查拓撲,確保 IT6616 子設備已正確綁定到 SoC 的 CSI-2 接收器與 ISP 上:
    bash
    media-ctl -p -d /dev/media0
    
    請謹慎使用程式碼。
    [1, 2, 3, 4]
  • 查詢 HDMI 輸入狀態
    使用 v4l2-ctl 檢測是否有合法的 HDMI 信號輸入:
    bash
    v4l2-ctl -d /dev/v4l-subdev0 --query-dv-timings
    
    請謹慎使用程式碼。
    [1, 2]
  • 綠屏或無圖像排除 (常見於 GStreamer 管道配置錯誤)
    如果在啟動 GStreamer 時遇到畫面全綠或報錯:
    1. 請先確認 v4l2-ctl --get-fmt-video 的 Pixel Format 是否與您的 GStreamer 管道相符。
    2. 例如:若硬體輸出 UYVY,但管線設成 YUY2 則會失敗。應校正為:
      bash
      gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1280,height=720 ! videoconvert ! ...
      
      請謹慎使用程式碼。
      [1, 2, 3, 4]
若您目前正在進行驅動移植,可以提供您的 SoC 晶片型號(如 RK3588、Jetson Xavier 等) 或當前遇到的 dmesg 報錯日誌,我可以進一步為您分析具體的 DTS 綁定或代碼修改細節。 [1, 2]

沒有留言: