> > 16 bit depth is unversally broken at least whenever the fbdevhw driver is > > used. > > It works fine with the glint driver and pm2fb.
OK, I'll have a look at those to see what's done different there. > > Part of the problem seems to be that the kernel driver is only passed the > > pixel size (bits_per_pixel) which is 16 for both 15 and 16 bit depth. > > The fb_var struct doen't have a separate field for depth. > > Right. Geert explained to me that the depth is encoded in the fb_bitfields for > red, green, blue and transparency. Nice idea, but the X server has all of those set to 0 when calling the FBIOPUT_VSCREENINFO ioctl. That's explicitly enforced in fbdevhw.c:xfree2fbdev_fblayout(). > > But that's not all - I've tried a variety of hacks to make the kernel driver > > use the 16 bit depth to no avail. Some part of the X server appears to use > > the wrong depth ... > > Please elaborate what you have tried. Changing the kernel atyfb driver to allow both 15 and 16 bit depth, trying to figure out the depth from fb.var->red.length+fb.var->green_length+..., together with setting the rgb bits to 555 or 565 in fbdevhw.c:fbdevHWModeInit - no effect. Hardcoding 15 or 16 bit depth in the kernel - no improvement there either. Some more things in atimach64ppc.c that I need to look at the source at home again to describe. I'll rsync from Ani's source again before resuming work on this (but that'll be a while). Michael