Wileyfox Swift (wileyfox-crackling)

Wileyfox Swift is a fairly popular device that was initially shipped with CyanogenOS. It is based on Qualcomm Snapdragon 410 SoC which has great mainline Linux support.
This device, as well as multiple other devices under a common name "Google Android One 2nd Gen (google-seed)" all use same "Longcheer l8150" design, so all of those devices are supported with this port.
== Contributors ==
* TravMurav
* Minecrell
== Maintainer(s) ==
* TravMurav
* Minecrell
== Users owning this device ==
== How to enter flash mode ==
* Recovery: Power on the device with both Power and Volume Down buttons.
* Stock fastboot: Power on the device with both Power and Volume Up buttons. You only need this to install lk2nd.
* lk2nd Fastboot: Power on the device. After it vibrates/the display shows up, hold Volume Down.
== Installation ==
# You need to enable OEM unlocking in the developer settings of your android/cynogen installation. Otherwise, the Cynogen recovery will refuse to boot. However, you are allowed to flash the rootfs. Kernel, Recovery and bootloader not.
# You may need to unlock the bootloader with fastboot oem unlock-go. (This may be the only step required on seed devices before you can flash lk2nd)
# Make sure that you have the latest Cyanogen bootloader. If necessary, you can use the flash-radio.sh script from a fastboot update package available at https://cyanogenupdatetracker.com/downloads/.
# Install lk2nd (alternative bootloader that handles certain mainline quirks like setting up the WiFi/BT MAC addresses. Keep in mind that you have to install pmOS components with lk2nd, not original fastboot)
# Follow Qualcomm_Snapdragon_410/412_(MSM8916)#Installation.
== Known Bugs and Workarounds ==
* Multi-touch doesn't work
This is a known issue: The touch controller sends the events in a different format that the driver can decode. Fix is WIP.
== Battery and charging ==
Wileyfox Swift uses LBC charger in pm8916. A simple driver was added to the kernel to enable and configure charging. Compared to downstream driver that makes some decisions in software, this driver leaves charging entirely to hardware since, according to documentation, LBC can work on it's own after it was initially configured.
This device uses "Voltage Mode BMS" (VM-BMS) to estimate State Of Charge (SOC) of the battery. Compared to other devices that have additional hardware (Fuel Gauge) to measure SOC, VM-BMS is mostly implemented in software. Accurate SOC estimation requires complex math algorithms and, ideally, should be implemented as userspace program. As a temporary solution, vm-bms driver was implemented. It uses simple, less accurate algorithm to estimate SOC. This algorithm works well enough to show approximate SOC in normal use but may fail in some unusual cases.
== USB Host (OTG) ==
This device doesn't support OTG so it can't provide power or even detect normal OTG adapters but it is still possible to use USB in host mode. This requires custom adapter that will provide power to your USB device. In order to detect such adapter we abuse the fact that USB ID pin in microUSB is used to force EDL mode but since it is pulled down we can't detect normal OTG adapters with it. (USB_ID on those adapters is connected to ground when we can only detect 5v on this pin) So your custom adapter not only should provide external power but also should provide logical-high signal to USB_ID. This can make such adapter dangerous for other devices so you should avoid plugging it anywhere else. You can put a resistor between 5v and USB ID to make it a bit safer. Please note that device will boot into EDL mode if you leave such adapter in while powering on the device. EDL have no visible indication and you will need to pull battery out in order to reboot.
== Edge testing list ==
The following list is taken from the Release testing template and is intended for tracking the device support level in better detail.
Device testing list.
- [✅] Device boots and it's possible to login (password: 147147)
##### Hardware:
- [✅] Automatic screen rotation works
- [✅] Brightness control works
 - [✅] Light sensor (Automatic brightness) works
- [🟨] Touch (with multitouch) works (MT is broken)
- [✅] Buttons work
- [✅] Haptic feedback works
- [✅] Notification led works 
- [✅] Fuel gauge works
 - [✅] Charger detected and charging works 
- [🟨] USB OTG / host mode (HW doesn't support OTG, workaround is used)
- [✅] Torch / flashlight
- [✅] GPS works
 - [✅] Magnetometer or compass works
##### Chipset specific features:
- [✅] SMP works (all CPU codes detected)
 - [🟨] Frequency scaling works, not full range
- [🟥] Device suspend works
- [🟨] Hardware video encoder/decoder works (encoder doesn't work, issues with the decoder)
- [🟨] GPU/3D acceleration works (minor issues in some applications)
##### Sound:
- [✅] Speakers, headphones and earpiece work
- [✅] Headphones selected automatically when plugged in
- [✅] Microphone works
##### Connectivity:
- [✅] Bluetooth
- [✅] WiFi
- [✅] Cellular:
 - [✅] Mobile data works
 - [✅] SMS works
 - [✅] Making a call works
 - [✅] Receiving a call works
 - [✅] Proximity sensor works
##### Camera: (no drivers yet)
- [🟥] Front camera
- [🟥] Rear camera
 - [🟥] Lens actuator (autofocus) works
 
== See also ==
* Device on LineageOS wiki
* LineageOS Device on GitHub
* Initial merge request
* Device package
* msm8916 mainline kernel package
* Mainline kernel tree for msm8916 devices