|
I bricked the display on my TPA10 and I've narrowed the cause down to a single missing signal. Hoping someone with a working unit can spare three minutes. Hardware
What happenedI lost the original firmware and, before finding this project, flashed a Smatek S9/S9E RK3566 image. Android boots fine, ADB works, but the LCD is completely dark — no light at all, even in a pitch-black room, and nothing at cold boot either (U-Boot is also from the S9E image). What I've verified — the software side is fine
So the S9E DTB actually has the correct panel timing. What it lacks is any way to switch the backlight on: The Evidence the board really is TPA10, not S9E
So the real peripherals live on bus 3 and the S9E DTB knows nothing about them. I dumped their registers but couldn't identify the parts with confidence; none looks like a classic backlight driver (no ID at a typical LP8556/SGM/KTD address, no register tracking the PWM duty). Recovery sources I've already exhausted
Nothing of the original firmware remains on the flash. The askIf you have a working TPA10, please dump these. It's adb shell "su 0 dd if=/dev/block/by-name/boot of=/sdcard/boot.img bs=1M"
adb shell "su 0 dd if=/dev/block/by-name/dtbo of=/sdcard/dtbo.img bs=1M"
adb shell "su 0 dd if=/dev/block/by-name/vbmeta of=/sdcard/vbmeta.img bs=1M"
adb pull /sdcard/boot.img
adb pull /sdcard/dtbo.img
adb pull /sdcard/vbmeta.img
I can flash it safely: ADB still works, so Happy to give back
The hardware documentation in this project is what kept me from making things worse, so thanks for that regardless of how this ends. |
Replies: 7 comments 4 replies
|
I have a tpa10-userdebug 11 RD2A.211001.002 2.6.8-beta.33. It is pretty old firmware but that has some advantages. I am working really hard to get the 0.9.6 release out tonight or early tomorrow but can send you an image after that. If anyone else has a different version of the firmware to share then include me as I have a private archive of every version I can find to support research in the project. I hope you fix your TPA10 because it is really awesome panel with ha-paneld other than the rear facing LED is very green biased, I'm not sure if that is something I broke or something inherent to the panel. |
|
Sorry about the delay on the firmware. The rc4 release took a lot more work than I expected and is only just going out tonight. I will try to get the backup to you tomorrow (Friday) |
|
You can download the 3 recovery partitions from https://we.tl/t-zmWSrBm9RuUFOCsO - Valid until Aug 2nd |
|
Quick update, one ask, and some findings that might be worth adding to the TPA10 docs. The
|
| PWM | Pin | |
|---|---|---|
| TPA10 | fe6e0000 (PWM4) |
GPIO0_C3 = 19 |
| S9E | fe6e0010 (PWM5) |
GPIO0_C4 = 20 |
One pin over. The SoC generates a perfectly correct 40 kHz signal at the right duty cycle — on a pin that goes nowhere. The S9E device tree also has no enable-gpios at all on its panel node, while the TPA10 needs GPIO3_C2 = 114, active low.
As a stopgap before I had the correct boot.img, driving both by hand brought the display back on S9E firmware:
echo 19 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio19/direction
echo 1 > /sys/class/gpio/gpio19/value # PWM pin held high = full brightness
echo 114 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio114/direction
echo 0 > /sys/class/gpio/gpio114/value # panel enable, active lowNo brightness control that way, but readable — enough to make a bricked panel usable while sorting out firmware.
The DTB is stable across versions. I compared the DTB from your dump against a 2.9.604 TPA10 build I found separately: byte-identical, 123,709 bytes. So the pin numbers above should hold for any TPA10.
I2C layout confirms the board. Scanning all seven buses, the ones S9E expects its amps, camera and touch controller on are physically empty, while three devices sit on i2c-3 at 0x0e, 0x30 and 0x6c — the last matching the VI5300 in your notes.
Tools, if useful
I wrote a few small dependency-free Python utilities working through this — an RKFW/RKAF update.img unpacker, a DTB locator/parser that reads panel and backlight nodes straight out of a boot.img (no dtc or extract-dtb, runs on stock Windows Python), an Android boot-header parser, and a dump validator that maps which regions of a raw image are real data versus 0xFF/0xCC filler.
That last one is the one I'd actually recommend for anyone keeping a firmware archive. My own full-eMMC backup turned out to be 99.9% filler with only 7 MB genuinely read — and the file size was byte-exact, so nothing looked wrong until I checked the contents.
Happy to share any of them if they'd be useful.
|
Thanks for the detailed follow-up. I closed this too early while the larger request was still open and then got distracted trying to get the last two releases out. I could not verify whether the super.img might contain PID/config which would not be safe for public distribution. If you DM me on community chat (see main page README) then I will send you an image. |
|
Sent you a DM on Matrix (#ha-paneld:matrix.org) |
|
I sent the image privately. I’m keeping |
You can download the 3 recovery partitions from https://we.tl/t-zmWSrBm9RuUFOCsO - Valid until Aug 2nd