Soporte experimental en Linux para la cámara ultra gran angular del Fairphone 6

Fuentes: Experimental Linux support for the Fairphone 6 wide camera

Un desarrollador ha conseguido hacer funcionar la cámara ultra gran angular del Fairphone 6 con un kernel mainline de Linux y postmarketOS, un avance clave para la usabilidad del dispositivo fuera de Android. El trabajo se enmarca en un proyecto personal de lectura de códigos QR y se apoya de forma intensiva en asistencia de modelos de lenguaje.

El Fairphone 6 monta el SoC Qualcomm milos (SM7635) y tres sensores fotográficos: Sony IMX896 (trasera), Samsung S5KKD1 (frontal) y OmniVision OV13B10 (ultra gran angular). Los dos primeros carecen de driver en mainline, pero el OV13B10 ya dispone de uno, lo que lo convierte en el objetivo natural. Su campo de visión resulta suficiente para escanear QR.

El proceso implicó adaptar el subsistema qcom-camss al hardware concreto del SoC. Se creó un nuevo driver para el ISP TFE665 partiendo del TFE530 ya soportado, ya que ambos comparten el mismo mapa de registros, y se reutilizaron las operaciones gen-2 del CSID665. También se añadió un nuevo compatible en el árbol de dispositivos (qcom,milos-camss) con sus relojes, interconexiones, dominios de potencia y puertos CSI.

Durante la integración apareció un problema de registros que devolvían cero: faltaba activar el reloj CAM_CC_SOC_AHB_CLK, que gobierna el bus AHB al que se conectan la CCI y el complejo de cámara. Sin él, el hardware parecía inactivo. Tras añadir ese reloj y los relojes CAMNOC AXI, el ISP arrancó con la versión de hardware esperada.

Para el sensor se modificó el driver ov13b10, pensado solo para x86/ACPI, añadiendo una tabla de compatibilidad OpenFirmware y describiendo el sensor en el device tree de milos. Dos detalles resultaron decisivos: la numeración de carriles debe ser cero-indexada en mainline en lugar de 1-indexada, y la cámara ultra gran angular está cableada a CSIPHY1, dato extraído del device tree descendente.

El último obstáculo fue un bug que provocaba frames completamente negros pese a que la temporización y el ISP funcionaban. La causa estaba en el packer del write engine: TFE530 usa bus RDI de 64 bits (packer 0xa) y TFE665 de 128 bits (packer 0x0); el driver mainline tenía hard-coded el valor de 64 bits, por lo que el motor de escritura rechazaba los píxeles. Corregido ese formato, el sensor empezó a entregar imágenes válidas. Quedan pendientes el audio integrado y los drivers de los sensores Sony y Samsung para un soporte completo.