brcm2708: update against latest rpi-3.10.y branch
[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");