Fairphone 6 超廣角鏡頭實驗性 Linux 支援
Fairphone 6 超廣角鏡頭實驗性 Linux 支援
Fairphone 6 實驗性 Linux 相機支援
透過將 qcom-camss 驅動程式移植到 Qualcomm milos (SM7635) SoC,並透過 libcamera 配置 OmniVision OV13B10 感測器,已在 mainline Linux 上實現了 Fairphone 6 超廣角鏡頭的實驗性支援,使其能夠執行基本功能,例如在 GNOME Snapshot 中的 QR 碼掃描和即時預覽。
硬體架構與驅動程式策略
Fairphone 6 使用 Qualcomm milos SoC,配備三個鏡頭:Sony IMX896(後置)、Samsung S5KKD1(前置)以及 OmniVision OV13B10(超廣角)。由於 Sony 和 Samsung 的感測器缺乏 mainline Linux 驅動程式,開發重點集中在 OV13B10 上,該感測器已有原本為 x86/ACPI 筆記型電腦設計的 mainline 驅動程式。
在 Qualcomm SoC 上,相機擷取路徑是一個複雜的鏈條:
image sensor (I2C) → CSI-2 D-PHY (MIPI lanes) → CSIPHY (decode) → CSID (demux) → ISP (VFE/TFE) (write engine) → memory (DMA)。
為了啟用此路徑,開發者移植了 qcom-camss 驅動程式,利用了 Fairphone 6 上的 TFE665 ISP 在功能上與 mainline 支援的 TFE530 完全相同的特性,兩者僅在暫存器基底偏移量(register base offsets)上有所不同。
核心層級實作細節
ISP 與擷取子系統移植
啟動擷取子系統需要對核心進行幾項關鍵調整:
- TFE665 ISP 驅動程式: 根據 TFE530 驅動程式建立了一個新的
camss-vfe-665.c。主要的變更涉及將匯流排暫存器基底從0xa00移至0x1800。 - CSID 與 CSIPHY: CSID665 重用了 gen-2 操作。CSIPHY v2.2.1 需要一個新的通道配置表(lane-configuration table)以及從下游 Android 核心標頭檔轉錄的 D-PHY 調諧值(約為每通道 1.1 Gbps)。
- 時鐘配置: 在
CAM_CC_SOC_AHB_CLK中發現了一個關鍵阻礙。如果沒有此時鐘來閘控(gating)AHB 暫存器匯流排,所有暫存器存取都會回傳零,導致 ISP 看起來像是未通電狀態。
感測器整合
為了讓 OV13B10 感測器能在 ARM/Device Tree 而非 x86/ACPI 上運作,實作了以下變更:
- OpenFirmware 匹配表: 加入
ovti,ov13b10以允許驅動程式從裝置樹進行探測(probe)。 - 通道索引: 將通道編號從下游的 1-indexed 慣例 (
<1 2 3 4>) 修正為 mainline 的 0-indexed 慣例 (<0 1 2 3>),以允許 PHY 鎖定(lock)。 - 路由: 超廣角鏡頭被識別為路由至 CSIPHY1。
解決全零影格 Bug
初步測試結果顯示,影格的大小和速率正確,但內容僅包含零像素,即使使用感測器內部的色條測試圖案也是如此。核心日誌顯示 VFE0: Bad config violation。
調查發現,RDI 寫入主控端(write-master)的封裝格式取決於 ISP 匯流排寬度。mainline 驅動程式硬編碼了 TFE530 使用的 64 位元值 (PLAIN64 或 0xa)。然而,TFE665 (milos) 使用的是 128 位元 RDI 匯流排,需要封裝值 0x0。更新此暫存器值解決了違規問題,並實現了向 DDR 記憶體傳送真實 Bayer 影格的功能。
使用者空間與 libcamera 整合
使用 libcamera 0.7.2 將原始 Bayer 影格處理成 RGB 圖像。
自動曝光與增益
由於 libcamera 缺乏 OV13B10 的感測器輔助程式(sensor helper),圖像最初曝光不正確。開發者實作了一個 CameraSensorHelperOv13b10 類別,將感測器的線性類比增益 (0x80 = 1×) 映射到實際的增益乘數,這使得自動曝光迴圈能夠收斂。
對焦與方向
- 自動對焦: 感測器使用 Awinic AW86017 VCM。雖然
dw9714驅動程式可以控制鏡頭,但libcamera的軟體 ISP 缺乏對比度自動對焦(contrast-AF)迴圈。因此,透過 udev 規則設定了一個針對 QR 碼掃描和文件進行調諧的固定對焦。 - 方向: 配置了裝置樹的旋轉與方向屬性,以確保在直立模式下畫面呈現正向。
目前限制與已知問題
雖然可以運作,但此實作仍處於實驗階段,並有以下限制:
- 有限的感測器支援: 僅超廣角鏡頭可運作;主鏡頭與前置鏡頭仍不受支援。
- 裁剪視野: 2×2-binned 感測器模式會產生混亂的輸出。由於軟體 ISP 是進行裁剪而非縮放,導致產生的 1080p 預覽是中心裁剪,縮減了超廣角視野。
- 簡化的電源管理: 電壓調節器(Regulators)是被強制開啟而非按順序開啟,導致 VCM 的閒置電流消耗較高。
- 純軟體 ISP: 所有圖像處理都在 GPU 協助下透過軟體完成,缺乏專有 Android 流程中經過硬體調諧的品質。
社群背景
社群成員指出,Fairphone 6 正成為支援最完善的現代化 postmarketOS 裝置之一,其他開發者正在致力於通話、音訊、麥克風、NFC、GPS 和 IMU 的支援。部分使用者也對使用 LLM 協助編寫這些小眾驅動程式表示興趣,作者明確表示在此專案中使用了這種方法。