From: Patrick Delaunay Date: Thu, 3 Aug 2017 10:36:07 +0000 (+0200) Subject: dm: backlight: Add a driver for GPIO backlight X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Fu-boot.git;a=commitdiff_plain;h=5b6a6a91c870949e21b7fd3865582ea6a32ea922 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 --- diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index fe34da073b..40a656ee0a 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 fc1cd14a51..e73bc93b16 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 0000000000..772df5d302 --- /dev/null +++ b/drivers/video/backlight_gpio.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017, STMicroelectronics - All Rights Reserved + * Author: Patrick Delaunay + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include + +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), +};