The Lenovo Xiaoxin Pad Pro 2021 is a high-end Android tablet released only in China. Other unofficial names for this tablet are Lenovo P11 Pro Plus or Lenovo P11 Pro 2021. Lenovo has not released the downstream Linux kernel sources for this device.
This device has been tested with postmarketOS, but its device package has not yet been added to the postmarketOS repositories. This means that it cannot be selected in pmbootstrap. Status: Mainline in progress
Lenovo Xiaoxin Pad Pro 2021
Lenovo Xiaoxin Pad Pro 2021 running LineageOS 18.1 GSI with Termux open showing neofetch
This method can be used to unlock the bootloader without having to wait and connect to Lenovo's server. It works by modifying the serial number with EDL and using a pre-made unlock file for that serial number.
EDL Mode
The necessary loader for bkerler's EDL tool can be found in this firmware file (prog_firehose_ddr.elf).
Installation
/* Not yet */
Mainline
A work in progress mainline kernel is being developed here.
Mainline status
Component
Model
Status
Notes
SoC
Qualcomm SM8250-AC Snapdragon 870
Y
UFS
Kioxia THGJFAT0T44BAILB
Y
SD card
-
Y
Display
EDO (EverDisplay Optronics) EB50QBC73.A OLED panel; Raydium RM69380 driver IC
According to i2cdetect. Tablet does not even have a headphone jack?
Ambient light sensor
Lite-On LTR-308
N
Time-of-flight sensor
AMS (Austria Mikro Systeme) TMF8801
N
Magnetometer
AKM ak0991x
N
Wi-Fi
Qualcomm QCA6390
N
Fingerprint
Goodix
N
i2c Table
Android messes up the i2c numbering. This is the real i2c numbering corresponding to mainline, showing only those that have devices attached.
Real
Android
Address
i2c1
i2c5
0x984000
i2c3
i2c6
0x98c000
i2c4
i2c2
0x990000
i2c13
i2c7
0xa94000
i2c15
i2c4
0x884000
Downstream GPIO table
p11_pro_plus:/ # cat /sys/kernel/debug/gpio
gpiochip4: GPIOs 1072-1075, parent: platform/c440000.qcom,spmi:qcom,pm8009@a:pinctrl@c000, c440000.qcom,spmi:qcom,pm8009@a:pinctrl@c000:
gpio1 : out normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio2 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio3 : in normal vin-1 no pull push-pull high high atest-1 dtest-0
gpio4 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpiochip3: GPIOs 1076-1084, parent: platform/c440000.qcom,spmi:qcom,pm8150l@4:pinctrl@c000, c440000.qcom,spmi:qcom,pm8150l@4:pinctrl@c000:
gpio1 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio3 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio4 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio5 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio6 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio7 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio8 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio10: in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio11: in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpiochip2: GPIOs 1085-1093, parent: platform/c440000.qcom,spmi:qcom,pm8150b@2:pinctrl@c000, c440000.qcom,spmi:qcom,pm8150b@2:pinctrl@c000:
gpio1 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio2 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio5 : out normal vin-1 no pull push-pull low low atest-1 dtest-0
gpio6 : in normal vin-0 pull-up 30uA push-pull high high atest-1 dtest-0
gpio7 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio8 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio9 : out func1 vin-0 no pull open-source low high atest-1 dtest-0
gpio10: out func1 vin-0 no pull open-drain low high atest-1 dtest-0
gpio12: in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpiochip1: GPIOs 1094-1099, parent: platform/c440000.qcom,spmi:qcom,pm8150@0:pinctrl@c000, c440000.qcom,spmi:qcom,pm8150@0:pinctrl@c000:
gpio1 : in normal vin-0 pull-up 30uA push-pull high high atest-1 dtest-0
gpio3 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio6 : in normal vin-1 pull-up 30uA push-pull high high atest-1 dtest-0
gpio7 : in normal vin-0 pull-down 10uA push-pull low high atest-1 dtest-0
gpio9 : out normal vin-1 pull-down 10uA push-pull low high atest-1 dtest-0
gpio10: in normal vin-1 pull-down 10uA push-pull low high atest-1 dtest-0
gpiochip0: GPIOs 1100-1279, parent: platform/f000000.pinctrl, f000000.pinctrl:
gpio0 : in low func0 2mA pull down
gpio1 : in low func0 2mA pull down
gpio2 : in low func0 2mA pull down
gpio3 : in low func0 2mA pull down
gpio4 : in high func0 2mA no pull
gpio5 : in high func0 2mA no pull
gpio6 : in low func0 2mA pull down
gpio7 : in low func0 2mA pull down
gpio8 : in high func0 2mA no pull
gpio9 : in high func0 2mA no pull
gpio10 : in high func0 2mA pull down
gpio11 : in low func0 2mA pull down
gpio12 : in low func0 2mA pull down
gpio13 : in low func0 2mA pull down
gpio14 : in low func0 2mA pull down
gpio15 : in high func0 2mA pull down
gpio16 : in high func0 2mA no pull
gpio17 : in low func0 2mA pull down
gpio18 : in high func0 2mA pull up
gpio19 : in low func0 2mA pull down
gpio20 : out low func0 2mA pull down
gpio21 : out low func0 2mA pull down
gpio22 : in low func0 2mA pull down
gpio23 : in low func0 2mA pull down
gpio24 : in low func0 2mA no pull
gpio25 : in low func0 2mA pull down
gpio26 : in low func0 2mA pull down
gpio27 : in low func0 2mA pull down
gpio28 : in low func0 6mA no pull
gpio29 : in low func0 6mA no pull
gpio30 : in low func0 6mA no pull
gpio31 : in low func0 6mA no pull
gpio32 : in low func0 2mA pull down
gpio33 : in low func0 2mA pull down
gpio34 : out low func1 2mA pull up
gpio35 : in low func1 2mA pull down
gpio36 : in low func0 2mA no pull
gpio37 : in low func0 2mA no pull
gpio38 : in low func0 2mA pull down
gpio39 : in low func0 2mA pull down
gpio44 : in low func0 2mA no pull
gpio45 : in low func0 2mA no pull
gpio46 : out low func0 16mA pull up
gpio47 : in low func0 2mA pull down
gpio48 : in low func0 2mA pull down
gpio49 : in low func0 2mA pull down
gpio50 : in low func0 2mA pull down
gpio51 : out low func0 2mA pull down
gpio52 : in low func0 2mA pull down
gpio53 : in low func0 2mA pull down
gpio54 : in low func0 2mA pull down
gpio55 : in low func0 2mA pull down
gpio56 : in low func0 2mA pull down
gpio57 : in low func0 2mA pull down
gpio58 : in low func0 2mA pull down
gpio59 : in low func0 2mA pull down
gpio60 : out high func0 16mA pull up
gpio61 : out low func0 8mA no pull
gpio62 : in low func0 2mA pull down
gpio63 : in low func0 2mA pull down
gpio64 : in low func0 2mA pull down
gpio65 : in low func0 2mA pull down
gpio66 : in low func1 2mA no pull
gpio67 : in low func0 2mA pull down
gpio68 : in low func0 2mA pull down
gpio69 : in low func0 2mA no pull
gpio70 : in low func0 2mA pull down
gpio71 : in high func0 2mA no pull
gpio72 : in low func0 2mA pull down
gpio73 : in high func0 2mA no pull
gpio74 : in low func0 2mA pull down
gpio75 : out high func0 8mA pull up
gpio76 : in low func0 2mA pull down
gpio77 : in high func0 2mA pull up
gpio78 : in low func0 2mA pull down
gpio79 : out low func0 2mA pull down
gpio80 : in high func0 2mA pull up
gpio81 : in high func0 2mA pull up
gpio82 : out low func0 2mA pull down
gpio83 : in low func0 2mA pull up
gpio84 : in high func0 2mA pull up
gpio85 : out low func0 2mA pull down
gpio86 : in low func1 2mA pull up
gpio87 : in high func0 2mA pull up
gpio88 : in low func0 2mA pull down
gpio89 : in low func0 2mA pull down
gpio90 : in low func0 2mA pull down
gpio91 : in high func0 2mA pull up
gpio92 : in low func0 2mA pull down
gpio93 : in low func0 2mA pull down
gpio94 : in low func0 2mA pull down
gpio95 : in low func0 2mA pull down
gpio96 : in low func0 2mA pull down
gpio97 : in low func0 2mA pull down
gpio98 : in low func0 2mA pull down
gpio99 : in low func0 2mA pull down
gpio100 : in low func0 2mA pull down
gpio101 : in low func0 2mA pull down
gpio102 : in low func0 2mA pull down
gpio103 : in low func0 2mA pull down
gpio104 : in low func0 2mA pull down
gpio105 : in low func0 2mA pull down
gpio106 : in low func0 2mA pull down
gpio107 : in low func0 2mA pull down
gpio108 : in low func0 2mA pull down
gpio109 : in low func0 2mA pull down
gpio110 : in low func0 2mA pull down
gpio111 : in low func0 2mA pull down
gpio112 : in low func0 2mA pull down
gpio113 : in low func0 2mA pull down
gpio114 : in low func0 2mA pull down
gpio115 : in low func0 2mA pull down
gpio116 : in low func0 2mA pull down
gpio117 : in low func0 2mA pull down
gpio118 : in low func0 2mA pull down
gpio119 : in high func0 2mA no pull
gpio120 : in high func0 2mA no pull
gpio121 : in low func0 2mA pull down
gpio122 : in low func0 2mA pull down
gpio123 : in low func0 2mA pull down
gpio124 : in low func0 2mA pull down
gpio125 : in low func0 2mA pull down
gpio126 : in low func0 2mA pull down
gpio127 : in low func0 2mA pull down
gpio128 : in low func0 2mA pull down
gpio129 : in low func0 2mA no pull
gpio130 : in low func0 2mA pull down
gpio131 : in low func0 2mA pull down
gpio132 : in low func0 2mA pull down
gpio133 : in low func0 2mA pull down
gpio134 : in low func0 2mA pull down
gpio135 : in low func0 2mA pull down
gpio136 : in low func0 2mA pull down
gpio137 : in low func0 2mA pull down
gpio138 : in low func0 2mA pull down
gpio139 : in low func0 2mA pull down
gpio140 : in low func0 2mA pull down
gpio141 : in low func0 2mA pull down
gpio142 : in low func0 2mA pull down
gpio143 : in low func0 2mA pull down
gpio144 : in low func0 2mA pull down
gpio145 : in low func0 2mA pull down
gpio146 : in low func0 2mA pull down
gpio147 : in low func0 2mA pull down
gpio148 : in low func0 2mA pull down
gpio149 : in low func0 2mA pull down
gpio150 : in low func0 2mA pull down
gpio151 : in low func0 2mA pull down
gpio152 : in low func0 2mA pull down
gpio153 : in low func0 2mA pull down
gpio154 : in low func0 2mA pull down
gpio155 : in low func0 2mA pull down
gpio156 : in low func0 2mA pull down
gpio157 : in low func0 2mA pull down
gpio158 : in low func0 2mA pull down
gpio159 : in low func0 2mA pull down
gpio160 : in low func0 2mA pull down
gpio161 : in low func0 2mA pull down
gpio162 : in low func0 2mA pull down
gpio163 : in low func0 2mA pull down
gpio164 : in low func0 2mA pull down
gpio165 : in low func0 2mA pull down
gpio166 : in low func0 2mA pull down
gpio167 : in low func0 2mA pull down
gpio168 : in low func0 2mA pull down
gpio169 : in low func0 2mA pull down
gpio170 : in low func0 2mA pull down
gpio171 : in low func0 2mA pull down
gpio172 : in low func0 2mA pull down
gpio173 : in low func0 2mA pull down
gpio174 : in low func0 2mA pull down
gpio175 : in low func0 2mA pull down
gpio176 : in high func0 2mA pull down
gpio177 : in low func0 2mA pull down
gpio178 : in high func0 2mA pull down
gpio179 : in high func0 2mA pull down
WARNING: Restoring the firmware will wipe all user data on the device
Install the qdl tool from here. Arch Linux users can simply install the qdl-git AUR package.
Download the firmware from here. The latest EDL-flashable firmware as of November 2024 is TB-J716F_CN_OPEN_USER_Q00209.3_R_ZUI_13.0.430_ST_220113_qpst.zip
Extract the ZIP archive and open a terminal inside the directory
Reboot the device into EDL mode by holding down Volume Up while connecting the tablet to a computer with a USB-C cable
If you have trouble running the command above, make sure your udev rules are set up correctly. Alternatively, you can try running the command with sudo
After the tablet reboots, Android should be running again