5636c44f21b50801cb6fabba9e29b32789af47b1
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-3.10 / 0167-bcm2708fb-Allow-swapping-of-red-blue-in-24-32-modes.patch
1 From 4e0660161587681630da35f525cacf17bed58795 Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Wed, 12 Feb 2014 12:01:56 +0000
4 Subject: [PATCH 167/174] bcm2708fb: Allow swapping of red/blue in 24/32 modes
5
6 ---
7 drivers/video/bcm2708_fb.c | 14 +++++++++++---
8 1 file changed, 11 insertions(+), 3 deletions(-)
9
10 --- a/drivers/video/bcm2708_fb.c
11 +++ b/drivers/video/bcm2708_fb.c
12 @@ -53,6 +53,7 @@ static u32 dma_busy_wait_threshold = 1<<
13 module_param(dma_busy_wait_threshold, int, 0644);
14 MODULE_PARM_DESC(dma_busy_wait_threshold, "Busy-wait for DMA completion below this area");
15
16 +static int fbswap = 0; /* module parameter */
17
18 /* this data structure describes each frame buffer device we find */
19
20 @@ -185,7 +186,12 @@ static int bcm2708_fb_set_bitfields(stru
21 * encoded in the pixel data. Calculate their position from
22 * the bitfield length defined above.
23 */
24 - if (ret == 0 && var->bits_per_pixel >= 24) {
25 + if (ret == 0 && var->bits_per_pixel >= 24 && fbswap) {
26 + var->blue.offset = 0;
27 + var->green.offset = var->blue.offset + var->blue.length;
28 + var->red.offset = var->green.offset + var->green.length;
29 + var->transp.offset = var->red.offset + var->red.length;
30 + } else if (ret == 0 && var->bits_per_pixel >= 24) {
31 var->red.offset = 0;
32 var->green.offset = var->red.offset + var->red.length;
33 var->blue.offset = var->green.offset + var->green.length;
34 @@ -618,8 +624,8 @@ static int bcm2708_fb_register(struct bc
35
36 fb_set_var(&fb->fb, &fb->fb.var);
37
38 - print_debug("BCM2708FB: registering framebuffer (%dx%d@%d)\n", fbwidth,
39 - fbheight, fbdepth);
40 + print_debug("BCM2708FB: registering framebuffer (%dx%d@%d) (%d)\n", fbwidth
41 + fbheight, fbdepth, fbswap);
42
43 ret = register_framebuffer(&fb->fb);
44 print_debug("BCM2708FB: register framebuffer (%d)\n", ret);
45 @@ -746,6 +752,7 @@ module_exit(bcm2708_fb_exit);
46 module_param(fbwidth, int, 0644);
47 module_param(fbheight, int, 0644);
48 module_param(fbdepth, int, 0644);
49 +module_param(fbswap, int, 0644);
50
51 MODULE_DESCRIPTION("BCM2708 framebuffer driver");
52 MODULE_LICENSE("GPL");
53 @@ -753,3 +760,4 @@ MODULE_LICENSE("GPL");
54 MODULE_PARM_DESC(fbwidth, "Width of ARM Framebuffer");
55 MODULE_PARM_DESC(fbheight, "Height of ARM Framebuffer");
56 MODULE_PARM_DESC(fbdepth, "Bit depth of ARM Framebuffer");
57 +MODULE_PARM_DESC(fbswap, "Swap order of red and blue in 24 and 32 bit modes");