From 5b6a6a91c870949e21b7fd3865582ea6a32ea922 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay Date: Thu, 3 Aug 2017 12:36:07 +0200 Subject: 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 --- drivers/video/backlight_gpio.c | 74 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 drivers/video/backlight_gpio.c (limited to 'drivers/video/backlight_gpio.c') 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), +}; -- cgit v1.2.3