diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2011-08-18 12:13:14 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2011-08-19 01:56:52 +0200 |
commit | 07eef40a41cc04cc1844e42641f2b67c1e0e1934 (patch) | |
tree | b064dac032e9f7fa0b1d8588f84a3237cdb7b26d | |
parent | 1f60ac234b20b2eb7bc2b4b2cee8519aea6297ec (diff) |
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 <laurent.pinchart@ideasonboard.com>
-rw-r--r-- | fbdev.c | 200 |
1 files changed, 104 insertions, 96 deletions
@@ -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; |