shadow_framebuffer records what the panel is currently showing, but both
refresh paths updated it before the refresh was confirmed, so a failed
trigger or a BUSY timeout left it describing content that was never
displayed.
That misdescription compounds: the shadow is sent to the controller as
CMD_DATA_START_OLD, so the per-pixel transitions get computed from an
image the panel never held, and draw_bitmap() diffs against it, so a
region matching a wrong shadow is treated as clean and never repainted.
Both paths now commit only after wait_while_busy() confirms. refresh_full()
also sends new data straight from the render buffer, which drops a
full-framebuffer copy from the path.
- Created kernel driver for T-Deck Max & Pro display (needs work, doesn't refresh reliably on T-Deck Pro)
- Created T-Deck Pro device implementation (incubating)