Vivax TPC-9150

= Identification =

When booted into Android, open the "Settings" app and choose "About tablet". You will find the following information:

Model number: TPC-9150 Firmware version: v2.0 Kernel version: 3.4.39 Build number: wing_um723-eng 4.33 JDQ39 20140322 test-keys



= Sunxi support =

Legacy kernel support
Use the default sunxi kernel with the following FEX file

Mainline kernel support
Not yet merged.

Clone the Linux kernel from https://github.com/torvalds/linux

Apply the following patch (i.e. )

After applying that run the following:

Then afterwards use the desired  file with the latest mainline kernel.

Support status
Things that work:
 * Accelerometer (hack required)
 * Audio input (only via internal microphone)
 * Audio output (only via headphone jack)
 * SD card
 * USB charging
 * Battery indicator
 * Battery charging
 * Power management (via AXP209)
 * Touchscreen and touchscreen wakeup
 * Included LCD display
 * Ability to control LCD brightness
 * Wi-Fi
 * Bluetooth
 * UART
 * HDMI
 * HDMI audio
 * Mali GPU (via lima driver)
 * Power button
 * USB slave (g_cdc and g_ether) work
 * Suspend
 * Charger hotplugging

Things that DO NOT work:
 * The built-in speaker
 * NAND (the driver lacks MLC support and thus fails to initialize the NAND chip, although it properly recognizes it)
 * "ESC" key
 * HDMI hotplugging (but firmware already probes manually)
 * Both cameras

Things that are not tested (and probably don't work):
 * USB OTG

Mainline U-Boot
Not yet merged.

Apply this patch with a freshly cloned U-Boot repository.

For building mainline U-Boot, use the Vivax_TPC9150 target.

UART, LCD, SD card work, nothing else does.

Manual build
Use the information in "Mainline kernel" and "Mainline U-Boot" along with the manual build howto, in order to build a functioning Linux system.

= Tips, Tricks, Caveats =

FEL mode
Following the FEL guide treat the "ESC" key as the FEL button.

Otherwise build an FEL SD card, using the same FEL guide and with a needle press the reset button, located on the back of the tablet.

Reset button
The reset button (on the back side of the device) reboots the device.

Internal µSD card
The device has an internal µSD card port that shows as mmcblk0. This port has boot priority over NAND.

Bad Wi-Fi range
The included Wi-Fi driver in most distros rtl8xxxu has really bad range on this device. It works, but Wi-Fi tends to cut off often.

In order to improve range use this driver instead: https://github.com/lwfinger/rtl8723au

Follow it's instructions, then blacklist the included rtl8xxxu driver.

Then to prevent the Wi-Fi connection from cutting off randomly, put the following into the

Suspend mode
The wake-up issue was fixed. However, the device can only be woken up by the touchscreen, as I was unable to find any interface from AXP209 to wake up the tablet.

How I fixed the issue: Anyway I've found this trick.

The original issue was that once the device was in suspend mode, the  bus would get stuck and the device will be unable to be controlled with. In order to fix this you'll need to add  to your DTS like so:

&i2c2 { status = "okay";

ft5x: touchscreen@38 { compatible = "edt,edt-ft5406"; reg = ; interrupt-parent = <&pio>; interrupts = <7 21 IRQ_TYPE_EDGE_FALLING>; /* PH21 */

touchscreen-size-x = ; touchscreen-size-y = ;

wake-gpios = <&pio 1 13 GPIO_ACTIVE_HIGH>; /* PB13 */

wakeup-source; bias-pull-up; }; };

Touchscreen does not work!!!! Help!
Please check that there aren't any udev rule files in  arbitrarily setting a libinput calibration matrix.

The accelerometer situation
For some reason the driver won't probe (or load) itself at boot, so you'll need to do it manually. This is a relatively simple process, just follow these steps:
 * 1) Make sure that the   module is available in your kernel
 * 2) Manually probe it with:
 * 3) It should appear under
 * 4) To make changes persist across reboots, you'll need to create two files
 * 5) Create   with the content
 * 6) Create   with the content
 * 7) Reboot and see whether it worked, if it didn't then just run modprobe on each boot

The screen's a bit shifted, what's going on?
Basically there isn't a correct panel driver included into the current Linux source tree. Luckily, I have been successful in obtaining the correct LCD panel settings, but the problem is that I do not know the make or model of the LCD which would probably invalidate my kernel patch. Not only that, but manually patching this would require a kernel to be rebuild, which is too much effort in my opinion.

So the panel parameters that are available in the current patch are "good enough" in most use cases.

= Adding a serial port (voids warranty) =

Device disassembly
In order to open the device, there are two Phillips screws to remove from the side with the connectors. The pins from the white part are easy to pop but it is advised to use a a plastic tool, starting from opposite of the side with the connectors. The front panel is very fragile and pressuring the screen to pop open the pins can easily end up in breaking the touch screen panel.

Locating the UART
The UART pads are located on the front side of the PCB. The UART pads are labeled and large enough so that soldering wires to those UART pins becomes easy.