summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2011-08-18 12:13:14 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2011-08-19 01:56:52 +0200
commit07eef40a41cc04cc1844e42641f2b67c1e0e1934 (patch)
treeb064dac032e9f7fa0b1d8588f84a3237cdb7b26d
parent1f60ac234b20b2eb7bc2b4b2cee8519aea6297ec (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.c200
1 files 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;