A bring-your-own-firmware guide.
Following up on sonyxperiadev/bug_tracker #875: Sony confirmed they will not ship the Xperia 10 V camera userspace through the Open Devices (SODP) program, the v4b binaries carry the Xperia 10 IV camera modules instead. The correct files only exist in the stock retail firmware (XQ-DC54, 68.2.A.3.123). This guide gets all cameras + hardware video working by patching the stock files you extract from your own device - - no Sony binaries are shared here.
It builds on @balta’s guide (forum.sailfishos.org/t/guide-how-to-enable-all-cameras-on-xperia-10-v/35267, github.com/balta3/sailfish-xperia-10v-tweaks) and adds full sensor calibration, the main-camera OIS fix, and hardware H.264 encode.
Confirmed working on Sailfish OS 5.2.0.22 (the fixes survived the upgrade from 5.1.0.11, where they were originally developed).
This flashes the
oem/dtbopartitions and edits vendor files, and needs root (devel-su). To enter fastboot mode: power the phone off, then hold Volume Up while plugging in the USB cable to enter the bootloader (the LED turns blue), and run thefastbootcommands from your PC. Back up what matters and be ready to re-flash via fastboot if needed.
Why this is needed (the #875 summary)
The SODP v4b zambezi binaries are missing the 10 V-specific camera and media files:
/odm/lib64/cameraships the 10 IV modules (murray tele / ultrawide / front +zambezi_wide) instead of the 10 V sensors: IMX582 (main), HI847 (tele), HI846 (ultrawide + front), with their tuning files.- Several HI846 / IMX582 / HI847 OTP/EEPROM parser and sensor libraries are absent.
- Codec2 libraries are present, but the Codec2 service binary + OMX encoder libs are not → no hardware video encode.
- The device tree’s EEPROM nodes lack MCLK, reset GPIO, pinctrl and clock settings.
Sony (Alin Jerpelea) closed ticket #875 as “cannot be fixed” the OS and stock variants use different software implementations. So SODP is a dead end, and the fix is to transplant the correct files from each device’s own stock firmware.
Prerequisites
- XQ-DC54 with Sailfish X, bootloader unlocked,
fastboot+ SSH (key auth) working, Developer Mode +devel-suroot. - Sony
v4bbinaries flashed tooem_a:fastboot -S 512k flash oem_a <v4b>.imgThis is essential — on the olderv3athe camera provider crash-loops withdlopen failed: cannot locate symbol "__emutls_get_address"(the Qualcomm stats libs’ dependency isn’t exported there;v4bexports it via/odm/lib64/libofflinelog.so). - Your own stock firmware: download
XQ-DC54 68.2.A.3.123with XperiFirm, extractsuper.sin, and pull fromvendor_a/odm_a:- the 10 V camera modules (IMX582, HI847, HI846) and their tuning files,
- the OTP/EEPROM parsers and sensor libs,
- the Codec2 service + vendor libs. (A
sinextractor +debugfsdoes this. Keep these files to yourself – they are Sony proprietary and must not be redistributed.)
A. Re-enable the camera stack
Jolla disables the camera stack on this port. Re-enable:
- the camera provider (
60-sfos-camera-provider.rc), mediaextractor(needed later for video; also removes a record freeze),- and fix the lens labels so each sensor maps to the right slot.
B. Correct sensor modules (from your stock firmware)
Replace the 10 IV modules in /odm/lib64/camera with converted stock 10 V modules. Two changes are needed per module:
- Power types: stock uses WL2868C power types 13–16; the SODP kernel rejects those → remap to 1 - 4.
- Deploy through a bind-mount overlay on
/odm/lib64/camera(e.g. asfos-camera-overlay.servicethat mounts/var/lib/sfos-camera/odmcam) so you never modify the signedoemimage directly.
This brings up front (HI846), ultrawide (HI846) and telephoto (HI847) with tap-to-focus and flash.
C. Device-tree (dtbo) patch
The SODP device tree is missing camera rails/nodes. Patch and flash a dtbo that adds:
- the OIS LDO rails (
cam_vaf/ OIS supply, with regulator control + voltages), and - MCLK, reset GPIO, pinctrl and clocks on the main/ultrawide/tele EEPROM nodes.
Keep a copy of the original dtbo so you can restore it (fastboot flash dtbo …).
D. Main camera (IMX582 + DW9784 OIS) - - the trickiest one
Both Sony modules contain a dummy OIS init entry (regAddr 0, addr/data-type 0). The SODP kernel’s cam_cci_i2c_write_table_cmd() returns -EINVAL on type 0, giving:
cam_ois_apply_settings: Failed in Applying i2c wrt settings
Cannot apply Init settings: rc = -22
and the main camera won’t open.
Fix: patch that dummy entry into the real DW9784 “set control mode” write 0x7012 = 1, WORD/WORD (i.e. 654 7012 1 655 2 2 …), which is the same write Sony’s own kernel driver performs.
If the chip still NACKs after that, the DW9784 needs Sony’s full boot sequence → port cam_ois_dw9784 into the kernel (it’s GPL, present in the SODP / community kernel: check ID, update OIS firmware if needed, select the BMI260 gyro, run gyro-offset calibration).
Fallback (3 cameras): flash the dtbo-camfix-noois variant and skip the main-cam OIS module - front, ultrawide and telephoto all still work.
E. Hardware video (Codec2)
v4b ships Codec2 libs but no service (only Qualcomm libqcodec2_* / libqc2*, no OMX), so gst-droid reports No hardware support found for video/avc and falls back to a software encoder. The kernel side is fine (msm_vidc, /dev/video/venus_enc+venus_dec, vpu20_* firmware). To get hardware H.264:
- Copy the stock
vendor.qti.media.c2@1.0-service(32-bit) + its vendor libs into/vendor/lib:libcodec2_hidl@1.0.so,libcodec2_vndk.so,libstagefright_bufferpool@2.0.1.so,libdisplayconfig.qti.so,vendor.display.config@2.0.so; and copyandroid.hardware.media.c2@1.0.sointo the vendor namespace. - ABI shim: Jolla’s
libuiis newer than the stock Codec2 libs expect (newGraphicBufferMapper::lock/unlocksignatures). Build a small ARM32 shim (libsfos_c2shim.so,clang -target armv7a-linux-androideabi29) that forwards the oldlock(handle,uint32,Rect const&,void**,int*,int*)/unlock(handle)calls, andLD_PRELOADit in the service’s.rc. - Add the vintf manifest (
IComponentStoredefault) and set the stock propsdebug.stagefright.c2inputsurface = -1anddebug.stagefright.ccodec = 4(without these, a 64-bit client + 32-bit service hangs onGraphicMetadataBuffer). - Reboot (rc/manifest/prop changes need it).
Result: hardware H.264 encode :- recording saves and plays back (HW decode is available too). Add only new files; back up and replace media_codecs.xml / media_codecs_performance.xml with the blair versions.
Record start/stop freeze (~10 s “not responding”): this is CameraService::playSound loading VideoRecord.ogg / VideoStop.ogg, which needs media.extractor; Jolla disables mediaextractor, so getService waits ~5 s at start and at stop. Re-enabling mediaextractor (Part A) removes it.
Result
All four cameras + hardware video on the Xperia 10 V, using only files extracted from your own stock firmware.
Download the toolkit
Everything above — the stock-module patch script, the dtbo patch tools (+ a GPL dtbo image), the ARM32 Codec2 shim (source + binary), the codec2/extractor scripts, and a FIRMWARE-FILES.md listing exactly what to pull from your own firmware is packaged here (GPL-3.0, no Sony files):
You supply the stock camera modules / tuning / OTP / sensor libs / Codec2 files by extracting them from your own XQ-DC54 68.2.A.3.123 (super.sin); the scripts sha256-verify them. Please don’t repost Sony blobs - - extract them from your own firmware.
Credits: @balta’s camera guide and tweaks repo for the original enablement route; the Sony Open Devices and Sailfish OS communities.