Systems & Linux Engineering

Upstream kernel development, hardware bring-up, Yocto, and embedded Linux - engineering close to the metal

Extracting Sensor Calibration from Intel's AIQB Binary for libcamera

If you followed the Intel IPU6 webcam migration post, you know that libcamera’s Simple IPA falls back to uncalibrated.yaml when no sensor-specific tuning file exists. That fallback enables AGC and AWB but has no color correction matrix, which means colors depend entirely on the grey world AWB algorithm to converge - and it often does not converge well, especially under mixed or warm lighting. Intel ships a per-sensor calibration binary with every Windows IPU6 camera driver: a file with the .aiqb extension, sometimes called a CPFF. These binaries contain the CCMs, AWB neutral locus, and sensor properties that Intel’s proprietary icamerasrc pipeline reads. The data was measured on real hardware, which makes it more accurate than any generic default. ...

May 7, 2026 Β· 8 min Β· Javier Tia

Yocto build tunables and their hidden costs

Every Yocto user eventually copies the same handful of tunables into local.conf to make builds bearable. ccache, a parallelism bump, a longer fetch timeout, a couple of PREMIRROR lines, an image-features prune. The recipe gets passed around in chat, lands on a wiki, gets forked into a layer. What rarely gets passed around is the failure mode each line buys you. Every one of these knobs swaps β€œslow” for β€œdifferent failure mode”, and the new mode shows up at the worst possible time - mid-fetch on a CI runner, or at link time when the box runs out of memory. ...

May 6, 2026 Β· 14 min Β· Javier Tia

When You're Fired, Your Next Job Is Finding a Job

Today, April 27, marks exactly one month since I was told my job was over. Looking back, the signs were there - when the mass layoffs started and good people began disappearing, it was hard not to read it as a signal that nobody was safe, including me. And yet, when the moment actually came, it still landed differently than I expected. That gap between knowing it is possible and having it happen to you is where the shock lives. Do not be surprised by it. It does not mean you were naive or unprepared. It means you are human. ...

April 27, 2026 Β· 6 min Β· Javier Tia Β· Updated: April 28, 2026

Auditing your Yocto build for CRA compliance

TL;DR CRA is a process and design regulation; the risk analysis is the central document and the technical file is the evidence the regulator audits, not a scanner-selection problem. Yocto already emits the build-derivable half: SBOM (create-spdx), CVE scans, license manifests, signing posture. The vendor-committed half - CVD policy, support period, update mechanism, Declaration of Conformity - has to be written by hand. shipcheck reads a Yocto build plus product.yaml, pivots findings by CRA Annex, and drafts your Annex VII technical file and DoC. The received wisdom is wrong Read any CRA compliance article from a security vendor and you will see the same shape of pitch: run a scanner, triage the CVEs, generate an SBOM, ship. The regulation becomes a scanner-selection problem, and whichever product the vendor sells happens to be the right scanner. ...

April 24, 2026 Β· 12 min Β· Javier Tia Β· Updated: April 29, 2026

What's Next: Available for New Opportunities

At the end of March 2026 I was laid off from Linaro as part of a round of cuts. After 3.5 years working on upstream kernel enablement, embedded security, and CI/CD infrastructure for ARM-based platforms, it came as a surprise - but I am using the time well. What I have been doing since The upstream work did not stop. I currently have three active patch series under review: An 18-patch WiFi 7 series on linux-wireless@ adding full support for the MediaTek MT7927 (Filogic 380) to the mt76/mt7925 driver. The series is at v4, community-tested across 10+ hardware platforms with 9 Tested-by tags from ASUS, Lenovo, Foxconn, and AMD. Phoronix covered it: MediaTek MT7927 WiFi 7 Linux Support Coming Together. ...

April 1, 2026 Β· 2 min Β· Javier Tia

MT7927 WiFi on Linux: Making It Work

In my previous post, I ended with a wall: mt7925e 0000:0b:00.0: ASIC revision: 0000 mt7925e 0000:0b:00.0: Message 00000010 (seq 2) timeout mt7925e 0000:0b:00.0: Failed to get patch semaphore mt7925e 0000:0b:00.0: hardware init failed The mt7925e driver bound to the MT7927’s WiFi hardware, but registers returned zeros. The chip sat behind PCIe doing nothing. The ehausig/mt7927 project had gotten firmware into kernel memory but stalled at DMA state 0xffff10f1 - β€œwaiting for firmware transfer.” Nobody had gotten past it. ...

March 6, 2026 Β· 21 min Β· Javier Tia

MT7927 Bluetooth: From DKMS to Upstream

In Part 1, I documented getting MT7927 Bluetooth working through a DKMS package - patching three missing layers (USB device ID, hardware variant support, and firmware) into an out-of-tree build. That post ended with: As of February 2026, none of the three layers have reached mainline Linux. This post covers what happened next: submitting all three layers upstream and getting the BT driver patches merged after five revision cycles. Update (2026-03-31): The BT driver patches have been merged into bluetooth-next by Luiz Augusto von Dentz. They will ship in mainline Linux 7.1 or 7.2. ...

March 5, 2026 Β· 6 min Β· Javier Tia Β· Updated: March 31, 2026

Building a Bootable Windows USB from Linux for Firmware Updates

Three devices on my PC have firmware that can only be updated through Windows tools: an ASMedia ASM4242 USB4 controller (ASUS firmware utility), an NZXT Kraken Elite AIO cooler (NZXT CAM), and a Razer Kiyo Pro Ultra webcam (Razer Synapse). Every other component - NVMe SSD, motherboard BIOS, fwupd-supported devices - has a Linux-native update path. These three don’t, and their vendors show no interest in changing that. The obvious answer is β€œjust boot Windows.” But I don’t have a Windows partition, don’t want one, and installing Windows to flash three firmware blobs is absurd. I needed a way to boot a fully configured Windows environment from Linux, run the vendor tools, and shut down. No permanent installation, no dual-boot, no repartitioning. ...

February 27, 2026 Β· 7 min Β· Javier Tia Β· Updated: April 28, 2026

Intel IPU6 Webcam on Linux: From Proprietary Stack to Mainline

The Intel IPU6 (Imaging Processing Unit, generation 6) is the camera subsystem in Tiger Lake, Alder Lake, Raptor Lake, and Meteor Lake laptops. If you have a recent ThinkPad, XPS, or Surface, your webcam likely runs through it. For years, getting it to work on Linux meant an out-of-tree driver stack from Intel’s GitHub - four separate repositories, a DKMS module, proprietary firmware blobs, and a GStreamer-based relay daemon. It was fragile, broke on kernel updates, and couldn’t survive suspend/resume on recent kernels. ...

February 25, 2026 Β· 12 min Β· Javier Tia Β· Updated: May 9, 2026

MT7927 WiFi on Linux: Wrong Driver, Wrong Chip, No Driver

Update - March 5, 2026 MT7927 WiFi now fully works on Linux - 2.4/5/6 GHz, WiFi 7 320MHz EHT (~1 Gbps), MLO, AP mode, suspend/resume, and mac_reset recovery. 20 patches, community-tested on 10+ hardware platforms. See the follow-up: MT7927 WiFi on Linux: Making It Work. In my previous post, I documented the 15-month journey to get Bluetooth working on the MediaTek MT7927. The btusb-mt7927-dkms AUR package patched three missing layers - USB device ID, hardware variant support, and firmware extraction - to bring up a fully functional Bluetooth 5.4 adapter. ...

February 20, 2026 Β· 8 min Β· Javier Tia Β· Updated: April 28, 2026