Fairphone 6 超广角相机实验性 Linux 支持
发布于 2026 年 7 月 21 日 Fairphone 6 的超广角相机在 GNOME 快照中工作良好。背景 Fairphone 6 是主线 Linux 和 postmarketOS 的一个有趣目标,原因有几点:与大多数其他受支持的 postmarketOS 设备相比,它拥有相对现代的硬件。Fairphone 投资于主线 Linux 支持,Luca Weiss 驱动了大部分开发工作。这些努力已经为硬件提供了有希望的初步支持。Fairphone 故意允许替代操作系统。Fairphone 旨在长期支持其设备,因此该手机可以为未来的工作提供一个稳定的基础。目前,使设备广泛可用仍然面临两个主要阻碍:板载音频和相机支持。我正在进行一个需要二维码扫描的项目,因此我利用这个机会看看是否能让至少一只相机工作。免责声明:我在实现过程中大量依赖 LLM 的帮助。Fairphone 6 相机 Fairphone 6 有三个相机:后置:Sony IMX896 前置:Samsung S5KKD1 超广角:OmniVision OV13B10 Sony 和 Samsung 传感器没有主线 Linux 驱动,但 OmniVision OV13B10 有主线驱动。超广角相机足以进行二维码扫描。手机相机并不是一个单一的设备。在 Qualcomm SoC 上,捕获路径是一个链:图像传感器 → CSI-2 D-PHY → CSIPHY → CSID → ISP (VFE/TFE) → 内存 (I2C) (MIPI 通道) (解码) (解复用) (写入引擎) (DMA)。还有几个支持组件,包括相机时钟控制器 (camcc)、CCI(Qualcomm 的专用相机 I2C 控制器)、电源轨及用于自动对焦的 VCM(音圈电机)。下游供应商的 Android 内核通过 Qualcomm 大量的专有 CAMX/cam-kernel 堆栈驱动这一切。在主线中,相应的是更小的 qcom-camss 驱动,libcamera 提供用户空间集成和图像处理。为了使 OmniVision 相机正常工作,我必须教 qcom-camss 了解 SoC 的特定模块,在设备树中描述硬件,启用传感器驱动,并配置 libcamera 将原始 Bayer 帧转换为应用程序可用的图像。初步探索 在开始实施之前,我想了解工作中有多少是新的,有多少可以从主线已经支持的硬件移植。这将显示项目在没有制造商支持的情况下是否可行。初步研究令人振奋: FP6 的 SoC 是 Qualcomm milos (SM7635)。下游板的代号为 volcano,postmarketOS 已经通过基于主线的内核分支引导它。相机硬件模块为 TFE665(薄前端 ISP)、CSID665 和 CSIPHY v2.2.1。camcc 时钟控制器和 CCI 已在内核分支中存在。三个相机是:主:Sony IMX896,暂无主线驱动。超广角:OmniVision OV13B10,具有仅支持 ACPI/x86 的主线驱动。前置:Samsung S5KKD1,暂无主线驱动。这使得目标变得明显:OV13B10 超广角。它是一款具有现有主线驱动的 13 MP 传感器,其广角视野适合进行二维码扫描。当我将下游寄存器头(cam_tfe665.h、cam_csiphy_2_2_1_hwreg.h 和 cam_tfe_bus.c)与主线 qcom-camss 比较时,我发现 TFE665 本质上与主线已经支持的 TFE530 相同。寄存器布局是相同的。只有内部模块的基偏移不同,因为写总线位于不同的地址。同样,CSID665 RDI 寄存器与支持的 CSID 匹配,CSIPHY v2.2.1 属于同一家三相 PHY 系列。这意味着我可以移植现有驱动,而不必从头开始编写所有内容。第一步:将捕获子系统移植到内核 qcom-camss 还未在 milos 上可用,因此我必须连接现有的部分。TFE665 ISP 驱动我添加了一个新的 camss-vfe-665.c,直接以主线 TFE530 驱动(camss-vfe-340.c)为模型。由于寄存器内容相同,驱动逻辑也相同。主要区别在于 milos 将 ISP 控制块和写总线块放置在不同的偏移量位置。总线寄存器基地址从 0xa00 移动到 0x1800,封装该偏移变化占据了大部分工作。CSID665 和 CSIPHY v2.2.1 CSID665 重用现有的第二代 CSID 操作,因为其 RDI 寄存器偏移相同。CSIPHY v2.2.1 需要一个新的通道配置表和针对这个修订版的 D-PHY 调整值。我从下游的 cam_csiphy_2_2_1_hwreg.h 转录了通道寄存器序列以及大约 1.1 Gbps/通道(“500 Msps”)的数据速率和 AFE 设置。PHY 的寄存器窗口位于偏移量 0x1000。资源、兼容性和设备树 在 camss.c 中,我描述了 milos 的捕获复杂结构:四个 CSIPHY,三个 CSID,三个 TFE,它们的时钟、互连和电源域。我还注册了一个新的 qcom,milos-camss 兼容项。在设备树中,我添加了 camss@ac13000 节点以及它的寄存器。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