uboot/drivers/video/backlight_gpio.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
   4 * Author: Patrick Delaunay <patrick.delaunay@foss.st.com>
   5 */
   6
   7#include <common.h>
   8#include <dm.h>
   9#include <backlight.h>
  10#include <log.h>
  11#include <asm/gpio.h>
  12
  13struct gpio_backlight_priv {
  14        struct gpio_desc gpio;
  15        bool def_value;
  16};
  17
  18static int gpio_backlight_enable(struct udevice *dev)
  19{
  20        struct gpio_backlight_priv *priv = dev_get_priv(dev);
  21
  22        dm_gpio_set_value(&priv->gpio, 1);
  23
  24        return 0;
  25}
  26
  27static int gpio_backlight_of_to_plat(struct udevice *dev)
  28{
  29        struct gpio_backlight_priv *priv = dev_get_priv(dev);
  30        int ret;
  31
  32        ret = gpio_request_by_name(dev, "gpios", 0, &priv->gpio,
  33                                   GPIOD_IS_OUT);
  34        if (ret) {
  35                debug("%s: Warning: cannot get GPIO: ret=%d\n",
  36                      __func__, ret);
  37                return ret;
  38        }
  39
  40        priv->def_value = dev_read_bool(dev, "default-on");
  41
  42        return 0;
  43}
  44
  45static int gpio_backlight_probe(struct udevice *dev)
  46{
  47        struct gpio_backlight_priv *priv = dev_get_priv(dev);
  48
  49        if (priv->def_value)
  50                gpio_backlight_enable(dev);
  51
  52        return 0;
  53}
  54
  55static const struct backlight_ops gpio_backlight_ops = {
  56        .enable = gpio_backlight_enable,
  57};
  58
  59static const struct udevice_id gpio_backlight_ids[] = {
  60        { .compatible = "gpio-backlight" },
  61        { }
  62};
  63
  64U_BOOT_DRIVER(gpio_backlight) = {
  65        .name   = "gpio_backlight",
  66        .id     = UCLASS_PANEL_BACKLIGHT,
  67        .of_match = gpio_backlight_ids,
  68        .ops    = &gpio_backlight_ops,
  69        .of_to_plat     = gpio_backlight_of_to_plat,
  70        .probe          = gpio_backlight_probe,
  71        .priv_auto      = sizeof(struct gpio_backlight_priv),
  72};
  73