Samsung Galaxy S5 (samsung-klte)
![]() Samsung Galaxy S5 | |
Manufacturer | Samsung |
---|---|
Name | Galaxy S5 |
Codename | samsung-klte |
Released | 2014 |
Hardware | |
Chipset | Qualcomm MSM8974PRO-AC Snapdragon 801 |
CPU | Quad-core 2.5 GHz Krait 400 |
GPU | Adreno 330 |
Display | 1080 x 1920 AMOLED |
Storage | 16/32 GB |
Memory | 2 GB |
Architecture | armv7 |
Software | |
Original software | Android 4.4.2 (KitKat) |
postmarketOS | |
Category | testing |
Pre-built images | no |
Mainline | yes |
postmarketOS kernel | 3.4.113 / 5.6 |
Unixbench Whet/Dhry score | 884.3 |
Flashing |
Works |
---|---|
USB Networking |
Works |
Internal storage |
No data |
SD card |
No data |
Battery |
Works |
Screen |
Partial |
Touchscreen |
Works |
Multimedia | |
3D Acceleration |
Partial |
Audio |
Broken |
Camera |
Broken |
Camera Flash |
No data |
Connectivity | |
WiFi |
Works |
Bluetooth |
Broken |
GPS |
Broken |
NFC |
No data |
Modem | |
Calls |
Broken |
SMS |
Broken |
Mobile data |
Broken |
Miscellaneous | |
FDE |
No data |
USB OTG |
No data |
HDMI/DP |
No data |
Sensors | |
Accelerometer |
Broken |
Magnetometer |
No data |
Ambient Light |
No data |
Proximity |
No data |
Hall Effect |
No data |
Haptics |
No data |
Barometer |
No data |
Contributors
Maintainer(s)
Users owning this device
- Alexeymin (Notes: Test subject #last. Old phone in good shape with new battery)
- Bastindo (Notes: 1x white, 1x black)
- BenWolsieffer
- CalcProgrammer1
- Casept (Notes: x2)
- Chmod-rwx (Notes: Dead battery)
- Drebrez (Notes: Power IC dead)
- EnderNightLord (Notes: great condition)
- Ethical haquer (Notes: AT&T variant (G900A))
- Hisssy (Notes: kltechn (China))
- Icenowy (Notes: kltechnduo)
- Ichernev (Notes: Working on mainline kernel support)
- Maccraft123 (Notes: i also got a bunch of random parts)
- Magic RB
- Manty (Notes: Android development)
- Minecrell (Notes: SM-G900F with fa2 panel)
- Mossroy (Notes: unused, with a screen that has brightness issues)
- Nobodywasishere
- Nspire
- Oliver193 (Notes: SM-G900F Vodafone model unlocked)
- Rongrong (Notes:
kltechnduo
(G9006W
). WLAN vanished (nothing relevant indmesg
), SMS (w/ofono
.modemmanager
is broken) works; SIM1 works, SIM2 was not tested. WARNING: DO NOT TRY TO FLASHlk2nd
TOkltechnduo
. IT CANNOT BOOT AT ALL!) - Segfault
- Selfisekai
- SnappedAll (Notes: lineageos 18.1, daily driver)
- TPJS (Notes: 6x (all have no screen; two are running PMOS and one is probably dead))
- TryzenAlpensky (Notes: working)
- Unrznbl (Notes: 2022-09-21 heimdall fails to flash)
- V6lhost (Notes: Works fine until I disassembled it)
- Vaulster
- Wurzel3
- Xtex (Notes:
kltechnduo
(G9008W
)) - Yifei (Notes: new battery)
Kernels comparision
There are two kernels packaged for samsung-klte in postmarketOS: downstream caf-based 3.4.113 and mainline. Supported features are different between them, for detailed info see full Component_support_table below. Short features comparison:
Component | Downstream 3.4 kernel | Mainline kernel |
---|---|---|
USB Networking | Y | Y |
Touchscreen | Y | Y |
Display | P (only framebuffer) | P (msm8974 has issues) |
WiFi | Y | Y |
Xwayland | Y | Y |
Battery | Y | P (Percentage reporting works, no charger driver yet) |
3D Acceleration (GPU) | N | Y |
Sensors | N | N |
Audio | N (might be possible) | N |
Everything else | N/untested | N/untested |
How to enter flash mode
Press and hold
+ + simultaneously. Then click to confirm.How to enter recovery mode
Press and hold
+ + simultaneously.Installation
First, install pmbootstrap.
Setup device to be used:
$ pmbootstrap init
...
Vendor [samsung]: samsung <- enter this
Device codename [i9100]: klte <- enter this
Kernel [downstream]: downstream <- you probably want downstream for now
User interface [weston]: <- choose any UI by your preference
...
Build the rootfs image:
$ pmbootstrap install
Then in order to flash it put your device in download mode, and plug it in USB. Then do:
$ pmbootstrap flasher flash_rootfs
Hold "Volume down" + "Home" buttons at the end of the process,
so that when phone reboots put it in flashing mode again
$ pmbootstrap flasher flash_kernel
This time, don't hold any button, let it reboot to Linux!
Additional info
Useful helper scripts
Default installation includes a couple of useful scripts to be used from a terminal: battery-status
and set-brightness
. battery-status
allows you to check for battery charge level, and set-brightness
allows to view/set lcd backlight brightness in range 0-255.
samsung-klte:~$ battery-status 25 samsung-klte:~$ set-brightness 255 samsung-klte:~$ sudo set-brightness 20 20
Mainlining Notes
Power IC
The phone uses max77804k MFD (Multi Function Device) IC to handle charging, extcon (cable detect), vibrator, flash led. This device is not in mainline, but it is very similar (i.e the same) to max77693 in register layout. In the next paragraph I'll refer to max77804k code as downstream and max77693 code as upstream.
- Charging : downstream charging code is scary. Mainline code only reads info, and doesn't charge, so a brave soul might be able to figure out a minimal setup that does charge the phone.
- Extcon : downstream extcon is not too bad, and it is trivial to follow the basic use cases and ensure they are ported correctly. Mainline code is different and writes different values for diffrent use cases, but following a similar structure it can be made to behave.
- Flash Leds : these are pretty straight forward, the existing mainline code is a bit weird, but I wrote a port of downstream and it does work for the most part.
- Vibrator : the mainline code is for a different kind of vibrator. It shouldn't be too hard to port the downstream code.
USB
At the moment usb-networking works only the first time it is plugged, and only if the (experimental) max77804k is not enabled.
There are 2 different blocks for USB on the klte. One has a good driver, and manages the somewhat working usb networking -- let's call it simple. But if the max77804k driver is enabled, it switches to the other IP block which does not have mainline drivers -- let's call it complex. Downstream only has code for the complex block.
Drivers for the complex block are present on newer SoCs from qualcomm, but at least to me, they look different than the downstream code (downstream doesn't have the notion of phy's, and this is a pretty big deal). So this could be a simple fix, but likely isn't.
Another possible approach will be to somehow let the simple block handle all the USB, but without documentation on max77804k/usb blocks this is pretty hard.
Graphics/Display
There is mainline support for the GPU with 3D Acceleration. kmscube works.
If you run phosh or plamo, you'll "crash" the display. The phone continues to work, so this shouldn't be too hard to figure out. Check this issue: https://gitlab.com/postmarketOS/pmaports/-/issues/424
If you just let the phone sit, even with no ui (terminal cursor blinking) the whole phone hard freezes, including usb networking, wifi networking, uart console. And there is no warning in dmesg.
Parts Bin code
max77693 to max77804k port (incl some usb work): https://gitlab.com/ichernev/linux-postmarketos/-/tree/max77693-update
max77804k with leds only: https://gitlab.com/ichernev/linux-postmarketos/-/tree/max77804k
Running on pure mainline
At the moment (5.6), if you want to use real mainline (from torvalds tree), you'd need this patch:
Patch:
I won't be surprised if more issues pop up in the future, as nobody is really testing for regressions on phones.
Partition layout
Partition layout:
Component support table
Component | Codename | Mainline kernel | Since when | Downstream 3.4 kernel |
---|---|---|---|---|
Debug serial | msm_serial /dev/ttyMSM0 | Working | v4.17-rc1 | yes, /dev/ttyHSL0 |
Volume & home buttons | gpio-keys | Working | 5.8 | yes |
Regulator nodes | pma8084, Maxim max77826 | Working | 5.8 | yes |
Internal storage | sdhci-msm | Working | 5.8 | yes |
SD card storage | sdhci-msm | Working | 5.11-rc1 | yes |
USB Networking | usb_dwc3_qcom | Working | 5.8 | yes |
Display | panel-simple | Working | In pmOS kernel fork | yes |
Touchscreen | synaptics rmi4-i2c | Working | In pmOS kernel fork | yes |
Touchkeys | Cypress tm2-touchkey | Working | In pmOS kernel fork | yes |
Vibration motor | Not working | yes | ||
Notification LED | Panasonic AN30259A | Working | 5.11-rc1 | yes |
WiFi | brcmfmac + PCAL6416A GPIO Expander | Working | 5.11-rc1 | yes |
USB OTG | Not working | yes | ||
Bluetooth | brcmfmac | Not working | no | |
Battery charger | Maxim max77804k | Not working | yes | |
Battery fuelgauge | Maxim max17048 | Working | 5.11-rc1 | yes |
GPU | drm_msm | Working | in pmOS kernel fork | works with libhybris (test_hwcomposer_7_1_caf) |
Audio | Not working | with libhybris (pulseaudio-modules-droid) | ||
Modem | qcom-q6v5-mss | Not working | powers up with libhybris | |
Sensors | Not working | yes (libhybris's test_sensors) |
Links
postmarketOS packages:
Mainline kernel patches:
- initial dts https://patchwork.kernel.org/patch/10150807/
- usb-net, storage, hwkeys dts https://lore.kernel.org/patchwork/project/lkml/list/?series=438265
- max77826 driver https://lore.kernel.org/patchwork/project/lkml/list/?series=438450
- max17048 fuelgauge driver https://lore.kernel.org/patchwork/project/lkml/list/?series=447534
Development branch:
- https://gitlab.com/postmarketOS/linux-postmarketos/tree/old-4.17.0-rc3/qcom , old 4.17 kernel, commits by drebrez
- https://github.com/drebrez/linux/tree/samsung-klte (old repo)
Extra:
- Full phone specifications
- Samsung Galaxy S5 Teardown
- UART guide
- Demo of Samsung klte running Plasma Mobile
- Plasma Mobile Kirigami Gallery demo on samsung-klte
Photos
-
Weston
-
Xfce4 UI
-
UART debugging
-
Plasma Mobile homescreen
-
Plasma Mobile top panel
-
Plasma Mobile Index file manager
-
klte x2
-
Android processes running inside lxc container