I had noticed something while browsing through the hijack diffs.
In empeg_display sendcontrol, the kernel makes sure that at least 1/10th of a second has elapsed before setting a control line from high to low. The comment that goes along with this is something like "make sure that the PIC is listening". However, it never adds this delay when going the other way around. So I'm assuming that it is possible that the display PIC never sees the line transition when dealing with back-to-back commands.
So I've added the same delay for the low->high transitions, built the kernel and reflashed my player. On my first test it seemed to work, but repeating the test showed that in some cases it was still getting confused. Now it gets the dimmer setting wrong about every 4 times I switch my headlights on/off instead of almost reliably every time. It also seemed like knob turns were detected more reliably, sometimes turning the knob in one direction would actually be registered as if it was turned in the other direction.
In any case, I also included a one-liner that should fix the source switching bug when returning to a userland application, and put the image and patch up for download at the bottom of
the gpsapp page.
Perhaps others can test to see whether my observations are completely subjective, or whether I'm on the right track here.