aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ar71xx/patches-4.14/442-leds-gpio-allow-to-use-OPEN_-DRAIN-SOURCE-flags-with.patch
blob: 3dbf68b1ed182ba436b8d86388cc05f7376448e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
From 183148e0789bee1cd5c46ba49afcb211f636f8a2 Mon Sep 17 00:00:00 2001
From: Gabor Juhos <juhosg@freemail.hu>
Date: Mon, 15 Jan 2018 15:01:14 +0100
Subject: [PATCH] leds: gpio: allow to use OPEN_{DRAIN,SOURCE} flags with
 legacy GPIOs

LEDs which are connected to open-source or open-drain type of GPIO lines
can be used only, if those are defined via devicetree.
Add two new fields to 'struct gpio_led' in order to make it possible to
specify this type of GPIO lines to the leds-gpio driver via platform data.
Also update the create_gpio_led() function to set the GPIOF_OPEN_DRAIN and
GPIOF_OPEN_SOURCE flags for the given GPIO line.

Signed-off-by: Gabor Juhos <juhosg@freemail.hu>
---
 drivers/leds/leds-gpio.c | 6 ++++++
 include/linux/leds.h     | 2 ++
 2 files changed, 8 insertions(+)

--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -100,6 +100,12 @@ static int create_gpio_led(const struct
 		if (template->active_low)
 			flags |= GPIOF_ACTIVE_LOW;
 
+		if (template->open_drain)
+			flags |= GPIOF_OPEN_DRAIN;
+
+		if (template->open_source)
+			flags |= GPIOF_OPEN_SOURCE;
+
 		ret = devm_gpio_request_one(parent, template->gpio, flags,
 					    template->name);
 		if (ret < 0)
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -395,6 +395,8 @@ struct gpio_led {
 	unsigned	default_state : 2;
 	unsigned	retain_state_shutdown : 1;
 	/* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
+	unsigned	open_drain : 1;
+	unsigned	open_source : 1;
 	struct gpio_desc *gpiod;
 };
 #define LEDS_GPIO_DEFSTATE_OFF		0