diff options
author | Patrick Delaunay | 2017-08-03 12:36:07 +0200 |
---|---|---|
committer | Anatolij Gustschin | 2017-09-12 13:40:47 +0200 |
commit | 5b6a6a91c870949e21b7fd3865582ea6a32ea922 (patch) | |
tree | 1f5a02acdfdfa4c81c715ec8a74d80239c2c9ef1 /drivers/video | |
parent | 08a43cfbc29224dadf1d725e26697c227bf9723a (diff) |
dm: backlight: Add a driver for GPIO backlight
Add a driver for GPIO backlights.
It understands the standard device tree binding.
It can be used with simple-panel when PWM is not necessary.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/Kconfig | 10 | ||||
-rw-r--r-- | drivers/video/Makefile | 1 | ||||
-rw-r--r-- | drivers/video/backlight_gpio.c | 74 |
3 files changed, 85 insertions, 0 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index fe34da073bb..40a656ee0a8 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -25,6 +25,16 @@ config BACKLIGHT_PWM it understands the standard device tree (leds/backlight/pwm-backlight.txt) +config BACKLIGHT_GPIO + bool "Generic GPIO based Backlight Driver" + depends on DM_VIDEO + help + If you have a LCD backlight adjustable by GPIO, say Y to enable + this driver. + This driver can be used with "simple-panel" and + it understands the standard device tree + (leds/backlight/gpio-backlight.txt) + config VIDEO_BPP8 bool "Support 8-bit-per-pixel displays" depends on DM_VIDEO diff --git a/drivers/video/Makefile b/drivers/video/Makefile index fc1cd14a51e..e73bc93b168 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_DM_VIDEO) += panel-uclass.o simple_panel.o obj-$(CONFIG_DM_VIDEO) += video-uclass.o vidconsole-uclass.o obj-$(CONFIG_DM_VIDEO) += video_bmp.o obj-$(CONFIG_BACKLIGHT_PWM) += pwm_backlight.o +obj-$(CONFIG_BACKLIGHT_GPIO) += backlight_gpio.o obj-$(CONFIG_CONSOLE_NORMAL) += console_normal.o obj-$(CONFIG_CONSOLE_ROTATION) += console_rotate.o obj-$(CONFIG_CONSOLE_TRUETYPE) += console_truetype.o fonts/ diff --git a/drivers/video/backlight_gpio.c b/drivers/video/backlight_gpio.c new file mode 100644 index 00000000000..772df5d3026 --- /dev/null +++ b/drivers/video/backlight_gpio.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved + * Author: Patrick Delaunay <patrick.delaunay@st.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <dm.h> +#include <backlight.h> +#include <asm/gpio.h> + +DECLARE_GLOBAL_DATA_PTR; + +struct gpio_backlight_priv { + struct gpio_desc gpio; + bool def_value; +}; + +static int gpio_backlight_enable(struct udevice *dev) +{ + struct gpio_backlight_priv *priv = dev_get_priv(dev); + + dm_gpio_set_value(&priv->gpio, 1); + + return 0; +} + +static int gpio_backlight_ofdata_to_platdata(struct udevice *dev) +{ + struct gpio_backlight_priv *priv = dev_get_priv(dev); + int ret; + + ret = gpio_request_by_name(dev, "gpios", 0, &priv->gpio, + GPIOD_IS_OUT); + if (ret) { + debug("%s: Warning: cannot get GPIO: ret=%d\n", + __func__, ret); + return ret; + } + + priv->def_value = dev_read_bool(dev, "default-on"); + + return 0; +} + +static int gpio_backlight_probe(struct udevice *dev) +{ + struct gpio_backlight_priv *priv = dev_get_priv(dev); + + if (priv->def_value) + gpio_backlight_enable(dev); + + return 0; +} + +static const struct backlight_ops gpio_backlight_ops = { + .enable = gpio_backlight_enable, +}; + +static const struct udevice_id gpio_backlight_ids[] = { + { .compatible = "gpio-backlight" }, + { } +}; + +U_BOOT_DRIVER(gpio_backlight) = { + .name = "gpio_backlight", + .id = UCLASS_PANEL_BACKLIGHT, + .of_match = gpio_backlight_ids, + .ops = &gpio_backlight_ops, + .ofdata_to_platdata = gpio_backlight_ofdata_to_platdata, + .probe = gpio_backlight_probe, + .priv_auto_alloc_size = sizeof(struct gpio_backlight_priv), +}; |