From 07eef40a41cc04cc1844e42641f2b67c1e0e1934 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 18 Aug 2011 12:13:14 +0200 Subject: Add red, blue and green bitfields information to device structure When using the fourcc-based formats API, the fb_var_screeninfo red, green, blue and transp fields are not valid anymore. Duplicate the information in the device structure and use it to compute test pattern colors in preparation of the fourcc-based formats API implementation. Signed-off-by: Laurent Pinchart --- fbdev.c | 200 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 104 insertions(+), 96 deletions(-) diff --git a/fbdev.c b/fbdev.c index 578e67a..6bce2b0 100644 --- a/fbdev.c +++ b/fbdev.c @@ -43,6 +43,10 @@ struct device { struct fb_fix_screeninfo fix_info; struct fb_var_screeninfo var_info; + + struct fb_bitfield red; + struct fb_bitfield green; + struct fb_bitfield blue; }; enum fb_fill_mode { @@ -332,6 +336,10 @@ static int fb_update_info(struct device *dev) return ret; } + dev->red = dev->var_info.red; + dev->green = dev->var_info.green; + dev->blue = dev->var_info.blue; + return 0; } @@ -606,42 +614,42 @@ static int fb_pan(struct device *dev, unsigned int x, unsigned int y) * Test pattern */ -#define FB_MAKE_COLOR(var, r, g, b) \ - ((((r) >> (8 - (var)->red.length)) << (var)->red.offset) | \ - (((g) >> (8 - (var)->green.length)) << (var)->green.offset) | \ - (((b) >> (8 - (var)->blue.length)) << (var)->blue.offset)) +#define FB_MAKE_COLOR(dev, r, g, b) \ + ((((r) >> (8 - (dev)->red.length)) << (dev)->red.offset) | \ + (((g) >> (8 - (dev)->green.length)) << (dev)->green.offset) | \ + (((b) >> (8 - (dev)->blue.length)) << (dev)->blue.offset)) static void fb_fill_smpte_rgb16(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const uint16_t colors_top[] = { - FB_MAKE_COLOR(&dev->var_info, 192, 192, 192), /* grey */ - FB_MAKE_COLOR(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 192, 192, 192), /* grey */ + FB_MAKE_COLOR(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ }; const uint16_t colors_middle[] = { - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 192, 192), /* grey */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 192, 192), /* grey */ }; const uint16_t colors_bottom[] = { - FB_MAKE_COLOR(&dev->var_info, 0, 33, 76), /* in-phase */ - FB_MAKE_COLOR(&dev->var_info, 255, 255, 255), /* super white */ - FB_MAKE_COLOR(&dev->var_info, 50, 0, 106), /* quadrature */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 9, 9, 9), /* 3.5% */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* 7.5% */ - FB_MAKE_COLOR(&dev->var_info, 29, 29, 29), /* 11.5% */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 33, 76), /* in-phase */ + FB_MAKE_COLOR(dev, 255, 255, 255), /* super white */ + FB_MAKE_COLOR(dev, 50, 0, 106), /* quadrature */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 9, 9, 9), /* 3.5% */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* 7.5% */ + FB_MAKE_COLOR(dev, 29, 29, 29), /* 11.5% */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; @@ -678,40 +686,40 @@ struct fb_color24 { unsigned int value:24; } __attribute__((__packed__)); -#define FB_MAKE_COLOR24(var, r, g, b) \ - { .value = FB_MAKE_COLOR(var, r, g, b) } +#define FB_MAKE_COLOR24(dev, r, g, b) \ + { .value = FB_MAKE_COLOR(dev, r, g, b) } static void fb_fill_smpte_rgb24(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const struct fb_color24 colors_top[] = { - FB_MAKE_COLOR24(&dev->var_info, 192, 192, 192), /* grey */ - FB_MAKE_COLOR24(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR24(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR24(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR24(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR24(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR24(&dev->var_info, 0, 0, 192), /* blue */ + FB_MAKE_COLOR24(dev, 192, 192, 192), /* grey */ + FB_MAKE_COLOR24(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR24(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR24(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR24(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR24(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR24(dev, 0, 0, 192), /* blue */ }; const struct fb_color24 colors_middle[] = { - FB_MAKE_COLOR24(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 192, 192, 192), /* grey */ + FB_MAKE_COLOR24(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 192, 192, 192), /* grey */ }; const struct fb_color24 colors_bottom[] = { - FB_MAKE_COLOR24(&dev->var_info, 0, 33, 76), /* in-phase */ - FB_MAKE_COLOR24(&dev->var_info, 255, 255, 255), /* super white */ - FB_MAKE_COLOR24(&dev->var_info, 50, 0, 106), /* quadrature */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 9, 9, 9), /* 3.5% */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* 7.5% */ - FB_MAKE_COLOR24(&dev->var_info, 29, 29, 29), /* 11.5% */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 0, 33, 76), /* in-phase */ + FB_MAKE_COLOR24(dev, 255, 255, 255), /* super white */ + FB_MAKE_COLOR24(dev, 50, 0, 106), /* quadrature */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 9, 9, 9), /* 3.5% */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* 7.5% */ + FB_MAKE_COLOR24(dev, 29, 29, 29), /* 11.5% */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; @@ -751,32 +759,32 @@ fb_fill_smpte_rgb32(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const uint32_t colors_top[] = { - FB_MAKE_COLOR(&dev->var_info, 192, 192, 192), /* grey */ - FB_MAKE_COLOR(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 192, 192, 192), /* grey */ + FB_MAKE_COLOR(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ }; const uint32_t colors_middle[] = { - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 192), /* magenta */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 192), /* cyan */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 192, 192), /* grey */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 0, 192), /* magenta */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 192, 192), /* cyan */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 192, 192), /* grey */ }; const uint32_t colors_bottom[] = { - FB_MAKE_COLOR(&dev->var_info, 0, 33, 76), /* in-phase */ - FB_MAKE_COLOR(&dev->var_info, 255, 255, 255), /* super white */ - FB_MAKE_COLOR(&dev->var_info, 50, 0, 106), /* quadrature */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 9, 9, 9), /* 3.5% */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* 7.5% */ - FB_MAKE_COLOR(&dev->var_info, 29, 29, 29), /* 11.5% */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 33, 76), /* in-phase */ + FB_MAKE_COLOR(dev, 255, 255, 255), /* super white */ + FB_MAKE_COLOR(dev, 50, 0, 106), /* quadrature */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 9, 9, 9), /* 3.5% */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* 7.5% */ + FB_MAKE_COLOR(dev, 29, 29, 29), /* 11.5% */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; @@ -839,14 +847,14 @@ fb_fill_lines_rgb16(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const uint16_t colors[] = { - FB_MAKE_COLOR(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; @@ -871,14 +879,14 @@ fb_fill_lines_rgb24(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const struct fb_color24 colors[] = { - FB_MAKE_COLOR24(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR24(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR24(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR24(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR24(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; @@ -903,14 +911,14 @@ fb_fill_lines_rgb32(struct device *dev, unsigned int xoffset, unsigned int yoffset, unsigned int xres, unsigned int yres) { const uint32_t colors[] = { - FB_MAKE_COLOR(&dev->var_info, 192, 192, 0), /* yellow */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 192, 0), /* green */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 192, 0, 0), /* red */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ - FB_MAKE_COLOR(&dev->var_info, 0, 0, 192), /* blue */ - FB_MAKE_COLOR(&dev->var_info, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 192, 0), /* yellow */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 192, 0), /* green */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 192, 0, 0), /* red */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ + FB_MAKE_COLOR(dev, 0, 0, 192), /* blue */ + FB_MAKE_COLOR(dev, 19, 19, 19), /* black */ }; void *mem = dev->mem + dev->fix_info.line_length * yoffset + xoffset * dev->var_info.bits_per_pixel / 8; -- cgit v1.2.3