On Wed, 31 Dec 2014 12:22:17 +0100 Hans de Goede <hdego...@redhat.com> wrote:
> On 30-12-14 13:17, Siarhei Siamashka wrote: > > On Tue, 30 Dec 2014 11:26:51 +0100 > > Hans de Goede <hdego...@redhat.com> wrote: > > > >> Currently basically only lcd_if = 0 and lcd_frm = 1 are supported, it > >> should be possible to add support for other lcd_frm = x values easily, > >> so if you encounter those let me know, lcd_if != 0 is going to be much > >> harder to support and currently is not on my schedule. > > > > It's all in the orange part of the table at the bottom. The lcd_frm = 0 > > seems to be relatively common. The links to FEX files for each device > > are also there in the table and can be used to confirm the details. > > > > The http://linux-sunxi.org/Wexler_TAB_7200 tablet with its fex file > > https://github.com/linux-sunxi/sunxi-boards/blob/master/sys_config/a20/wexler_tab_7200.fex > > is one of the examples. > > Ok, so I've looked this up in the linux-sunxi code again to freshen my > memory, and grepping that code gives this: > > drivers/video/sunxi/disp/ebios_lcdc_tve.h > 51: LCDC_FRM_RGB888 = 0, > 52: LCDC_FRM_RGB666 = 1, > 53: LCDC_FRM_RGB656 = 2, > > All 3 of which are already supported (but other then LCDC_FRM_RGB666 > untested) in the u-boot lcd code : > > LCDC_FRM_RGB888 -> depth:24 > LCDC_FRM_RGB666 -> depth:18 > LCDC_FRM_RGB656 -> depth:17 > > So this results in the following translation: > > lcd_frm = 0 -> depth:24 > lcd_frm = 1 -> depth:18 > lcd_frm = 2 -> depth:17 In fact the 'lcd_frm' FEX option only controls dithering. The color depth is controlled by the 'lcd_cpu_if' FEX option. These color depth settings end up in the TCON0_CPU_IF_REG register, and your LCD patches currently unconditionally set it to 18-bit depth anyway. There is also a wiki page, describing FEX settings with a lot of useful information there: http://linux-sunxi.org/Fex_Guide#lcd.5B0.2F1.5D_configuration As for the dithering settings, you can try to compare the results of having "depth:0" vs. "depth:18" in CONFIG_VIDEO_LCD_MODE and using the following simple test program. With "depth:0", the picture looks correct, but blocky (6 bits per color component is not great for gradients without dithering). With "depth:18", the picture looks smooth. /******** Display a gradient picture ************/ #include <stdint.h> #include <stdio.h> #include <fcntl.h> #include <linux/fb.h> #include <sys/ioctl.h> #include <sys/mman.h> int main() { int fd, x, y; uint32_t *fb; struct fb_fix_screeninfo finfo; struct fb_var_screeninfo vinfo; if ((fd = open("/dev/fb0", O_RDWR)) == -1) { printf("Can't open /dev/fb0\n"); return 1; } if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)) { printf("FBIOGET_FSCREENINFO failed\n"); return 1; } if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) { printf("FBIOGET_VSCREENINFO failed\n"); return 1; } if (vinfo.bits_per_pixel != 32) { printf("Only 32bpp framebuffer is supported\n"); return 1; } fb = mmap(0, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (fb == (void *)-1) { printf("mmap failed\n"); return 1; } for (y = 0; y < vinfo.yres; y++) for (x = 0; x < vinfo.xres; x++) fb[y * vinfo.xres + x] = (255 * x / vinfo.xres) * 0x000100 + (255 * y / vinfo.yres) * 0x010001; return 0; } /************************************************/ So "lcd_frm = 0" is not expected to cause any problems and is already supported. But naming and meaning of the options in the CONFIG_VIDEO_LCD_MODE string could be improved. I just wonder why there are so many FEX files with lcd_frm = 0. It does not seem to be a great idea, unless there is some good reason. -- Best regards, Siarhei Siamashka _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot