D Daniel Drake #
Message details and related content
Hi, The OLPC XO-1.5 has a display controller (dcon) which is able to drive the display while the video device is powered off (e.g. while the system is in suspend). It works on demand, (approximately) by grabbing the latest displayed picture (at the hardware level), storing it in dedicated DCON RAM, and continually reproducing it on the screen. This is known as "DCON freeze" and can also be triggered while the video device is still running by executing: echo 1 > /sys/devices/platform/dcon/freeze (enabled by CONFIG_FB_OLPC_DCON_1_5) Unfortunately this has broken in recent kernels due to viafb changes: when going into "DCON freeze", the DCON fails to capture the display contents and instead displays garbage. I am testing this on viafb outside of X. There are some complications in debugging this and pinpointing a single responsible commit. Kernels v2.6.38 and previous work fine. However, in such kernels, OLPC included an out-of-tree DCON driver. 2.6.38 includes a DCON driver (in staging) but it was not usable at this point. v2.6.39 has a functional DCON driver, but viafb in this kernel is unusable on XO-1.5 due to an unrelated bug which only got fixed for 3.0: http://www.spinics.net/lists/linux-fbdev/msg03132.html v3.0 and onwards reproduces the failure. To debug this, I took the approach of starting with 2.6.38, fixing the DCON driver in that old kernel, then going through the viafb changes until the point of breakage was found. This can be done as follows: git reset --hard v2.6.38 First, fix the DCON driver: