Jump to content

ASUS Transformer Prime (asus-tf201): Difference between revisions

From postmarketOS Wiki
Okias (talk | contribs)
mNo edit summary
update kernel repo link and version
 
(81 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:Devices with known UART pinout]]
{{Infobox device
{{Infobox device
| manufacturer = Asus
| manufacturer = Asus
Line 6: Line 7:
| imagecaption =  
| imagecaption =  
| releaseyear = 2011
| releaseyear = 2011
| originalsoftware = Android 3.2 to Android 4.1
| category = community
| chipset = [[Nvidia Tegra 3 (tegra30)|Nvidia Tegra 3 T30]]
| originalsoftware = Android
| originalversion = 3.2
| extendedversion = 4.1
| orginalkernel = 3.1.10
| chipset = Nvidia Tegra 3 (T30)
| cpu = Quad-core 1.4 GHz Cortex-A9
| cpu = Quad-core 1.4 GHz Cortex-A9
| gpu = NVIDIA ULP GeForce GPU 12 cores
| gpu = NVIDIA ULP GeForce GPU 12 cores
Line 15: Line 20:
| architecture = armv7
| architecture = armv7
| booting = yes
| booting = yes
| whet_dhry = 1208.1
| type = detachable
| whet_dhry = 1279.1
| genericdevice=Nvidia Tegra armv7 (nvidia-tegra-armv7)
<!-- the following status_* questions should be answered with Y - yes, P - partial, N - no, or "" (blank) - for untested or unknown -->
<!-- the following status_* questions should be answered with Y - yes, P - partial, N - no, or "" (blank) - for untested or unknown -->
| status_usbnet = Y
| status_usbnet = Y
Line 26: Line 33:
| status_mainline = Y
| status_mainline = Y
| status_battery = Y
| status_battery = Y
| status_3d = P <!-- Hardware accelerated 3D graphics (e.g. with freedreno) -->
| status_3d = P
| status_accel = Y
| status_audio = Y
| status_audio = P
| status_bluetooth = Y
| status_bluetooth = Y
| status_camera = <!-- Taking photos and videos works. -->
| status_camera = N
| status_gps = -
| status_gps = N
| status_nfc = -
| status_nfc = -
| status_mobiledata = -
| status_mobiledata = -
| status_sms = -
| status_sms = -
| status_calls = -
| status_calls = -
| status_otg = Y
| status_otg = -
<!-- Sensors -->
| status_accel = Y
| status_magnet = Y
| status_light = Y
| status_proximity = -
| status_hall = Y
| status_barometer = -
| status_powersensor = -
<!-- Misc -->
| status_cameraflash = -
| status_irtx = -
| status_irtx = -
| status_irrx = -
| status_trustzone = Y
| status_fossbootloader = Y
| status_usba = Y
| status_hdmidp = Y
| status_keyboard = Y
| status_touchpad = Y
| status_haptics = Y
| status_ethernet = -
| status_stylus = -
<!-- U-Boot -->
| status_uboot = yes
| status_uboot_primary = Y
| status_uboot_secondary = Y
| status_uboot_mainline = Y
| status_uboot_internalstorage = Y
| status_uboot_sd = Y
| status_uboot_usbhost = Y
| status_uboot_usbperipheral = Y
| status_uboot_screen = Y
| status_uboot_keyboard = N
| status_uboot_buttons = Y
| pmoskernel = mainline grate
| pmoskernel = mainline grate
}}{{Based on SoC|Nvidia_Tegra_3_(tegra30)|Tegra 3}}
}}{{Based on SoC|Nvidia_Tegra_3_(tegra30)|Tegra 3}}
== Contributors ==
* Clamor
* Ion Agorria
=== Users owning this device ===
{{Device owners}}
== Unlocking ==
== Unlocking ==
The first step to do anything with the device is unlocking, with this device its done by sideloading the unlock apk from ASUS and clicking a few buttons in the app. The apk can be found on [https://dlcdnets.asus.com/pub/ASUS/EeePAD/TF201/UnLock_Device_App_V6.apk the ASUS support page].
The first step to do anything with the device is unlocking, with this device its done by sideloading the unlock apk from ASUS and clicking a few buttons in the app. The apk can be found on [https://dlcdnets.asus.com/pub/ASUS/EeePAD/TF201/UnLock_Device_App_V6.apk the ASUS support page].
==== Bootloader unlock fails with Unknown error ====
==== Bootloader unlock fails with Unknown error ====
Contact ASUS tech support, describe the issue and provide them with information they'll request. Bootloader unlock may become available within 1-2 days after the request.
Contact ASUS tech support, describe the issue and provide them with information they'll request. Bootloader unlock may become available within 1-2 days after the request.
Instead of unlocking bootloader, you can also go ahead and replace it with U-Boot.


== Kernel status ==
== Kernel status ==
Line 53: Line 101:
=== Mainline (Grate) ===
=== Mainline (Grate) ===


* Baseline kernel sources on master: https://github.com/grate-driver/linux
* Baseline kernel sources on master: https://gitlab.com/grate-driver/linux
* Proper dts for TF201 is added
* Proper dts for TF201 is added
* Version: 5.16.0-rc4
* Version: 6.6.22
* Status: Boots. Almost full support.
* Status: Boots. Almost full support.
== Installation ==
[[File:PXL_20210623_084712678.jpg|thumb|mini|left|250px|pmOS with mate running on Prime]]
=== How to enter flash modes ===
Turn tablet off if it is in the system. Then press POWER and VOL DOWN buttons till you feel the vibration. Then release the POWER only. You will enter the bootloader/fastboot. In bootloader you can navigate with VOL DOWN button and to choose option use VOL UP button.
=== Bootloader version ===
Latest bootloader for TF201 was '''10.4.2.18''' and to use pmOS you need bootloader version of '''10.6.1.27.5''' to reach this you can use flashable via TWRP [https://github.com/clamor95/android_device_unlegacy_recovery/tree/repartition/transformer bootloader packages].
=== Installation process ===
{{note| The bootloader doesn't handle flashing the boot and userdata partition correctly, the official firmware package flashes an "Android blob" to the staging partition with fastboot which triggers an flashing screen on the tablet which copies the data to the correct partitions. pmbootstrap has tools to pack and flash kernel correctly, no worries!}}
Preparing rootfs and flashing kernel:
<syntaxhighlight lang="shell" line='line'>
$ pmbootstrap init
$ pmbootstrap install
$ pmbootstrap flasher flash_kernel
</syntaxhighlight>
==== Flashing rootfs ====
{{note|This may change size of your data partition. You can fix it by resizing partition in TWRP before flashing Android.}}
'''You should proceed very carefully here.'''
When rootfs is larger than approx. 800 MB you can flash it to the /userdata partition ONLY, if rootfs is smaller, you can flash it to /system or /userdata.
Prerequisites: TWRP, at least version 3.3.1-0, binaries for '''10.6.1.27.5''' bootloader are [https://twrp.me/asus/asusTF300T.html here].
First, start TWRP (go to bootloader and choose RCK) and then continue with these instructions
<syntaxhighlight lang="shell" line='line'>
(computer) $ pmbootstrap export
(computer) $ adb shell
(twrp) $ umount /dev/block/mmcblk0p1 <- unmounting /system partition
(twrp) $ umount /dev/block/mmcblk0p8 <- unmounting /data partition
(computer again) $ adb push /tmp/postmarketOS-export/asus-tf201.img /dev/block/mmcblk0p1 <- to flash rootfs to /system partition
'OR'
(computer again) $ adb push /tmp/postmarketOS-export/asus-tf201.img /dev/block/mmcblk0p8 <- to flash rootfs to /data partition
</syntaxhighlight>


== Hardware status (mainline) ==
== Hardware status (mainline) ==
Line 109: Line 118:
| Y
| Y
|Bootloader
|Bootloader
|Open source bootloader [https://github.com/clamor-s/u-boot U-Boot] is available as alternative for stock Asus bootloader and can replace it. Currently U-Boot still does not reached its full potential, but it successfully boots mainline kernel.
|Open source bootloader [https://github.com/clamor-s/u-boot U-Boot] is available as alternative for stock Asus bootloader and can replace it. U-Boot can not boot downstream kernel due to TrustZone problem.
|-
|-
| Y
| Y
Line 117: Line 126:
| Y
| Y
|HDMI output
|HDMI output
|HDMI works, but output is 1080p due to Tegra 3 limitations.
|HDMI works, but max output is 1080p due to Tegra 3 limitations.
|-
|-
| Y
| Y
Line 125: Line 134:
| Y
| Y
|USB
|USB
|One full size USB 2.0 in dock or via 40pin adapter.
|One full size USB 2.0 in dock or via 40 pin adapter.
|-
|-
| Y
| Y
Line 138: Line 147:
|GPS
|GPS
|Broadcom GPS [https://redmine.replicant.us/projects/replicant/wiki/BCM4751 BCM4751] is used. Device itself has weak signal.
|Broadcom GPS [https://redmine.replicant.us/projects/replicant/wiki/BCM4751 BCM4751] is used. Device itself has weak signal.
|-
| Y
|GPS
|U-Blox 6 in GPS Extension Kit ''(see below)''
|-
|-
| Y
| Y
|WiFi
|WiFi
|Uses Azurewave AW-NH615 BCM4329. Wi-Fi should work out of the box. All needed stuff is included.
|Uses Azurewave AW-NH615 BCM4329. Wi-Fi should work out of the box (best with IWD daemon: apk add iwd; rc-update del wpa_supplicant; rc-update add iwd;). All needed stuff is included. Device may not connect to some networks (in my case it was PC hotspot, to fix this, I have installed IWD on my PC as well). Be aware that WiFi MAC address is not static, though it should not matter for average user.  
|-
|-
| Y
| Y
Line 148: Line 161:
|-
|-
| Y
| Y
| GPIO keys
| GPIO keys/switches
|There are 3 keys on GPIO: Power, Volume up, Volume down.
|There are 3 GPIO keys: Power, Volume up, Volume down.
Additionally GPIO-keys like are LID sensor and Audio dock line-out detect.
And 2 GPIO switches: LID sensor and Audio dock line-out detection.
|-
|-
| Y
| Y
| Vibro
| Vibro
|Transformer Prime has GPIO based vibrator.
|Transformer Prime has GPIO based vibrator. Available via sysfs.
|-
|-
| Y
| Y
| Dock Keyboard
| Dock Keyboard
| Both pad and dock have Nuvoton NPCE795LA0BX embedded controller which handles battery data, charding, leds, keyboard and touchpad. Driver of this EC is mainlined and is fully functional. Keyboard and Touchpad work.  
| Both pad and dock have Nuvoton NPCE795LA0BX embedded controller which handles battery data, charging, leds, keyboard and touchpad. Driver of this EC is mainlined and is fully functional. Keyboard and Touchpad work.  
Alt Gr can be used for alternate multimedia keys instead of escape, fn keys, volumes and delete. Alt GR + Lock changes the default key mode.
Alt Gr can be used for alternate multimedia keys instead of escape, fn keys, volumes and delete. Alt GR + Lock changes the default key mode.
|-
|-
Line 169: Line 182:
|Transformers use Texas Instruments TPS659110 PMIC and TPS62361 core regulator.
|Transformers use Texas Instruments TPS659110 PMIC and TPS62361 core regulator.
|-
|-
| P
| Y
|Sound
|Sound
|Sound codec is RT5631. Kernel driver and tegra_rt5631 glue driver are added to grate master. Sound works only if boot from downstream kexec. Reason unknown. Audio via HDMI works out of the box.
|Sound codec is RT5631. Sound works but UCM are not upstreamed yet. Audio via HDMI works out of the box.
|-
|-
| N
| Y
|Voice processor
|Voice processor
|Transformers use separate Fortemedia FM34NE voice processor. No mainline driver is available. Is used for voice processing and noise cancelling. Currently not used.
|Transformers use separate Fortemedia FM34NE voice processor. Mainline driver prototype is available but is set into constant bypass mode. Requires rework to fit Linux sound system.
|-
|-
| Y
| Y
Line 204: Line 217:


== Participate development ==
== Participate development ==
* sound needs further investigations, issue is common for all transformers;
=== U-Boot ===
* emmc vio voltage is 3.3v when proper should be 1.8v (setting 1.8v brakes emmc);
* legacy android boot.img stuck when loaded via u-boot (u-boot can not establish TrustZone)
 
=== Kernel ===
* emmc vio voltage is 3.3v when proper should be 1.8v (setting 1.8v brakes emmc); MicroSD vdd supply is always on and MicroSD frequency is limited - all 3 are ASUS bootloader bugs, u-boot does not have this bugs;
* BCM4751 GPS is commonly used in devices of this age, although it still does not have proper implementation (nor kernel, nor userspace);
* BCM4751 GPS is commonly used in devices of this age, although it still does not have proper implementation (nor kernel, nor userspace);
* Fortemedia fm34ne has driver prototype, but kernel lacks way to get audio devices state (dsp is used only for internal mic);
 
* u-boot lacks navigation in bootmenu
=== Userspace ===
* add missing indicators for multimedia keys like for brightness
* bind /prop touchpad toggle to userspace indication


== Usability ==
== Usability ==
Line 217: Line 235:


== U-Boot ==
== U-Boot ==
{{Warning|This part is HIGHLY EXPERIMENTAL! DO NOT USE THIS IF YOU DO NOT KNOW WHAT U ARE DOING.}}
{{Warning|This part is HIGHLY EXPERIMENTAL! DO NOT USE THIS IF YOU DO NOT KNOW WHAT YOU ARE DOING.}}


{{note|Further procedure needs pre-made nvflash. Files blob.bin and bricksave.img are only thing that will save you from full brick and allow replace/restore Asus bootloader.}}
{{note|Further procedure needs pre-made nvflash. Files blob.bin and bricksave.img are only thing that will save you from full brick and allow replace/restore Asus bootloader.}}
Line 228: Line 246:
|-
|-
| Y
| Y
|Boot itself
|Primary bootloader
|U-Boot successfully boots when is flashed into EBT partition instead of Asus bootloader. Can be additionally booted via fusée gelée exploit, even in locked state.
|U-Boot successfully boots when is flashed into EBT partition instead of Asus bootloader. Can be additionally booted via fusée gelée exploit, even in locked state.
|-
| Y
|Secondary bootloader
|U-Boot can be chainloaded from both /boot and /recovery partitions.  
|-
|-
| Y
| Y
|Panel
|Panel
|Boot process is shown on panel.
|LVDS panels over DC connection are fully supported. Rudimentary bridge support is present. When chainloaded primary bootloader's panel setup can be reused (simple framebuffer).
|-
|-
| Y
| Y
|MicroSD
|MicroSD
|Fully functional and detectable. Can be used as boot source.
|Fully functional and detectable. Can be used as boot source. Can be mounted from U-Boot.
|-
|-
| Y
| Y
|eMMC
|eMMC
|Hacked but is fully functional. Can be used as boot source.
|Fully functional and detectable. Can be used as boot source. Can be mounted from U-Boot.
|-
|-
| Y
| Y
|Boot kernel
|Boot kernel
|Yes, by default kernel and dtb are booted from 1st partition on sdcard, if nothing found, u-boot will check '''/system''' partition of eMMC. Kernel name must be '''vmlinuz''', dtb - '''tegra30-asus-tf201.dtb''', ramdisk is optional, name is '''uInitrd''' and it must be in u-boot format.
|Yes, and can be highly adjusted with extlinux.conf.
|-
|-
| P
| Y
|Boot menu
|Boot menu
|Native u-boot bootmenu works perfectly fine. It can be called with pressing volume down button on boot. Unfortunately navigation in bootmenu is not properly implemented, so it is useless.
|Native u-boot bootmenu works perfectly fine. It can be called with pressing volume down button on boot.
|-
|-
| Y
| Y
|Power management
|Power management
|Offline charging and charging in u-boot both work and are hw configured. Both power off and reboot options work and are available in bootmenu. If no valid kernel is found tablet will turn off.
|Offline charging and charging in u-boot both work and are hw configured. Both power off and reboot options work and are available in bootmenu. If no valid kernel is found or lid-sensor is active (docked and closed) tablet will turn off.
|-
|-
| P
| Y
|Fastboot
|Fastboot
|Fastboot option is available in bootmenu. It is configured for non write commands for now. Broken.
|Fastboot option is available in bootmenu. All functions operate correctly.
|-
|-
| P
| Y
|Boot from script
|Bricksafe hook (legacy)
|Boot from BCT option is available in bootmenu. It is implemented but not tested.
|U-Boot can successfully generate and restore device specific image of first 3 encrypted partitions. It is identical to one, generated with nvflash command. If you can not perform nvflash, use fusée gelée to launch u-boot from RAM and generate bricksafe. You need to insert blank fat microSD so it can be saved!
|-
|-
| P
| P
|Boot Android
|Boot Android
|Boot Android option is available in bootmenu. It is implemented, LNX partition is default /boot partition. Broken.
|Booting Android kernel can be performed only same way mainline kernel boots. Additionally it must not have CONFIG_TRUSTED_FOUNDATIONS = y and some additional small patches, it can be booted by u-boot.
|-
|-
| P
| Y
|Self update
|Self update
|Self update option is available in bootmenu. It is implemented, broken.
|Self update option is implemented and write is done correctly. Re-crypt is required to be able to self update. Bootloader file has to have name '''u-boot-dtb-tegra.bin''' and be placed on 1st partition of microSD.
|-
|-
|}
|}


Primary, you need to build a u-boot from this source ([https://github.com/clamor-s/u-boot github]) on master branch and tf201_defconfig. Use same GCC as for kernel. When build is finished, you will get a file with name '''u-boot-dtb-tegra.bin'''. This is new bootloader.
Primary, you need to build a u-boot from this source ([https://github.com/clamor-s/u-boot github]) on master branch and transformer_t30_defconfig tf201.config. Use same GCC as for kernel. When build is finished, you will get a file with name '''u-boot-dtb-tegra.bin'''. This is new bootloader.
 
Place u-boot-dtb-tegra.bin into your nvflash folder. Set your device into APX mode and perform
<syntaxhighlight lang="shell" line='line'>
$ sudo ./wheelie --blob blob.bin
$ sudo ./nvflash --resume --download EBT u-boot-dtb-tegra.bin
</syntaxhighlight>
 
And wait till tablet reboots.
 
If you need to restore Asus bootloader, you can find one in stock firmware blob and flash it with same method.
 
== USB Extension Kit ==
As there are signal issues due to the design of the TF201 back-shell, ASUS supplied a GPS Extension Kit for use at the dock-port.
 
''(TODO: add picture)''
 
Inside the GPS ExtensionKit is u-blox 6 usb-gps receiver, wich is well supported by gpsd.
 
If connected it will show up as /dev/ttyACM0 (typically), dmesg output:


Next, boot preparations require rebuilding device tree. You need to remove '''trustzone''' and '''firmware''' nodes, since they are incompatible with u-boot. Additionally, if initramfs is used, you must convert it into u-boot format.
<syntaxhighlight lang="shell">
usb 1-1: new full-speed USB device number 11 using ci_hdrc
usb 1-1: New USB device found, idVendor=1546, idProduct=01a6, bcdDevice= 7.03
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: u-blox 6  -  GPS Receiver
usb 1-1: Manufacturer: u-blox AG - www.u-blox.com
cdc_acm 1-1:1.0: ttyACM0: USB ACM device
</syntaxhighlight>


Last step is flashing new bootloader. Place previously built u-boot-dtb-tegra.bin into your nvflash folder. Put prepared microSD into tablet. Set your device into APX mode and perform


To automatically update gpsd on the u-blox receiver availability, create a new .rules file under /etc/udev/rules.d: ''(e.g. 42-usbdongle.rules)''
<syntaxhighlight lang="shell" line='line'>
<syntaxhighlight lang="shell" line='line'>
wheelie --blob blob.bin
#### Udev rules for the ASUS TF201 GPS Extension Kit
nvflash --resume --download 4 u-boot-dtb-tegra.bin
ACTION=="add", KERNEL=="ttyACM*" SUBSYSTEMS=="usb" ATTRS{idVendor}=="1546" ATTRS{idProduct}=="01a6" RUN+= "/usr/sbin/gpsdctl add /dev/%k"
ACTION=="remove",  KERNEL=="ttyACM*" SUBSYSTEMS=="usb" ATTRS{idVendor}=="1546" ATTRS{idProduct}=="01a6" RUN+= "/usr/sbin/gpsdctl remove /dev/%k"
</syntaxhighlight>
</syntaxhighlight>


And wait till tablet boots.


If you need to restore Asus bootloader, you can find one in stock firmware blob and flash it with same method.


== Serial console ==
== Serial console ==
Line 320: Line 368:


[[File:Plug.jpg|thumb|mini|left|250px|40pin plug]] [[File:Cable.jpg|thumb|mini|right|250px|UART cable]]
[[File:Plug.jpg|thumb|mini|left|250px|40pin plug]] [[File:Cable.jpg|thumb|mini|right|250px|UART cable]]
== Contributors ==
* Clamor
* Ion Agorria
=== Users owning this device ===
{{Device owners}}


== See also ==
== See also ==
Line 336: Line 375:
* More about the device [https://en.wikipedia.org/wiki/Asus_Eee_Pad_Transformer_Prime Wikipedia entry]
* More about the device [https://en.wikipedia.org/wiki/Asus_Eee_Pad_Transformer_Prime Wikipedia entry]
* {{MR|1803|pmaports}} MR to add signed blobs as required by tf201 fastboot
* {{MR|1803|pmaports}} MR to add signed blobs as required by tf201 fastboot
* [https://github.com/clamor-s/linux/tree/u-bootable Kernel] and [https://gitlab.com/clamor95/pmaports/-/tree/master pmaports] fork designed for using u-boot

Latest revision as of 12:51, 19 February 2025

Note This device is supported as part of a generic port. Refer to Nvidia Tegra armv7 (nvidia-tegra-armv7) for installation instructions and more information.
Asus Eee Pad Transformer Prime
Manufacturer Asus
Name Eee Pad Transformer Prime
Codename asus-tf201
Released 2011
Type detachable
Hardware
Chipset Nvidia Tegra 3 (T30)
CPU Quad-core 1.4 GHz Cortex-A9
GPU NVIDIA ULP GeForce GPU 12 cores
Display 1280x800 Super IPS+ LCD
Storage 32/64 GB
Memory 1 GB
Architecture armv7
Software
Original software Android
Original version 3.2
Extended version 4.1
FOSS bootloader yes
postmarketOS
Category community
Pre-built images yes
postmarketOS kernel mainline grate
Unixbench Whet/Dhry score 1279.1
Generic port Nvidia Tegra armv7 (nvidia-tegra-armv7)
Features
Flashing
Works
USB Networking
Works
Internal storage
No data
SD card
No data
Battery
Works
Screen
Works
Touchscreen
Works
Keyboard
Works
Touchpad
Works
Multimedia
3D Acceleration
Partial
Audio
Works
Camera
Broken
Connectivity
WiFi
Works
Bluetooth
Works
GPS
Broken
Miscellaneous
FDE
Works
USB-A
Works
SATA/eSATA
No data
HDMI/DP
Works
Sensors
Accelerometer
Works
Magnetometer
Works
Ambient Light
Works
Hall Effect
Works
Haptics
Works
U-Boot
Primary Bootloader
Works
Secondary Bootloader
Works
Mainline
Works
Internal Storage
Works
SD card
Works
USB Host
Works
USB Peripheral
Works
Display
Works
Keyboard
Broken
Buttons
Works

Contributors

  • Clamor
  • Ion Agorria

Users owning this device


Unlocking

The first step to do anything with the device is unlocking, with this device its done by sideloading the unlock apk from ASUS and clicking a few buttons in the app. The apk can be found on the ASUS support page.

Bootloader unlock fails with Unknown error

Contact ASUS tech support, describe the issue and provide them with information they'll request. Bootloader unlock may become available within 1-2 days after the request.

Instead of unlocking bootloader, you can also go ahead and replace it with U-Boot.

Kernel status

Android kernel

Mainline (Grate)

Hardware status (mainline)

Status Hardware Info
Y Booting boot.img has restriction of approx 8MB, which is /boot partition size.
Y Bootloader Open source bootloader U-Boot is available as alternative for stock Asus bootloader and can replace it. U-Boot can not boot downstream kernel due to TrustZone problem.
Y Panel HannStar HSD101PWW2 Rev0-A00/A01 LCD SuperIPS+ HD panel through LVDS controller.
Y HDMI output HDMI works, but max output is 1080p due to Tegra 3 limitations.
Y Touchscreen Used Atmel MXT768E touchscreen.
Y USB One full size USB 2.0 in dock or via 40 pin adapter.
Y SD cards MicroSD card and full sized SD card (recognized as USB drive) in dock.
Y Internal memory eMMC by Kingston KE4BT5D6A or Hynix H26M64002BNR.
N GPS Broadcom GPS BCM4751 is used. Device itself has weak signal.
Y GPS U-Blox 6 in GPS Extension Kit (see below)
Y WiFi Uses Azurewave AW-NH615 BCM4329. Wi-Fi should work out of the box (best with IWD daemon: apk add iwd; rc-update del wpa_supplicant; rc-update add iwd;). All needed stuff is included. Device may not connect to some networks (in my case it was PC hotspot, to fix this, I have installed IWD on my PC as well). Be aware that WiFi MAC address is not static, though it should not matter for average user.
Y Bluetooth Uses Azurewave AW-NH615 BCM4329B1. Works fine out of the box.
Y GPIO keys/switches There are 3 GPIO keys: Power, Volume up, Volume down.

And 2 GPIO switches: LID sensor and Audio dock line-out detection.

Y Vibro Transformer Prime has GPIO based vibrator. Available via sysfs.
Y Dock Keyboard Both pad and dock have Nuvoton NPCE795LA0BX embedded controller which handles battery data, charging, leds, keyboard and touchpad. Driver of this EC is mainlined and is fully functional. Keyboard and Touchpad work.

Alt Gr can be used for alternate multimedia keys instead of escape, fn keys, volumes and delete. Alt GR + Lock changes the default key mode.

Y Battery/Charger Driver is based on Texas Instruments bq24725 SMBus Charge Controller driver and GPIO charger but works through pad/dock EC. Charging and charge level of both batteries are shown correctly.
Y PMIC Transformers use Texas Instruments TPS659110 PMIC and TPS62361 core regulator.
Y Sound Sound codec is RT5631. Sound works but UCM are not upstreamed yet. Audio via HDMI works out of the box.
Y Voice processor Transformers use separate Fortemedia FM34NE voice processor. Mainline driver prototype is available but is set into constant bypass mode. Requires rework to fit Linux sound system.
Y Thermal sensor NCT1008 ON Semiconductor LM90 series thermometer.
Y Orientation sensors Include Invensense mpu3050 gyroscope with Kionix KXTF9 accelerometer and Aichi AMI306 3-axis digital compass.
Y Light sensor Driver Dyna-Image AL3010. Brightness regulation works, install iio-sensor-proxy . It's slightly oversensitive.
N Front camera Aptina mi1040 camera sensor. Grate kernel doesn't support VI yet.
N Rear camera Fujitsu MBG048 image processor. Since it is broken on most TF201 is not planned to be added to support list. If you have such a need, development is welcome. Mainline driver doesn't exist.
P ULP GeForce GPU Acceleration partially works.

Participate development

U-Boot

  • legacy android boot.img stuck when loaded via u-boot (u-boot can not establish TrustZone)

Kernel

  • emmc vio voltage is 3.3v when proper should be 1.8v (setting 1.8v brakes emmc); MicroSD vdd supply is always on and MicroSD frequency is limited - all 3 are ASUS bootloader bugs, u-boot does not have this bugs;
  • BCM4751 GPS is commonly used in devices of this age, although it still does not have proper implementation (nor kernel, nor userspace);

Userspace

  • add missing indicators for multimedia keys like for brightness
  • bind /prop touchpad toggle to userspace indication

Usability

Desktop environment

Since 3D acceleration is not available yet, all DE which use it will be painfully slow and laggy.

Currently xfce4 or mate are recommended.

U-Boot

Warning WARNING: This part is HIGHLY EXPERIMENTAL! DO NOT USE THIS IF YOU DO NOT KNOW WHAT YOU ARE DOING.
Note Further procedure needs pre-made nvflash. Files blob.bin and bricksave.img are only thing that will save you from full brick and allow replace/restore Asus bootloader.

Current U-Boot status on Asus Transformer Prime TF201

Status Feature Info
Y Primary bootloader U-Boot successfully boots when is flashed into EBT partition instead of Asus bootloader. Can be additionally booted via fusée gelée exploit, even in locked state.
Y Secondary bootloader U-Boot can be chainloaded from both /boot and /recovery partitions.
Y Panel LVDS panels over DC connection are fully supported. Rudimentary bridge support is present. When chainloaded primary bootloader's panel setup can be reused (simple framebuffer).
Y MicroSD Fully functional and detectable. Can be used as boot source. Can be mounted from U-Boot.
Y eMMC Fully functional and detectable. Can be used as boot source. Can be mounted from U-Boot.
Y Boot kernel Yes, and can be highly adjusted with extlinux.conf.
Y Boot menu Native u-boot bootmenu works perfectly fine. It can be called with pressing volume down button on boot.
Y Power management Offline charging and charging in u-boot both work and are hw configured. Both power off and reboot options work and are available in bootmenu. If no valid kernel is found or lid-sensor is active (docked and closed) tablet will turn off.
Y Fastboot Fastboot option is available in bootmenu. All functions operate correctly.
Y Bricksafe hook (legacy) U-Boot can successfully generate and restore device specific image of first 3 encrypted partitions. It is identical to one, generated with nvflash command. If you can not perform nvflash, use fusée gelée to launch u-boot from RAM and generate bricksafe. You need to insert blank fat microSD so it can be saved!
P Boot Android Booting Android kernel can be performed only same way mainline kernel boots. Additionally it must not have CONFIG_TRUSTED_FOUNDATIONS = y and some additional small patches, it can be booted by u-boot.
Y Self update Self update option is implemented and write is done correctly. Re-crypt is required to be able to self update. Bootloader file has to have name u-boot-dtb-tegra.bin and be placed on 1st partition of microSD.

Primary, you need to build a u-boot from this source (github) on master branch and transformer_t30_defconfig tf201.config. Use same GCC as for kernel. When build is finished, you will get a file with name u-boot-dtb-tegra.bin. This is new bootloader.

Place u-boot-dtb-tegra.bin into your nvflash folder. Set your device into APX mode and perform

$ sudo ./wheelie --blob blob.bin
$ sudo ./nvflash --resume --download EBT u-boot-dtb-tegra.bin

And wait till tablet reboots.

If you need to restore Asus bootloader, you can find one in stock firmware blob and flash it with same method.

USB Extension Kit

As there are signal issues due to the design of the TF201 back-shell, ASUS supplied a GPS Extension Kit for use at the dock-port.

(TODO: add picture)

Inside the GPS ExtensionKit is u-blox 6 usb-gps receiver, wich is well supported by gpsd.

If connected it will show up as /dev/ttyACM0 (typically), dmesg output:

 usb 1-1: new full-speed USB device number 11 using ci_hdrc
 usb 1-1: New USB device found, idVendor=1546, idProduct=01a6, bcdDevice= 7.03
 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 usb 1-1: Product: u-blox 6  -  GPS Receiver
 usb 1-1: Manufacturer: u-blox AG - www.u-blox.com
 cdc_acm 1-1:1.0: ttyACM0: USB ACM device


To automatically update gpsd on the u-blox receiver availability, create a new .rules file under /etc/udev/rules.d: (e.g. 42-usbdongle.rules)

 #### Udev rules for the ASUS TF201 GPS Extension Kit
ACTION=="add", KERNEL=="ttyACM*" SUBSYSTEMS=="usb" ATTRS{idVendor}=="1546" ATTRS{idProduct}=="01a6" RUN+= "/usr/sbin/gpsdctl add /dev/%k"
 
ACTION=="remove",  KERNEL=="ttyACM*" SUBSYSTEMS=="usb" ATTRS{idVendor}=="1546" ATTRS{idProduct}=="01a6" RUN+= "/usr/sbin/gpsdctl remove /dev/%k"


Serial console

Asus Transformers have serial port both on motherboard and in 40 pin connector.

MOTHERBOARD

J0801 setup. Clickable

On motherboard serial console can be organized via J0801 according to enclosed scheme. UART is UART-A (serial@70006000; 115200n8) and uses 3.3v. This method requires disassembling tablet.

UART CABLE

Serial console can be additionally made from standard charging cable, but in process cable will be destroyed.

You would need:

- Asus charging cable;

- UART to USB (like CP2102);

- 3 wires with pin plugs on end;

- Soldering iron, a bit of skill;

UART place in 40pin plug

First of all you need to cut both ends of charging cable and prepare any 3 of cable wires for further soldering on both sides. Then solder your wires with pin plugs to prepared wires of Asus cable on ONE SIDE.

Now we need to prepare 40 pin plug. It's cover is solid, but there is a plastic rubber around metal plug, it needs to be cut, then metal plug can be carefully extracted. Controller board is covered with black silicon, it needs to be teared as well. Then you need to unsolder ground (black wire), it holds board to metal plug. After board can be unsoldered or gently pulled and it will come out with pins. Then you have to remove all remaining pins, find where 6 and 7 pins are on shorter side (!) and make their holes a bit bigger (holes from board side!). Insert pins from board(I've inserted mine with 90°, they insert easier and work fine; additionally you may try straightened stapler clip). Now you can solder wires on other side of Asus cable to pins and to metal connector. Additionally, I have fixed pins with super glue, before fixing pins check is they reach almost end of its groove.

6th pin is RX of device and 7th pin is TX of device, GND is on metal connector.

Connect RX (6th pin wire) to TX of CP2102, TX (7th pin wire) to RX of CP2102 and GND to GND respectively. Plug your USB adapter, configure it and you are ready to take UART logs.

40pin plug
UART cable

See also