Difference between revisions of "PINE64 PinePhone (pine64-pinephone)"
(Added some more information on how to interact with the modem.)
(→Modem: ofonoctl is in the binary repo now)
|Line 273:||Line 273:|
pinephone:~# sudo apk add
pinephone:~# sudo apk add ofonoctl
pinephone:~# ofonoctl wan --connect --append-dns
pinephone:~# ofonoctl wan --connect --append-dns
Revision as of 20:04, 14 February 2020
The PinePhone is a smartphone by PINE64. The postmarketOS vendor and device names are "pine64" and "pinephone" respectively. The back panel can be lifted off by pulling at the notch on the bottom-right corner of the phone. This exposes the battery, microSD and SIM slots, and dipswitches. It comes with a 3000mAh battery and uses the same form-factor as the Samsung J7 for replacement.
The recommended installation procedure is installing to a microSD card by following the Installation Guide and to pass "--sdcard=/dev/(...)" to "pmbootstrap install".
postmarketOS can be installed onto the eMMC by booting a Linux distribution on the phone first and doing the installation process via pmbootstrap on the phone directly:
- Install pmbootstrap and its dependencies on the phone on any Linux distribution booted via the microSD card
- Follow the Installation Guide until "Installation and flashing"
- Run "pmbootstrap install --sdcard=/dev/mmcblk(...)"
Installing postmarketOS on the eMMC directly from a computer via FEL is also supported. This requires the user to enable FEL mode, the boot-tools to mount the eMMC as mass storage are currently however not compatible.
The PinePhone has a serial port in the headphone connector, it's activated by the 6th contact on the dipswitch. If the switch is on then the headphone connector is in audio mode, if it's off then it's in UART mode.
The uart is 115200n8
The pinout for the serial connector on the headphone jack is:
- Tip: RX
- Ring: TX
- Sleeve: GND
The serial connection is 3.3V
There's a 6 contact dipswitch on the back of the phone underneath the back cover. The 6 switches are for enableing/disableing hardware components. The switch has tiny numbers 1-6 beneath the contacts, moving the contact up sets that contact on.
|1||Modem disabled||Modem enabled|
|2||Wifi/BT disabled||Wifi/BT enabled|
|3||Microphone disabled||Microphone enabled|
|4||Rear camera disabled||Rear camera enabled|
|5||Front camera disabled||Front camera enabled|
|6||Headphone UART mode||Headphone audio mode|
There is a 2x3 grid of pogo pins on the back of the PinePhone for connecting a back cover with extra hardware like an extended battery case or a keyboard case. The pinout for this connector:
the USB5v line is meant to charge the phone and the 3v3 is to power peripherals to the phone. The I2C and interrupt lines have pull-ups on the phone side.
|Rear camera||OmniVision OV5640||VIDEO_OV5640|
|Camera flash||SGMICRO SGM3140||LEDS_SGM3140|
|Front camera||GalaxyCore GC2145||Nope|
|Ambient light / Proximity||SensorTek STK3335||STK3310|
|Volume buttons||Buttons connected to the KEYADC||KEYBOARD_SUN4I_LRADC|
|Power button||X-Powers AXP803||INPUT_AXP20X_PEK|
|Battery fuel gauge||X-Powers AXP803||BATTERY_AXP20X|
The cameras both share the csi-0 bus. Currently only the rear camera (OV5640) has mainline linux support.
It's also not clear how the camera switching would work on the software side, the current issue is that the sunxi csi driver doesn't support multiple camera endpoints.
The camera hardware pipeline is controlled with
media-ctl, the result is on
pinephone:~# media-ctl -d /dev/media1 --set-v4l2 '"ov5640 2-003c":0[fmt:UYVY8_2X8/1280x720]' pinephone:~# ffmpeg -s 1280x720 -f video4linux2 -i /dev/video1 -vframes 1 selfie.jpg
The camera flash consist out of a SG Micro SGM3140 "500mA Buck/Boost Charge Pump LED Driver" and a EHP-C04 LED.
The driver supports Flash and Torch mode, the first being brighter but only for about 300ms, when it switches to Torch mode. Torch mode is lower brightness but can be turned on continuously.
# Turn on Flash, wait 0.3s, turn off echo 1 > /sys/class/leds/sgm3140-flash/flash_strobe sleep 0.3 echo 0 > /sys/class/leds/sgm3140-flash/flash_strobe
# Turn on Torch echo 1 > /sys/class/leds/sgm3140-flash/brightness # Turn off Torch echo 0 > /sys/class/leds/sgm3140-flash/flash_strobe
The wifi uses the rtl8723cs driver and is functional. There is still an issue with the driver not reloading correctly when the SoC is put into suspend mode, this can be worked around by reloading the kernel module:
pinephone:~# sudo rmmod 8723cs pinephone:~# sudo modprobe 8723cs
The bluetooth connection is handled by the wifi chipset. It is functional but there is no integration in Plasma Mobile yet. To pair a bluetooth device start the bluetoothd service and use bluetoothctl to connect.
pinephone:~# sudo service bluetoothd start pinephone:~# bluetoothctl # scan on [NEW] 00:11:22:33:44:55 # pair 00:11:22:33:44:55
Receiving and sending text messages works, The calls work but there are some issues left with the audio routing. Mobile data is functional.
To bring up mobile data run the following commands:
pinephone:~# sudo apk add ofonoctl pinephone:~# ofonoctl wan --connect --append-dns
In order to connect to the serial console of the modem, you need a terminal application. One option is to use
# apk add minicom
Connect to the console by issuing:
# minicom -D /dev/ttyUSB2
AT returns OK:
ATI returns some version information from the modem:
ATI Quectel EG25 Revision: EG25GGBR07A07M2G OK
AT+QDAI (Digital Audio Interface Configure) is used to configure the digital audio interface.
AT+QDAI? returns the current configuration:
AT+QDAI? +QDAI: 3,0,0,4,0,0,1,1 OK
All sensors work and are accessible as Industrial I/O (iio) devices in Linux. To query the data you can cat the files in `/sys/bus/iio/` to make the kernel module query the sensors
pinephone:~# cat /sys/bus/iio/devices/iio\:device0/name mpu6050 pinephone:~# cat /sys/bus/iio/devices/iio\:device0/in_accel_z_raw -17594 pinephone:~# echo "Verified gravity still exists"
# Activate LED echo 1 > /sys/class/leds/$COLOR/brightness # Deactivate LED echo 0 > /sys/class/leds/$COLOR/brightness
You may turn on and off the blue led by issuing:
# echo 1 > /sys/devices/platform/leds/leds/pinephone\:blue\:user/brightness # echo 0 > /sys/devices/platform/leds/leds/pinephone\:blue\:user/brightness
Make sure you run these commands as root (
sudo echo 1 > /sys/devices/platform/leds/leds/pinephone\:blue\:user/brightness, won't work.
Sound output should work after unmuting
AIF1 Slot 0 digital
Start by making sure alsa-utils are installed:
$ sudo apk add alsa-utils
You may use amixer, or alsamixer to unmute the required channels, and to control the volume. Test the sound output by issuing:
$ speaker-test -c3