Fairphone 4 (fairphone-fp4)
|
Framebuffer console on mainline kernel | |
| Manufacturer | Fairphone |
|---|---|
| Name | 4 |
| Codename | fairphone-fp4 |
| Model | FP4 |
| Released | 2021 |
| Type | handset |
| Hardware | |
| Chipset | Qualcomm Snapdragon 750G (SM7225) |
| CPU |
2× 2.2 GHz Cortex-A77 6× 1.8 GHz Cortex-A55 |
| GPU | Adreno 619 |
| Display | 1080×2340 IPS LCD, 6.3" |
| Storage | 128 / 256 GB |
| Memory | 6 / 8 GB |
| Architecture | aarch64 |
| Software | |
Original software The software and version the device was shipped with. |
Android 11 |
Extended version The most recent supported version from the manufacturer. |
Android 15 |
| Optional software | eOS |
| FOSS bootloader | no |
| postmarketOS | |
| Category | community |
Pre-built images Whether pre-built images are available from the postmarketOS Installation page. |
yes |
Mainline Instead of a Linux kernel fork, it is possible to run (Close to) Mainline. |
yes |
pmOS kernel The kernel version that runs on the device's port. |
6.6.0 |
Unixbench score Unixbench Whetstone/Dhrystone score. See Unixbench. |
6567.7 |
| Device package |
|
| Kernel package |
|
Flashing Whether it is possible to flash the device with pmbootstrap flasher. |
Works
|
|---|---|
USB Networking After connecting the device with USB to your PC, you can connect to it via telnet (initramfs) or SSH (booted system). |
Works
|
Internal storage eMMC, SD cards, UFS... |
Works
|
SD card Also includes other external storage cards. |
Works
|
Battery Whether charging and battery level reporting work. |
Partial
|
Screen Whether the display works; ideally with sleep mode and brightness control. |
Works
|
Touchscreen |
Works
|
| Multimedia | |
3D Acceleration |
Works
|
Audio Audio playback, microphone, headset and buttons. |
Partial
|
Camera |
Partial
|
Camera Flash |
Works
|
| Connectivity | |
WiFi |
Works
|
Bluetooth |
Works
|
GPS |
Broken
|
NFC Near Field Communication |
Broken
|
| Modem | |
Calls |
Partial
|
SMS |
Works
|
Mobile data |
Works
|
| Miscellaneous | |
FDE Full disk encryption and unlocking with unl0kr. |
Works
|
USB OTG USB On-The-Go or USB-C Role switching. |
Works
|
HDMI/DP Video and audio output with HDMI or DisplayPort. |
Broken
|
Fingerprint Fingerprint reader. |
Broken
|
| Sensors | |
Accelerometer Handles automatic screen rotation in many interfaces. |
Works
|
Magnetometer Sensor to measure the Earth's magnetism |
Works
|
Ambient Light Measures the light level; used for automatic screen dimming in many interfaces. |
Works
|
Proximity |
Works
|
Haptics |
Works
|
Description
Making the fair choice has never been easier. Premium dual cameras with AI scene detection. Long battery life. Clean Android experience. Modular design with eight swappable spare parts. Crafted with fair and recycled focus materials. Five-year warranty and extended support till 2028.
Boot modes
By holding various button combinations while booting, the device can boot into different modes. Unplug from USB, power off the device and press and hold the below buttons to enter the specific boot mode.
| Boot mode | PWR | Vol+ | Vol- |
|---|---|---|---|
| Fastboot | Y | N | Y |
| Recovery | Y | Y | N |
| Download | N | N | N |
Installation
| You should upgrade your phone to the latest official firmware before start tinkering with it. Development is mostly done on the latest firmware. |
Unlock the bootloader according to the official instructions.
UBports installer
You can use UBports Installer v0.9.8 (or later) to flash a prebuilt image of postmarketOS onto your Fairphone 4. Just select postmarketOS in the OS selection and choose the desired UI and lean back!
Web flasher
You can use the postmarketOS web flasher to flash a prebuilt image of postmarketOS onto your Fairphone 4. Follow the instructions on the page.
Manual install
- Enter fastboot according to boot modes instructions above.
- You can choose to install postmarketOS on slot B:
fastboot set_active b reboot bootloader - Firstly, flash the boot partition:
fastboot flash boot *boot.img - Secondly, you have a few choices to flash the postmarketOS rootfs:
- userdata partition (209GiB usable space):
fastboot flash userdata *rootfs.img - super partition (9GiB usable space):
fastboot flash super *rootfs.img - SD memory card:
dd if=*rootfs.img of=/dev/$blk_dev bs=8M status=progress
- userdata partition (209GiB usable space):
- Finally, erase the dtbo partition and reboot the device:
fastboot erase dtbo reboot
SD card notes
In case you want to flash to SD card on a different computer, do the following:
1. Edit $(pmbootstrap config aports)/device/community/device-fairphone-fp4/deviceinfo and change the value of deviceinfo_rootfs_image_sector_size to 512 (the SD card sector size)
2. Run pmbootstrap install --no-sparse (we do not need a sparse image for the SD card)
3. Copy the newly created $(pmbootstrap config work)/chroot_native/home/pmos/rootfs/fairphone-fp4.img to the other computer and flash it there with your preferred flashing tool.
Dual booting
See also Dual Booting and Dual Booting/WiP for more info.
- For example, to dual boot with Ubuntu Touch (UT)/postmarketOS (pmOS), first ensure Android is installed, then install UT with ubuntu-installer. But dual boot can theoretically be done with any operating system that runs on fp4.
- Install latest version of pmbootstrap on your computer and run
pmbootstrap init. - Insert your micro SDcard in your computer and follow instructions above for SDcards. Shutdown phone and insert sdcard.
- Enter Fastboot: Connect the USB cable to computer. Press and hold Volume Down button. While holding Volume Down button, plug USB cable into the fp4. Phone should boot to fastboot.
- Now switch slots: Install the program fastboot to computer. Run
fastboot set_active b. - Erase dtbo on slot B (see above for more details):
fastboot erase dtbo. - Write kernel to slot B:
pmbootstrap flasher flash_kernel - Reboot with
pmbootstrap chroot fastboot rebootand pmOS should boot. - To reboot to the other operating system, install
sudo apk add qbootctlon pmOS and runqbootctl -s aand next time you should reboot to the other system. - If necessary, resize your sdcard.
- Install Switch My Slot in UT to boot to pmOS (Caution: Hard reboot as soon as you press the button).
Return to Android
Follow the instructions on the respective official page of Fairphone-OS or Murena-/e/OS to return to stock Android.
Partition layout
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sda
Disk /dev/sda: 117.27 GiB, 125908811776 bytes, 30739456 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: CFAF47FD-955A-B7E5-3B44-7CB199157323 Device Start End Sectors Size Name /dev/sda1 6 29 24 96K ALIGN_TO_128K_3 /dev/sda2 30 31 2 8K ssd /dev/sda3 32 8223 8192 32M persist /dev/sda4 8224 8479 256 1M misc /dev/sda5 8480 8607 128 512K keystore /dev/sda6 8608 8735 128 512K frp /dev/sda7 8736 16383 7648 29.9M metadata /dev/sda8 16384 67583 51200 200M oempersist /dev/sda9 67584 2217164 2149581 8.2G rawdump /dev/sda10 2217165 3790028 1572864 6G super /dev/sda11 3790029 30739450 26949422 102.8G userdata
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdb
Disk /dev/sdb: 8 MiB, 8388608 bytes, 2048 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: C294D7C7-0358-526E-7C3A-26D0921BB1F3 Device Start End Sectors Size Name /dev/sdb1 6 901 896 3.5M xbl_a /dev/sdb2 902 933 32 128K xbl_config_a /dev/sdb3 934 2042 1109 4.3M last_parti
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdc
Disk /dev/sdc: 8 MiB, 8388608 bytes, 2048 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: 33EF572A-E407-059A-2A48-608D0AC95DF2 Device Start End Sectors Size Name /dev/sdc1 6 901 896 3.5M xbl_b /dev/sdc2 902 933 32 128K xbl_config_b /dev/sdc3 934 2042 1109 4.3M last_parti
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdd
Disk /dev/sdd: 128 MiB, 134217728 bytes, 32768 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: 7E252AAA-82B5-5A26-C6B5-D7DD4C57C080 Device Start End Sectors Size Name /dev/sdd1 6 31 26 104K ALIGN_TO_128K_1 /dev/sdd2 32 63 32 128K cdt /dev/sdd3 64 319 256 1M ddr /dev/sdd4 320 32762 32443 126.7M last_parti
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sde
Disk /dev/sde: 1.64 GiB, 1744830464 bytes, 425984 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: E7841167-3D00-D421-8846-7B7A871AB8A1 Device Start End Sectors Size Name /dev/sde1 6 31 26 104K ALIGN_TO_128K_4 /dev/sde2 32 159 128 512K aop_a /dev/sde3 160 1183 1024 4M tz_a /dev/sde4 1184 1191 8 32K multiimgoem_a /dev/sde5 1192 1319 128 512K hyp_a /dev/sde6 1320 51239 49920 195M modem_a /dev/sde7 51240 51751 512 2M bluetooth_a /dev/sde8 51752 52775 1024 4M mdtpsecapp_a /dev/sde9 52776 60967 8192 32M mdtp_a /dev/sde10 60968 61223 256 1M abl_a /dev/sde11 61224 77607 16384 64M dsp_a /dev/sde12 77608 77735 128 512K keymaster_a /dev/sde13 77736 102311 24576 96M boot_a /dev/sde14 102312 102343 32 128K devcfg_a /dev/sde15 102344 102363 20 80K qupfw_a /dev/sde16 102364 126939 24576 96M recovery_a /dev/sde17 126940 126955 16 64K vbmeta_system_a /dev/sde18 126956 126971 16 64K vbmeta_a /dev/sde19 126972 133115 6144 24M dtbo_a /dev/sde20 133116 133627 512 2M imagefv_a /dev/sde21 133628 134139 512 2M uefisecapp_a /dev/sde22 134140 177659 43520 170M core_nhlos_a /dev/sde23 177660 177691 32 128K featenabler_a /dev/sde24 177692 178331 640 2.5M fsgbk_a /dev/sde25 178332 182427 4096 16M questdatafv /dev/sde26 182428 182555 128 512K aop_b /dev/sde27 182556 183579 1024 4M tz_b /dev/sde28 183580 183587 8 32K multiimgoem_b /dev/sde29 183588 183715 128 512K hyp_b /dev/sde30 183716 233635 49920 195M modem_b /dev/sde31 233636 234147 512 2M bluetooth_b /dev/sde32 234148 235171 1024 4M mdtpsecapp_b /dev/sde33 235172 243363 8192 32M mdtp_b /dev/sde34 243364 243619 256 1M abl_b /dev/sde35 243620 260003 16384 64M dsp_b /dev/sde36 260004 260131 128 512K keymaster_b /dev/sde37 260132 284707 24576 96M boot_b /dev/sde38 284708 284739 32 128K devcfg_b /dev/sde39 284740 284759 20 80K qupfw_b /dev/sde40 284760 309335 24576 96M recovery_b /dev/sde41 309336 309351 16 64K vbmeta_system_b /dev/sde42 309352 309367 16 64K vbmeta_b /dev/sde43 309368 315511 6144 24M dtbo_b /dev/sde44 315512 315543 32 128K featenabler_b /dev/sde45 315544 316055 512 2M imagefv_b /dev/sde46 316056 316567 512 2M uefisecapp_b /dev/sde47 316568 360087 43520 170M core_nhlos_b /dev/sde48 360088 360727 640 2.5M fsgbk_b /dev/sde49 360728 360728 1 4K devinfo /dev/sde50 360729 360984 256 1M dip /dev/sde51 360985 361048 64 256K apdp /dev/sde52 361049 363096 2048 8M spunvm /dev/sde53 363097 371452 8356 32.7M splash /dev/sde54 371453 371453 1 4K limits /dev/sde55 371454 371454 1 4K limits-cdsp /dev/sde56 371455 371710 256 1M toolsfv /dev/sde57 371711 373758 2048 8M logfs /dev/sde58 373759 374270 512 2M cateloader /dev/sde59 374271 390654 16384 64M logdump /dev/sde60 390655 390686 32 128K storsec /dev/sde61 390687 390814 128 512K uefivarstore /dev/sde62 390815 390821 7 28K secdata /dev/sde63 390822 390949 128 512K catefv /dev/sde64 390950 391205 256 1M catecontentfv /dev/sde65 391206 392229 1024 4M oembin /dev/sde66 392230 392261 32 128K swversion /dev/sde67 392262 425978 33717 131.7M last_parti
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdf
Disk /dev/sdf: 128 MiB, 134217728 bytes, 32768 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes Disklabel type: gpt Disk identifier: 807C60B8-2098-B26C-7DC6-B11C3B173565 Device Start End Sectors Size Name /dev/sdf1 6 31 26 104K ALIGN_TO_128K_2 /dev/sdf2 32 287 256 1M traceability /dev/sdf3 288 319 32 128K fpconfig_persist /dev/sdf4 320 351 32 128K fpconfig /dev/sdf5 352 991 640 2.5M fsg /dev/sdf6 992 1023 32 128K fsc /dev/sdf7 1024 2559 1536 6M tunning /dev/sdf8 2560 4095 1536 6M modemst1 /dev/sdf9 4096 5631 1536 6M modemst2 /dev/sdf10 5632 32762 27131 106M last_parti
fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdg
Disk /dev/sdg: 12 MiB, 12582912 bytes, 3072 sectors Disk model: KM2V8001CM-B707 Units: sectors of 1 * 4096 = 4096 bytes Sector size (logical/physical): 4096 bytes / 4096 bytes I/O size (minimum/optimal): 524288 bytes / 524288 bytes
Components
Component table
| Component | Model | Notes |
|---|---|---|
| Modem | Snapdragon X52 | |
| eSIM | ST33G1M2-SE | |
| Power button | PM6350 | pwrkey |
| Volume down | PM6350 | resin |
| Volume up | GPIO | |
| Display | HX83112A | |
| Touchscreen | HX83112A | |
| Chipset | SM7225 | |
| GPU | Adreno 619 | |
| SD card | sdhc_2 | |
| Internal storage | UFS | |
| Main camera | IMX582 | D-PHY |
| Wide camera | IMX582 | D-PHY |
| Front camera | IMX576 | D-PHY |
| ToF sensor | ||
| Camera flash | PM6150L | qcom,leds@d300 |
| Audio codec | WCD9380 | |
| Amplifier | AW88264 | |
| Earpiece | BM24-10DS/2 | |
| Speaker | AW88264A | |
| Microphones | AWC2718M06CX | |
| Vibration motor | AW8695 | |
| WiFi | WCN3988/WCN3990 | |
| Bluetooth | WCN3988/WCN3990 | |
| GNSS/GPS | AW5015DNR/AW15045FDR | |
| NFC | ST21NFCD | |
| Fingerprint | ||
| Sixaxis | LSM6DSOQTR | |
| Light / Proximity | TCS37013H | |
| Magnetometer | AK09918 | |
| Fuel gauge | PM7250B | qpnp,qg |
| Charger | PM7250B | qcom,qpnp-smb5 |
Audio
Path:
- CPU via I2S (quinary) to AW88264: speaker (and echo reference back)
- CPU via SoundWire to WCD9380: microphones, etc.
Camera
| Camera | Purpose | Part number | |
|---|---|---|---|
| Front camera | Sensor | Sony IMX576 | |
| EEPROM | Giantec GT24P64A | ||
| Main camera | Sensor | Sony IMX582 | |
| EEPROM | Giantec GT24P128E | ||
| Actuator | Onsemi LC898219XI | ||
| OIS driver | CML CM401 | ||
| Wide camera | Sensor | Sony IMX582 | |
| EEPROM | Giantec GT24P64A | ||
| Actuator | Dongwoon DW9800W | ||
UART
The pins are taken from the blueprint with the respective code:
- RXD = TP1102
- TXD = TP1104
- GND = TP4810

