xref: /openbmc/u-boot/drivers/video/backlight_gpio.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
25b6a6a91SPatrick Delaunay /*
35b6a6a91SPatrick Delaunay  * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
45b6a6a91SPatrick Delaunay  * Author: Patrick Delaunay <patrick.delaunay@st.com>
55b6a6a91SPatrick Delaunay  */
65b6a6a91SPatrick Delaunay 
75b6a6a91SPatrick Delaunay #include <common.h>
85b6a6a91SPatrick Delaunay #include <dm.h>
95b6a6a91SPatrick Delaunay #include <backlight.h>
105b6a6a91SPatrick Delaunay #include <asm/gpio.h>
115b6a6a91SPatrick Delaunay 
125b6a6a91SPatrick Delaunay struct gpio_backlight_priv {
135b6a6a91SPatrick Delaunay 	struct gpio_desc gpio;
145b6a6a91SPatrick Delaunay 	bool def_value;
155b6a6a91SPatrick Delaunay };
165b6a6a91SPatrick Delaunay 
gpio_backlight_enable(struct udevice * dev)175b6a6a91SPatrick Delaunay static int gpio_backlight_enable(struct udevice *dev)
185b6a6a91SPatrick Delaunay {
195b6a6a91SPatrick Delaunay 	struct gpio_backlight_priv *priv = dev_get_priv(dev);
205b6a6a91SPatrick Delaunay 
215b6a6a91SPatrick Delaunay 	dm_gpio_set_value(&priv->gpio, 1);
225b6a6a91SPatrick Delaunay 
235b6a6a91SPatrick Delaunay 	return 0;
245b6a6a91SPatrick Delaunay }
255b6a6a91SPatrick Delaunay 
gpio_backlight_ofdata_to_platdata(struct udevice * dev)265b6a6a91SPatrick Delaunay static int gpio_backlight_ofdata_to_platdata(struct udevice *dev)
275b6a6a91SPatrick Delaunay {
285b6a6a91SPatrick Delaunay 	struct gpio_backlight_priv *priv = dev_get_priv(dev);
295b6a6a91SPatrick Delaunay 	int ret;
305b6a6a91SPatrick Delaunay 
315b6a6a91SPatrick Delaunay 	ret = gpio_request_by_name(dev, "gpios", 0, &priv->gpio,
325b6a6a91SPatrick Delaunay 				   GPIOD_IS_OUT);
335b6a6a91SPatrick Delaunay 	if (ret) {
345b6a6a91SPatrick Delaunay 		debug("%s: Warning: cannot get GPIO: ret=%d\n",
355b6a6a91SPatrick Delaunay 		      __func__, ret);
365b6a6a91SPatrick Delaunay 		return ret;
375b6a6a91SPatrick Delaunay 	}
385b6a6a91SPatrick Delaunay 
395b6a6a91SPatrick Delaunay 	priv->def_value = dev_read_bool(dev, "default-on");
405b6a6a91SPatrick Delaunay 
415b6a6a91SPatrick Delaunay 	return 0;
425b6a6a91SPatrick Delaunay }
435b6a6a91SPatrick Delaunay 
gpio_backlight_probe(struct udevice * dev)445b6a6a91SPatrick Delaunay static int gpio_backlight_probe(struct udevice *dev)
455b6a6a91SPatrick Delaunay {
465b6a6a91SPatrick Delaunay 	struct gpio_backlight_priv *priv = dev_get_priv(dev);
475b6a6a91SPatrick Delaunay 
485b6a6a91SPatrick Delaunay 	if (priv->def_value)
495b6a6a91SPatrick Delaunay 		gpio_backlight_enable(dev);
505b6a6a91SPatrick Delaunay 
515b6a6a91SPatrick Delaunay 	return 0;
525b6a6a91SPatrick Delaunay }
535b6a6a91SPatrick Delaunay 
545b6a6a91SPatrick Delaunay static const struct backlight_ops gpio_backlight_ops = {
555b6a6a91SPatrick Delaunay 	.enable	= gpio_backlight_enable,
565b6a6a91SPatrick Delaunay };
575b6a6a91SPatrick Delaunay 
585b6a6a91SPatrick Delaunay static const struct udevice_id gpio_backlight_ids[] = {
595b6a6a91SPatrick Delaunay 	{ .compatible = "gpio-backlight" },
605b6a6a91SPatrick Delaunay 	{ }
615b6a6a91SPatrick Delaunay };
625b6a6a91SPatrick Delaunay 
635b6a6a91SPatrick Delaunay U_BOOT_DRIVER(gpio_backlight) = {
645b6a6a91SPatrick Delaunay 	.name	= "gpio_backlight",
655b6a6a91SPatrick Delaunay 	.id	= UCLASS_PANEL_BACKLIGHT,
665b6a6a91SPatrick Delaunay 	.of_match = gpio_backlight_ids,
675b6a6a91SPatrick Delaunay 	.ops	= &gpio_backlight_ops,
685b6a6a91SPatrick Delaunay 	.ofdata_to_platdata	= gpio_backlight_ofdata_to_platdata,
695b6a6a91SPatrick Delaunay 	.probe		= gpio_backlight_probe,
705b6a6a91SPatrick Delaunay 	.priv_auto_alloc_size	= sizeof(struct gpio_backlight_priv),
715b6a6a91SPatrick Delaunay };
72