7.9. Intel Image Processing Unit 6 (IPU6) 輸入系統驅動

版權所有 © 2023--2024 Intel Corporation

7.9.1. 簡介

本文件介紹位於 drivers/media/pci/intel/ipu6 下的 Intel IPU6(第六代影像處理單元)輸入系統(MIPI CSI2 接收器)驅動程式。

Intel IPU6 可以在某些 Intel SoC 中找到,但並非所有 SKU 都有

  • Tiger Lake

  • Jasper Lake

  • Alder Lake

  • Raptor Lake

  • Meteor Lake

Intel IPU6 由兩個元件組成 - 輸入系統 (ISYS) 和處理系統 (PSYS)。

輸入系統主要用作 MIPI CSI-2 接收器,接收和處理來自感測器的影像資料,並將幀輸出到記憶體。

有兩個驅動模組 - intel-ipu6 和 intel-ipu6-isys。 intel-ipu6 是一個 IPU6 通用驅動程式,用於執行 PCI 配置、韌體載入和解析、韌體身份驗證、DMA 對映和 IPU-MMU(內部記憶體對映單元)配置。 intel_ipu6_isys 實現了 V4L2、媒體控制器和 V4L2 子裝置介面。 IPU6 ISYS 驅動程式支援透過 V4L2 子裝置感測器驅動程式連線到 IPU6 ISYS 的攝像頭感測器。

注意

有關 IPU6 硬體的更多資訊,請參見 Intel IPU6 驅動

7.9.2. 輸入系統驅動

輸入系統驅動程式主要配置 CSI-2 D-PHY,構建韌體流配置,向韌體傳送命令,從硬體和韌體獲取響應,然後將緩衝區返回給使用者。 ISYS 表示為多個 V4L2 子裝置以及影片節點。

ipu6 isys media graph with multiple streams support

支援多個流的 IPU6 ISYS 媒體圖

該圖已使用以下命令生成

fdp -Gsplines=true -Tsvg < dot > dot.svg

7.9.2.1. 使用 IPU6 ISYS 捕獲幀

IPU6 ISYS 用於從連線到 CSI2 埠的攝像頭感測器捕獲幀。 下表列出了 ISYS 支援的輸入格式

IPU6 ISYS 支援的輸入格式

RGB565, RGB888

UYVY8, YUYV8

RAW8, RAW10, RAW12

7.9.2.1.1. 示例

這是一個在 Dell XPS 9315 筆記型電腦上進行 IPU6 ISYS 原始捕獲的示例。 在此機器上,ov01a10 感測器連線到 IPU ISYS CSI-2 埠 2,它可以生成 sBGGR10 格式、解析度為 1280x800 的影像。

使用媒體控制器 API,我們可以透過 media-ctl [1] 和 yavta [2] 配置 ov01a10 感測器,以將幀傳輸到 IPU6 ISYS。

# Example 1 capture frame from ov01a10 camera sensor
# This example assumes /dev/media0 as the IPU ISYS media device
export MDEV=/dev/media0

# Establish the link for the media devices using media-ctl
media-ctl -d $MDEV -l "\"ov01a10 3-0036\":0 -> \"Intel IPU6 CSI2 2\":0[1]"

# Set the format for the media devices
media-ctl -d $MDEV -V "ov01a10:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:1 [fmt:SBGGR10/1280x800]"

一旦媒體管道配置完成,就可以使用 yavta 工具設定所需的感測器特定設定(例如曝光和增益設定)。

例如

# and that ov01a10 sensor is connected to i2c bus 3 with address 0x36
export SDEV=$(media-ctl -d $MDEV -e "ov01a10 3-0036")

yavta -w 0x009e0903 400 $SDEV
yavta -w 0x009e0913 1000 $SDEV
yavta -w 0x009e0911 2000 $SDEV

一旦設定了所需的感測器設定,就可以如下進行幀捕獲。

例如

yavta --data-prefix -u -c10 -n5 -I -s 1280x800 --file=/tmp/frame-#.bin \
        -f SBGGR10 $(media-ctl -d $MDEV -e "Intel IPU6 ISYS Capture 0")

使用上述命令,以 1280x800 解析度、sBGGR10 格式捕獲 10 幀。 捕獲的幀作為 /tmp/frame-#.bin 檔案提供。

這是另一個來自 Lenovo X1 Yoga 筆記型電腦上的攝像頭感測器 ov2740 的 IPU6 ISYS RAW 和元資料捕獲示例。

media-ctl -l "\"ov2740 14-0036\":0 -> \"Intel IPU6 CSI2 1\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":1 -> \"Intel IPU6 ISYS Capture 0\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":2 -> \"Intel IPU6 ISYS Capture 1\":0[1]"

# set routing
media-ctl -R "\"Intel IPU6 CSI2 1\" [0/0->1/0[1],0/1->2/1[1]]"

media-ctl -V "\"Intel IPU6 CSI2 1\":0/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":0/1 [fmt:GENERIC_8/97x1]"
media-ctl -V "\"Intel IPU6 CSI2 1\":1/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":2/1 [fmt:GENERIC_8/97x1]"

CAPTURE_DEV=$(media-ctl -e "Intel IPU6 ISYS Capture 0")
./yavta --data-prefix -c100 -n5 -I -s1932x1092 --file=/tmp/frame-#.bin \
    -f SGRBG10 ${CAPTURE_DEV}

CAPTURE_META=$(media-ctl -e "Intel IPU6 ISYS Capture 1")
./yavta --data-prefix -c100 -n5 -I -s97x1 -B meta-capture \
    --file=/tmp/meta-#.bin -f GENERIC_8 ${CAPTURE_META}

7.9.3. 參考