Contributors
Users owning this device
- AnaxMorden (Notes: Using 8/256GB (Ubuntu Touch))
- Apollo3zehn (Notes: /e/OS + Plasma Mobile)
- Ariebombarie (Notes: CalyxOS (Android))
- Ayakael (Notes: Main phone, OryxOS))
- BEEDELLROKEJULIANLOCKHART
- Bitals (Notes: /E/OS)
- Brittle
- Cafehaine (Notes: Daily device)
- Deathmist (Notes: Gray, 6/128 GB)
- Electrodeyt (Notes: Gray, 6/128 GB, Ubuntu Touch daily driver)
- Gdstr (Notes: 6/128 GB, postmarketOS)
- GeraltvonNVIDIA (Notes: Ubuntu Touch 20.04 stable)
- Grimler
- Idi112 (Notes: Main phone, currently running Iodé (android))
- Kasesag (Notes: Previous daily device.)
- Michael.lill (Notes: Daily device, but with e/OS currently.)
- Mupuf
- Peerke (Notes: Gnome mobile)
- Pseudomind (Notes: pmOS phosh)
- Rob (Notes: Dual-boot PmOS and Ubuntu Touch)
- Uclydde
- Weeweezzz
- Wrenix (Notes: Borrowed to somebody)
- Z3ntu
- ⬡hexa
Resources
- Repairability and recyclers information on Fairphone 4 - Schematics and other information
- Fairphone 4 - Kernel Source Code
See also
device-fairphone-fp4
linux-postmarketos-qcom-sm6350 (close to mainline)
firmware-fairphone-fp4