From: Linus Walleij <linus.walleij@linaro.org> To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 03/11] video: ARM CLCD: support pads connected in reverse order Date: Thu, 04 Feb 2016 14:04:12 +0000 [thread overview] Message-ID: <1454594660-7532-4-git-send-email-linus.walleij@linaro.org> (raw) In-Reply-To: <1454594660-7532-1-git-send-email-linus.walleij@linaro.org> There are CLCDs connected with the pads in BGR rather than RGB order. It really doesn't matter since the CLCD has a flag and a bit to switch the position of the RGB and BGR components. This is needed to put something logical into the arm,pl11x,tft-r0g0b0-pads property of the device tree on the Nomadik which will then be <16 8 0>. Cc: Pawel Moll <pawel.moll@arm.com> Cc: Rob Herring <robh@kernel.org> Cc: Russell King <linux@arm.linux.org.uk> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/video/fbdev/amba-clcd.c | 8 ++++++++ include/linux/amba/clcd.h | 31 ++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index 8903a42c4122..9a631a8e2c04 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -681,6 +681,7 @@ static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0) } panels[] = { { 0x110, 1, 7, 13, CLCD_CAP_5551 }, { 0x110, 0, 8, 16, CLCD_CAP_888 }, + { 0x110, 16, 8, 0, CLCD_CAP_888 }, { 0x111, 4, 14, 20, CLCD_CAP_444 }, { 0x111, 3, 11, 19, CLCD_CAP_444 | CLCD_CAP_5551 }, { 0x111, 3, 10, 19, CLCD_CAP_444 | CLCD_CAP_5551 | @@ -708,6 +709,13 @@ static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0) fb->panel->caps = panels[i].caps; } + /* + * If we actually physically connected the R lines to B and + * vice versa + */ + if (r0 != 0 && b0 = 0) + fb->panel->bgr_connection = true; + return fb->panel->caps ? 0 : -EINVAL; } diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h index e64c1ccebb76..c60f32e23a83 100644 --- a/include/linux/amba/clcd.h +++ b/include/linux/amba/clcd.h @@ -108,6 +108,12 @@ struct clcd_panel { grayscale:1; unsigned int connector; struct backlight_device *backlight; + /* + * If the B/R lines are switched between the CLCD + * and the panel we need to know this and not try to + * compensate with the BGR bit in the control register. + */ + bool bgr_connection; }; struct clcd_regs { @@ -234,16 +240,27 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs) if (var->grayscale) val |= CNTL_LCDBW; - if (fb->panel->caps && fb->board->caps && - var->bits_per_pixel >= 16) { + if (fb->panel->caps && fb->board->caps && var->bits_per_pixel >= 16) { /* * if board and panel supply capabilities, we can support - * changing BGR/RGB depending on supplied parameters + * changing BGR/RGB depending on supplied parameters. Here + * we switch to what the framebuffer is providing if need + * be, so if the framebuffer is BGR but the display connection + * is RGB (first case) we switch it around. Vice versa mutatis + * mutandis if the framebuffer is RGB but the display connection + * is BGR, we flip it around. */ - if (var->red.offset = 0) - val &= ~CNTL_BGR; - else - val |= CNTL_BGR; + if (!fb->panel->bgr_connection) { + if (var->red.offset = 0) + val &= ~CNTL_BGR; + else + val |= CNTL_BGR; + } else { + if (var->blue.offset = 0) + val &= ~CNTL_BGR; + else + val |= CNTL_BGR; + } } switch (var->bits_per_pixel) { -- 2.4.3
WARNING: multiple messages have this Message-ID (diff)
From: linus.walleij@linaro.org (Linus Walleij) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 03/11] video: ARM CLCD: support pads connected in reverse order Date: Thu, 4 Feb 2016 15:04:12 +0100 [thread overview] Message-ID: <1454594660-7532-4-git-send-email-linus.walleij@linaro.org> (raw) In-Reply-To: <1454594660-7532-1-git-send-email-linus.walleij@linaro.org> There are CLCDs connected with the pads in BGR rather than RGB order. It really doesn't matter since the CLCD has a flag and a bit to switch the position of the RGB and BGR components. This is needed to put something logical into the arm,pl11x,tft-r0g0b0-pads property of the device tree on the Nomadik which will then be <16 8 0>. Cc: Pawel Moll <pawel.moll@arm.com> Cc: Rob Herring <robh@kernel.org> Cc: Russell King <linux@arm.linux.org.uk> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/video/fbdev/amba-clcd.c | 8 ++++++++ include/linux/amba/clcd.h | 31 ++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index 8903a42c4122..9a631a8e2c04 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -681,6 +681,7 @@ static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0) } panels[] = { { 0x110, 1, 7, 13, CLCD_CAP_5551 }, { 0x110, 0, 8, 16, CLCD_CAP_888 }, + { 0x110, 16, 8, 0, CLCD_CAP_888 }, { 0x111, 4, 14, 20, CLCD_CAP_444 }, { 0x111, 3, 11, 19, CLCD_CAP_444 | CLCD_CAP_5551 }, { 0x111, 3, 10, 19, CLCD_CAP_444 | CLCD_CAP_5551 | @@ -708,6 +709,13 @@ static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0) fb->panel->caps = panels[i].caps; } + /* + * If we actually physically connected the R lines to B and + * vice versa + */ + if (r0 != 0 && b0 == 0) + fb->panel->bgr_connection = true; + return fb->panel->caps ? 0 : -EINVAL; } diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h index e64c1ccebb76..c60f32e23a83 100644 --- a/include/linux/amba/clcd.h +++ b/include/linux/amba/clcd.h @@ -108,6 +108,12 @@ struct clcd_panel { grayscale:1; unsigned int connector; struct backlight_device *backlight; + /* + * If the B/R lines are switched between the CLCD + * and the panel we need to know this and not try to + * compensate with the BGR bit in the control register. + */ + bool bgr_connection; }; struct clcd_regs { @@ -234,16 +240,27 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs) if (var->grayscale) val |= CNTL_LCDBW; - if (fb->panel->caps && fb->board->caps && - var->bits_per_pixel >= 16) { + if (fb->panel->caps && fb->board->caps && var->bits_per_pixel >= 16) { /* * if board and panel supply capabilities, we can support - * changing BGR/RGB depending on supplied parameters + * changing BGR/RGB depending on supplied parameters. Here + * we switch to what the framebuffer is providing if need + * be, so if the framebuffer is BGR but the display connection + * is RGB (first case) we switch it around. Vice versa mutatis + * mutandis if the framebuffer is RGB but the display connection + * is BGR, we flip it around. */ - if (var->red.offset == 0) - val &= ~CNTL_BGR; - else - val |= CNTL_BGR; + if (!fb->panel->bgr_connection) { + if (var->red.offset == 0) + val &= ~CNTL_BGR; + else + val |= CNTL_BGR; + } else { + if (var->blue.offset == 0) + val &= ~CNTL_BGR; + else + val |= CNTL_BGR; + } } switch (var->bits_per_pixel) { -- 2.4.3
next prev parent reply other threads:[~2016-02-04 14:04 UTC|newest] Thread overview: 145+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-02-04 14:04 [PATCH 00/11] CLCD Nomadik+Versatile support Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 01/11] video: ARM CLCD: backlight support for OF Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 02/11] video: ARM CLCD: support DT signal inversion flags Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-17 18:10 ` [02/11] " Ray Jui 2016-02-17 18:10 ` Ray Jui 2016-02-19 8:46 ` Linus Walleij 2016-02-19 8:46 ` Linus Walleij 2016-02-20 1:23 ` Ray Jui 2016-02-20 1:23 ` Ray Jui 2016-02-20 11:46 ` Linus Walleij 2016-02-20 11:46 ` Linus Walleij 2016-02-04 14:04 ` Linus Walleij [this message] 2016-02-04 14:04 ` [PATCH 03/11] video: ARM CLCD: support pads connected in reverse order Linus Walleij 2016-02-04 14:04 ` [PATCH 04/11] video: ARM CLCD: support Nomadik variant Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 05/11] video: ARM CLCD: add special board and panel hooks for Nomadik Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 06/11] Documentation/DT: add blurb for IB2 syscon to Versatile Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 07/11] Documentation/DT: add Versatile display bindings Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-17 9:11 ` Tomi Valkeinen 2016-02-17 9:11 ` Tomi Valkeinen 2016-02-18 20:48 ` Linus Walleij 2016-02-18 20:48 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 08/11] video: ARM CLCD: add special panel hook for Versatiles Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 09/11] ARM: PB11MPCore: define a standard VGA panel Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 10/11] ARM: PB1176: " Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-04 14:04 ` [PATCH 11/11] ARM: versatile: move CLCD configuration to device tree Linus Walleij 2016-02-04 14:04 ` Linus Walleij 2016-02-17 9:09 ` Tomi Valkeinen 2016-02-17 9:09 ` Tomi Valkeinen 2016-02-17 9:41 ` Russell King - ARM Linux 2016-02-17 9:41 ` Russell King - ARM Linux 2016-02-17 16:17 ` Linus Walleij 2016-02-17 16:17 ` Linus Walleij 2016-02-17 21:32 ` Russell King - ARM Linux 2016-02-17 21:32 ` Russell King - ARM Linux 2016-02-18 11:52 ` Tomi Valkeinen 2016-02-18 11:52 ` Tomi Valkeinen 2016-02-18 13:12 ` Russell King - ARM Linux 2016-02-18 13:12 ` Russell King - ARM Linux 2016-02-18 13:37 ` Tomi Valkeinen 2016-02-18 13:37 ` Tomi Valkeinen 2016-02-18 20:31 ` Linus Walleij 2016-02-18 20:31 ` Linus Walleij [not found] ` <56C5B080.9090007-l0cyMroinI0@public.gmane.org> 2016-02-21 22:39 ` Linus Walleij 2016-02-21 22:39 ` Linus Walleij 2016-02-21 22:39 ` Linus Walleij [not found] ` <CACRpkdaXFUCR5=5mS28_4Dx_LfzqV13zwT=vVeJwuOzm_rGRBQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2016-02-22 15:41 ` Tomi Valkeinen 2016-02-22 15:41 ` Tomi Valkeinen 2016-02-22 15:41 ` Tomi Valkeinen [not found] ` <56CB2C31.5040703-l0cyMroinI0@public.gmane.org> 2016-02-22 15:54 ` Linus Walleij 2016-02-22 15:54 ` Linus Walleij 2016-02-22 15:54 ` Linus Walleij 2016-02-23 9:08 ` Linus Walleij 2016-02-23 9:08 ` Linus Walleij 2016-02-23 9:34 ` Arnd Bergmann 2016-02-23 9:34 ` Arnd Bergmann 2016-02-23 10:10 ` Linus Walleij 2016-02-23 10:10 ` Linus Walleij 2016-02-23 11:22 ` Arnd Bergmann 2016-02-23 11:22 ` Arnd Bergmann 2016-02-23 13:00 ` Tomi Valkeinen 2016-02-23 13:00 ` Tomi Valkeinen 2016-02-23 13:16 ` Linus Walleij 2016-02-23 13:16 ` Linus Walleij 2016-02-23 13:38 ` Tomi Valkeinen 2016-02-23 13:38 ` Tomi Valkeinen 2016-02-24 10:53 ` Russell King - ARM Linux 2016-02-24 10:53 ` Russell King - ARM Linux 2016-02-24 11:35 ` Tomi Valkeinen 2016-02-24 11:35 ` Tomi Valkeinen 2016-02-25 14:04 ` Linus Walleij 2016-02-25 14:04 ` Linus Walleij 2016-02-25 16:08 ` Arnd Bergmann 2016-02-25 16:08 ` Arnd Bergmann 2016-02-25 16:22 ` Russell King - ARM Linux 2016-02-25 16:22 ` Russell King - ARM Linux 2016-02-25 16:45 ` Tomi Valkeinen 2016-02-25 16:45 ` Tomi Valkeinen 2016-02-25 16:57 ` Russell King - ARM Linux 2016-02-25 16:57 ` Russell King - ARM Linux 2016-02-25 19:30 ` Linus Walleij 2016-02-25 19:30 ` Linus Walleij 2016-02-26 10:47 ` Tomi Valkeinen 2016-02-26 10:47 ` Tomi Valkeinen 2016-03-05 16:57 ` Linus Walleij 2016-03-05 16:57 ` Linus Walleij 2016-03-07 7:36 ` Tomi Valkeinen 2016-03-07 7:36 ` Tomi Valkeinen 2016-02-25 19:32 ` Linus Walleij 2016-02-25 19:32 ` Linus Walleij 2016-02-23 9:58 ` Tomi Valkeinen 2016-02-23 9:58 ` Tomi Valkeinen 2016-02-23 10:32 ` Adam Ford 2016-02-23 10:32 ` Adam Ford 2016-02-23 10:59 ` Pantelis Antoniou 2016-02-23 10:59 ` Pantelis Antoniou 2016-02-23 11:56 ` Peter Maydell 2016-02-23 11:56 ` Peter Maydell 2016-02-23 12:01 ` Russell King - ARM Linux 2016-02-23 12:01 ` Russell King - ARM Linux 2016-02-23 13:45 ` Tom Rini 2016-02-23 13:45 ` Tom Rini 2016-02-23 12:45 ` Tomi Valkeinen 2016-02-23 12:45 ` Tomi Valkeinen 2016-02-23 13:49 ` Peter Maydell 2016-02-23 13:49 ` Peter Maydell 2016-02-24 12:06 ` Tomi Valkeinen 2016-02-24 12:06 ` Tomi Valkeinen 2016-02-24 10:46 ` Russell King - ARM Linux 2016-02-24 10:46 ` Russell King - ARM Linux 2016-02-24 11:21 ` Tomi Valkeinen 2016-02-24 11:21 ` Tomi Valkeinen 2016-02-24 11:35 ` Russell King - ARM Linux 2016-02-24 11:35 ` Russell King - ARM Linux 2016-02-24 11:47 ` Tomi Valkeinen 2016-02-24 11:47 ` Tomi Valkeinen 2016-02-24 12:13 ` Pantelis Antoniou 2016-02-24 12:13 ` Pantelis Antoniou 2016-02-25 13:43 ` Linus Walleij 2016-02-25 13:43 ` Linus Walleij 2016-02-25 13:56 ` Tomi Valkeinen 2016-02-25 13:56 ` Tomi Valkeinen 2016-02-25 14:35 ` Pantelis Antoniou 2016-02-25 14:35 ` Pantelis Antoniou 2016-02-25 15:36 ` Linus Walleij 2016-02-25 15:36 ` Linus Walleij 2016-02-25 15:40 ` Pantelis Antoniou 2016-02-25 15:40 ` Pantelis Antoniou 2016-02-23 13:08 ` Linus Walleij 2016-02-23 13:08 ` Linus Walleij 2016-02-15 23:34 ` [PATCH 00/11] CLCD Nomadik+Versatile support Linus Walleij 2016-02-15 23:34 ` Linus Walleij 2016-02-16 13:29 ` Tomi Valkeinen 2016-02-16 13:29 ` Tomi Valkeinen 2016-02-16 22:30 ` Linus Walleij 2016-02-16 22:30 ` Linus Walleij
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1454594660-7532-4-git-send-email-linus.walleij@linaro.org \ --to=linus.walleij@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.