Hi,
I've the same problem with Xorg. I thought that the problem was the Atmel framebuffer driver, so I modified the 16/15bpp section to report that the blue and red offsets were different. As a result, the console colors are swapped (Tux then has blue-ish beak and feet), but there is no change to Xorg. I find this very strange.
Note that if I directly write a pixel to the framebuffer, the "actual" alignment is not changed, so the console must be altering its output based on the framebuffer information I modified in the driver. It appears that Xorg FBDEV does NOT do this, and is always outputting RGB (Atmel format is BGR). I think the simple solution is to modify the Atmel FB driver to actually use RGB format and report it that way as well.
Also note, I haven't found any way yet to alter Xorg's output format outside of changing its source code...
fbset report (length/offset) for original FB driver:
R: 5/0
G: 5/5
B: 5/10
A: 0/0
after modifying Atmel FB driver:
R: 5/10
G: 5/5
B: 5/0
A: 0/0
Atmel FB Bit Format (LSbit on right):
0000 0000 0000 0000
|---B--|---G---|--R---|
Command to write BLUE pixel to screen (Little Endian):
Code:
# echo -en "\x00\x7C" > /dev/fb0
Command to write RED pixel to screen (Little Endian):
Code:
# echo -en "\x1F\x00" > /dev/fb0