Summary
On current main (c729e83), the LilyGO T-Deck Max does not boot. The GDEQ031T10 e-paper panel never reports ready, so display fails to start, and because a failed device start aborts kernel_init, the whole boot is taken down with it.
I (1566) device: start display
E (6571) GDEQ031T10: Timed out waiting for panel BUSY
E (6571) GDEQ031T10: Full init failed
E (6571) device: Failed to start device display: resource
E (6573) kernel: kernel_init failed to construct+add+start device: display (gooddisplay,gdeq031t10)
E (6582) Tactility: Failed to initialize kernel
I (6586) main_task: Returned from app_main()
Reproduced on hardware with an unmodified main checkout: python device.py lilygo-tdeck-max && idf.py build flash monitor.
Cause
The kernel-driver port in #582 dropped the reset pulse that the pre-migration driver issued at the top of its full init.
The old Drivers/GDEQ031T10/Source/Gdeq031t10Display.cpp:
bool Gdeq031t10Display::initFull() {
reset();
bool ok = writeCommand(CMD_PANEL_SETTING);
...
The new Drivers/gdeq031t10-module/source/gdeq031t10.cpp goes straight to the command sequence:
static bool init_full(Gdeq031t10Internal* internal, bool mirror_180) {
bool ok = write_command(internal, CMD_PANEL_SETTING);
...
hardware_reset() still exists but is only reachable from the reset() display op, which nothing calls on the start path. Without the pulse, a cold-booted controller never drives BUSY ready after CMD_POWER_ON.
The rest of the driver still assumes the pulse is there. gdeq031t10_disp_on_off() documents its deep-sleep wake as relying on it:
// Toggling RST (in init_full) also wakes the panel from deep sleep.
and a waveform-mode change needs the reset to clear partial mode's lingering VCOM/data-interval setting, which was the stated reason the old driver put reset() in initFull() rather than at construction.
Fix
Calling hardware_reset(internal) at the top of init_full() restores the old behaviour. Confirmed on hardware: the panel initialises, boot completes, and refreshes run normally.
I (1566) device: start display
I (1631) GDEQ031T10: waited 42 ms until not busy
I (1631) driver: bound gdeq031t10 to display
I (1631) kernel: init done
...
I (5631) GDEQ031T10: draw_bitmap: refresh_full
I (6724) GDEQ031T10: waited 1014 ms until not busy
I have the one-line change ready and will open a PR against this issue.
Environment
- Device:
lilygo-tdeck-max
- Commit: c729e83 (
main)
- ESP-IDF: v5.5.2
Summary
On current
main(c729e83), the LilyGO T-Deck Max does not boot. The GDEQ031T10 e-paper panel never reports ready, sodisplayfails to start, and because a failed device start abortskernel_init, the whole boot is taken down with it.Reproduced on hardware with an unmodified
maincheckout:python device.py lilygo-tdeck-max && idf.py build flash monitor.Cause
The kernel-driver port in #582 dropped the reset pulse that the pre-migration driver issued at the top of its full init.
The old
Drivers/GDEQ031T10/Source/Gdeq031t10Display.cpp:The new
Drivers/gdeq031t10-module/source/gdeq031t10.cppgoes straight to the command sequence:hardware_reset()still exists but is only reachable from thereset()display op, which nothing calls on the start path. Without the pulse, a cold-booted controller never drives BUSY ready afterCMD_POWER_ON.The rest of the driver still assumes the pulse is there.
gdeq031t10_disp_on_off()documents its deep-sleep wake as relying on it:// Toggling RST (in init_full) also wakes the panel from deep sleep.and a waveform-mode change needs the reset to clear partial mode's lingering VCOM/data-interval setting, which was the stated reason the old driver put
reset()ininitFull()rather than at construction.Fix
Calling
hardware_reset(internal)at the top ofinit_full()restores the old behaviour. Confirmed on hardware: the panel initialises, boot completes, and refreshes run normally.I have the one-line change ready and will open a PR against this issue.
Environment
lilygo-tdeck-maxmain)