From: Linus Walleij <linus.walleij@linaro.org> To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 01/11] video: ARM CLCD: backlight support for OF Date: Thu, 04 Feb 2016 14:04:10 +0000 [thread overview] Message-ID: <1454594660-7532-2-git-send-email-linus.walleij@linaro.org> (raw) In-Reply-To: <1454594660-7532-1-git-send-email-linus.walleij@linaro.org> If the device is probed from device tree, we can support backlight. This is used with some systems such as the ST Microelectronics Nomadik. We have to add HAS_IOMEM to the dependencies of CLCD since the backlight class device will now be selected, and if it gets selected on an arch that does not have IOMEM, compilation will fail. 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/Kconfig | 4 +++- drivers/video/fbdev/amba-clcd.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/linux/amba/clcd.h | 3 +++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig index 8ea45a5cd806..6dcd91237551 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -284,12 +284,14 @@ config FB_PM2_FIFO_DISCONNECT config FB_ARMCLCD tristate "ARM PrimeCell PL110 support" depends on ARM || ARM64 || COMPILE_TEST - depends on FB && ARM_AMBA + depends on FB && ARM_AMBA && HAS_IOMEM select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT select FB_MODE_HELPERS if OF select VIDEOMODE_HELPERS if OF + select BACKLIGHT_LCD_SUPPORT if OF + select BACKLIGHT_CLASS_DEVICE if OF help This framebuffer device driver is for the ARM PrimeCell PL110 Colour LCD controller. ARM PrimeCells provide the building diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index f9ef06d0cd48..c5d1e9ca81ab 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -30,6 +30,7 @@ #include <linux/of.h> #include <linux/of_address.h> #include <linux/of_graph.h> +#include <linux/backlight.h> #include <video/display_timing.h> #include <video/of_display_timing.h> #include <video/videomode.h> @@ -73,6 +74,11 @@ static void clcdfb_disable(struct clcd_fb *fb) if (fb->board->disable) fb->board->disable(fb); + if (fb->panel->backlight) { + fb->panel->backlight->props.power = FB_BLANK_POWERDOWN; + backlight_update_status(fb->panel->backlight); + } + val = readl(fb->regs + fb->off_cntl); if (val & CNTL_LCDPWR) { val &= ~CNTL_LCDPWR; @@ -119,6 +125,14 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) writel(cntl, fb->regs + fb->off_cntl); /* + * Turn on backlight + */ + if (fb->panel->backlight) { + fb->panel->backlight->props.power = FB_BLANK_UNBLANK; + backlight_update_status(fb->panel->backlight); + } + + /* * finally, enable the interface. */ if (fb->board->enable) @@ -578,6 +592,28 @@ static int clcdfb_snprintf_mode(char *buf, int size, struct fb_videomode *mode) mode->refresh); } +static int clcdfb_of_get_backlight(struct device_node *endpoint, + struct clcd_panel *clcd_panel) +{ + struct device_node *panel; + struct device_node *backlight; + + panel = of_graph_get_remote_port_parent(endpoint); + if (!panel) + return -ENODEV; + + /* Look up the optional backlight phandle */ + backlight = of_parse_phandle(panel, "backlight", 0); + if (backlight) { + clcd_panel->backlight = of_find_backlight_by_node(backlight); + of_node_put(backlight); + + if (!clcd_panel->backlight) + return -EPROBE_DEFER; + } + return 0; +} + static int clcdfb_of_get_mode(struct device *dev, struct device_node *endpoint, struct fb_videomode *mode) { @@ -664,6 +700,10 @@ static int clcdfb_of_init_display(struct clcd_fb *fb) if (!endpoint) return -ENODEV; + err = clcdfb_of_get_backlight(endpoint, fb->panel); + if (err) + return err; + err = clcdfb_of_get_mode(&fb->dev->dev, endpoint, &fb->panel->mode); if (err) return err; diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h index e82e3ee2c54a..e64c1ccebb76 100644 --- a/include/linux/amba/clcd.h +++ b/include/linux/amba/clcd.h @@ -93,6 +93,8 @@ enum { CLCD_CAP_ALL = CLCD_CAP_BGR | CLCD_CAP_RGB, }; +struct backlight_device; + struct clcd_panel { struct fb_videomode mode; signed short width; /* width in mm */ @@ -105,6 +107,7 @@ struct clcd_panel { fixedtimings:1, grayscale:1; unsigned int connector; + struct backlight_device *backlight; }; struct clcd_regs { -- 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 01/11] video: ARM CLCD: backlight support for OF Date: Thu, 4 Feb 2016 15:04:10 +0100 [thread overview] Message-ID: <1454594660-7532-2-git-send-email-linus.walleij@linaro.org> (raw) In-Reply-To: <1454594660-7532-1-git-send-email-linus.walleij@linaro.org> If the device is probed from device tree, we can support backlight. This is used with some systems such as the ST Microelectronics Nomadik. We have to add HAS_IOMEM to the dependencies of CLCD since the backlight class device will now be selected, and if it gets selected on an arch that does not have IOMEM, compilation will fail. 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/Kconfig | 4 +++- drivers/video/fbdev/amba-clcd.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/linux/amba/clcd.h | 3 +++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig index 8ea45a5cd806..6dcd91237551 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -284,12 +284,14 @@ config FB_PM2_FIFO_DISCONNECT config FB_ARMCLCD tristate "ARM PrimeCell PL110 support" depends on ARM || ARM64 || COMPILE_TEST - depends on FB && ARM_AMBA + depends on FB && ARM_AMBA && HAS_IOMEM select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT select FB_MODE_HELPERS if OF select VIDEOMODE_HELPERS if OF + select BACKLIGHT_LCD_SUPPORT if OF + select BACKLIGHT_CLASS_DEVICE if OF help This framebuffer device driver is for the ARM PrimeCell PL110 Colour LCD controller. ARM PrimeCells provide the building diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index f9ef06d0cd48..c5d1e9ca81ab 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -30,6 +30,7 @@ #include <linux/of.h> #include <linux/of_address.h> #include <linux/of_graph.h> +#include <linux/backlight.h> #include <video/display_timing.h> #include <video/of_display_timing.h> #include <video/videomode.h> @@ -73,6 +74,11 @@ static void clcdfb_disable(struct clcd_fb *fb) if (fb->board->disable) fb->board->disable(fb); + if (fb->panel->backlight) { + fb->panel->backlight->props.power = FB_BLANK_POWERDOWN; + backlight_update_status(fb->panel->backlight); + } + val = readl(fb->regs + fb->off_cntl); if (val & CNTL_LCDPWR) { val &= ~CNTL_LCDPWR; @@ -119,6 +125,14 @@ static void clcdfb_enable(struct clcd_fb *fb, u32 cntl) writel(cntl, fb->regs + fb->off_cntl); /* + * Turn on backlight + */ + if (fb->panel->backlight) { + fb->panel->backlight->props.power = FB_BLANK_UNBLANK; + backlight_update_status(fb->panel->backlight); + } + + /* * finally, enable the interface. */ if (fb->board->enable) @@ -578,6 +592,28 @@ static int clcdfb_snprintf_mode(char *buf, int size, struct fb_videomode *mode) mode->refresh); } +static int clcdfb_of_get_backlight(struct device_node *endpoint, + struct clcd_panel *clcd_panel) +{ + struct device_node *panel; + struct device_node *backlight; + + panel = of_graph_get_remote_port_parent(endpoint); + if (!panel) + return -ENODEV; + + /* Look up the optional backlight phandle */ + backlight = of_parse_phandle(panel, "backlight", 0); + if (backlight) { + clcd_panel->backlight = of_find_backlight_by_node(backlight); + of_node_put(backlight); + + if (!clcd_panel->backlight) + return -EPROBE_DEFER; + } + return 0; +} + static int clcdfb_of_get_mode(struct device *dev, struct device_node *endpoint, struct fb_videomode *mode) { @@ -664,6 +700,10 @@ static int clcdfb_of_init_display(struct clcd_fb *fb) if (!endpoint) return -ENODEV; + err = clcdfb_of_get_backlight(endpoint, fb->panel); + if (err) + return err; + err = clcdfb_of_get_mode(&fb->dev->dev, endpoint, &fb->panel->mode); if (err) return err; diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h index e82e3ee2c54a..e64c1ccebb76 100644 --- a/include/linux/amba/clcd.h +++ b/include/linux/amba/clcd.h @@ -93,6 +93,8 @@ enum { CLCD_CAP_ALL = CLCD_CAP_BGR | CLCD_CAP_RGB, }; +struct backlight_device; + struct clcd_panel { struct fb_videomode mode; signed short width; /* width in mm */ @@ -105,6 +107,7 @@ struct clcd_panel { fixedtimings:1, grayscale:1; unsigned int connector; + struct backlight_device *backlight; }; struct clcd_regs { -- 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 ` Linus Walleij [this message] 2016-02-04 14:04 ` [PATCH 01/11] video: ARM CLCD: backlight support for OF 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 ` [PATCH 03/11] video: ARM CLCD: support pads connected in reverse order Linus Walleij 2016-02-04 14:04 ` 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-2-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.