Xiaomi Redmi 4 Prime (xiaomi-markw)
This device is supported as part of a generic port. Refer to Generic MSM8953 (qcom-msm8953) for installation instructions and more information. |
![]() xiaomi-markw showing neofetch | |
Manufacturer | Xiaomi |
---|---|
Name | Redmi 4 Prime |
Codename | xiaomi-markw |
Released | 2016 |
Type | handset |
Hardware | |
Chipset | Qualcomm Snapdragon 625 (MSM8953) |
CPU | Octa-core 2 GHz Cortex-A53 |
GPU | Adreno 506 |
Display | 1080x1920 IPS |
Storage | 32 GB |
Memory | 3 GB |
Architecture | aarch64 |
Software | |
Original software | Android (MIUI) |
Original version The version the device was shipped with. |
6.0.1 |
postmarketOS | |
Category | community |
Pre-built images Whether pre-built images are available here. |
yes |
pmOS kernel The kernel version that runs on the device's port. |
mainline |
Generic port | Generic MSM8953 (qcom-msm8953) |
Flashing 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
|
Battery Charging and battery level reporting works |
Works
|
Screen 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 |
Broken
|
IR TX |
Broken
|
Connectivity | |
WiFi |
Works
|
Bluetooth |
Works
|
GPS |
Partial
|
Modem | |
Calls |
Works
|
SMS |
Works
|
Mobile data |
Partial
|
Miscellaneous | |
FDE Full disk encryption and unlocking with unl0kr. |
Works
|
USB OTG USB On-The-Go or USB-C Role switching |
Works
|
Sensors | |
Accelerometer Auto screen rotation works in desktops e.g. Phosh or Plasma Mobile |
Works
|
Magnetometer Sensor to measure magnetism |
Works
|
Ambient Light |
Partial
|
Proximity |
Works
|
Haptics |
Works
|
This device is based on the Snapdragon 625. See the SoC page for common tips, guides and troubleshooting steps |
Device Notes
Touch Screens
Touch Screen | Status |
---|---|
atmel,maxtouch | Partial |
edt,edt-5336 (edt,edt-ft5x06) | Works |
Both variants of touch screen use the same pins, so we can't just enable both drivers at a same time. Starting from 6.7.9, we let lk2nd to enable a device tree node of a touch screen. The touch screen won't work until you update lk2nd. For now, lk2nd can only enable focaltech, so you need to build lk2nd by youself if you have atmel (just comment ft and uncomment atmel in dts/msm8953-xiaomi-markw.dts in the sources)
Modem
Voice calls are working, SMS - untested yet, but should work. Mobile data doesn't work for me (vipaol), but maybe you're lucky. Mobile data works fine (apertureua), was this fixed?
Sound
Appears to struggle from a broken PipeWire config on UIs that use it as of March 2025, see Sxmo/Sound
Cameras
Both sensors are working in megapixels, but camera switching doesn't work for an unknown reason (probably it used to be a bug of megapixels, but now we also have some problems with VFEs in the kernel). The config for megapixels is below: ... Now megapixels have config for markw out of the box.
Sometimes numbers of i2c buses with the cameras can be different (aliases in i2c should help, but the maintainer is lazy) and they should be changed in the config ("media-links" lines).
markw:~$ media-ctl -p | grep -E "s5|ov"
<- "s5k3l8 3-002d":0 [ENABLED,IMMUTABLE]
<- "ov5670 4-0036":0 [ENABLED,IMMUTABLE]
- entity 184: ov5670 4-0036 (1 pad, 1 link)
- entity 186: s5k3l8 3-002d (1 pad, 1 link)
# we can see rear camera on i2c-3, and front on 4
None of vfeX_rdiX other than vfe0_rdi0 will work on recent kernel versions, so we can't use both cameras at a same time because we have only one working "output channel". Also csid2 doesn't work, but csid0 and csid1 work.
Sensors
Connected to i2c-gpio
Sensor | Model | Status |
---|---|---|
Accelerometer/Gyroscope | bosch,bmi120 (bosch,bmi160) | Works |
Light/Proximity | liteon,ltr559 (liteon,ltr501) | Works |
Magnetometer | yamaha,yas537 (yamaha,yas530) | Works |
UART
The working voltage is 1.8 V. Warning: the test points are very small, soldering is not recommended. It's probably better to just hold a wire with a hard thin end with your hands.
See also: Serial debugging
How to enter flash mode
[Power] + [Vol-] to fastboot mode
Installation
The device now uses the generic device port. You need to select qcom-msm8953 (Generic MSM8953) instead of xiaomi-markw. |
WARNING: Installation on the internal memory will erase all your data! |
Pre-built images
Download the image and lk2nd for Generic MSM8953. Once downloaded, extract the files with unxz
or any compatible archiver.
Step 1. Flash rootfs:
- - To SD-card
-
- The downloaded rootfs img is a sparse img. You need to convert it to a normal img before flashing it to an SD-card:
$ simg2img <...>-qcom-msm8953.img nonsparse-converted.img
- Then just write it using a tool for writing images.
- The downloaded rootfs img is a sparse img. You need to convert it to a normal img before flashing it to an SD-card:
- - To internal memory
-
$ fastboot flash userdata <...>-qcom-msm8953.img
Step 2. Flash lk2nd:
$ fastboot flash boot <...>-lk2nd.img
lk2nd is a second stage bootloader that is used for booting the generic image and for some device-specific hacks. It boots the kernel with initramfs from the "pmOS_boot" subpartition using extlinux.
If you see < waiting for any device >
, try running as sudo
and restart your device into fastboot mode again.
Manual build
The device now uses the generic device port. You need to select qcom-msm8953 instead of xiaomi-markw. |
Step 1. Flash rootfs:
- - To SD-card
-
- Find your SD-card:
lsblk
- Install (change /dev/sdX to your card)
$ pmbootstrap install --sdcard /dev/sdX
- Find your SD-card:
- - To internal memory
-
$ pmbootstrap install $ pmbootstrap flasher flash_rootfs
Step 2. Flash lk2nd:
$ pmbootstrap flasher flash_lk2nd
lk2nd is a second stage bootloader that is used for booting the generic image and for some device-specific hacks. It boots the kernel with initramfs from the "pmOS_boot" subpartition using extlinux, so you don't need to use flash_kernel
Users owning this device
- Adomerle (Notes: On pmOS)
- ApertureUA (Notes:
Atmel with green lightsaber stripe in the middlefocaltech, unlocked with aboot patch) - Vipaol (Notes: pmOS,Ebbg+Atmel)