All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/7] gpio: expose line bias flags to userspace
@ 2019-11-04 15:38 Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 1/7] gpio: expose pull-up/pull-down line " Kent Gibson
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

The changes from v4:
Review changes:
 - relocate restriction on applying bias to as-is from patch 2 to patch 1.
 - propagate errors, other than ENOTSUPP, from gpio_set_bias. (squashed 
   into patches 3 and 4).
 - include SET_CONFIG patch series v2 (patch 6 and 7 here).

I've also fixed a few other nits I noticed along the way:
 - rework gpio_set_bias as flags are mutually exclusive.
 - remove input flag required to set bias restriction from 
   lineevent_create as events are implicitly assumed inputs anyway.
 - reorder patches to group gpiolib bias patches together before the 
   gpio-mockup changes.


This series adds gross control of pull-up/pull-down to the GPIO uAPI.
Gross control means enabling and disabling of bias functionality,
not finer grained control such as setting biasing impedances.

The support allows both input and output lines to have any one of the
following biases applied as part of the line handle or event request:
 0. As Is - bias is left alone.  This is the default for ABI compatibility.
 1. Bias Disable - bias is explicitly disabled.
 2. Pull Down - pull-down bias is enabled.
 3. Pull Up - pull-up bias is enabled.

The biases are set via three flags, BIAS_DISABLE, BIAS_PULL_DOWN
and BIAS_PULL_UP.  These map directly to the similarly named 
pinctrl pin_config_param flags.
As Is corresponds to none of the flags being set.

The setting of biases on output lines may seem odd, but is to allow for
utilisation of internal pull-up/pull-down on open drain and open source
outputs, where supported in hardware.

The series also adds the GPIOHANDLE_SET_CONFIG_IOCTL to the gpio chardev.
The ioctl allows some of the configuration of a requested handle to be
changed without having to release the line.
The primary use case is the changing of direction for bi-directional 
lines.

Patches are against Bart's gpio/for-next branch[1].

The patch has been successfully tested against gpio-mockup, and 
on a Raspberry Pi, in both cases using the feature/pud_set_config 
branch of my Go gpiod library[2], as well as with my feature/pud 
development branch of libgpiod[3].  Patch 7 has only been tested using 
my gpiod library as libgpiod has not yet been updated to support the 
SET_CONFIG ioctl.

Patch 1 adds pull-up/pull-down support to line handle requests.
Patch 2 adds pull-up/pull-down support to line event requests.
Patch 3 adds support for disabling bias.
Patch 4 adds support for setting bias on output lines.
Patch 5 adds pull-up/down support to the gpio-mockup for uAPI testing.
Patch 6 refactors the flag validation from linehandle_create.
Patch 7 adds the SET_CONFIG ioctl.

Drew Fustini (1):
  gpio: expose pull-up/pull-down line flags to userspace

Kent Gibson (6):
  gpiolib: add support for pull up/down to lineevent_create
  gpiolib: add support for disabling line bias
  gpiolib: add support for biasing output lines
  gpio: mockup: add set_config to support pull up/down
  gpiolib: move validation of line handle flags into helper function
  gpio: add new SET_CONFIG ioctl() to gpio chardev

 drivers/gpio/gpio-mockup.c |  94 ++++++++++------
 drivers/gpio/gpiolib.c     | 213 +++++++++++++++++++++++++++++++------
 drivers/gpio/gpiolib.h     |   1 +
 include/uapi/linux/gpio.h  |  24 +++++
 4 files changed, 264 insertions(+), 68 deletions(-)

-- 
2.23.0


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v5 1/7] gpio: expose pull-up/pull-down line flags to userspace
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 2/7] gpiolib: add support for pull up/down to lineevent_create Kent Gibson
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

From: Drew Fustini <drew@pdp7.com>

Add pull-up/pull-down flags to the gpio line get and
set ioctl() calls.  Use cases include a push button
that does not have an external resistor.

Addition use cases described by Limor Fried (ladyada) of
Adafruit in this PR for Adafruit_Blinka Python lib:
https://github.com/adafruit/Adafruit_Blinka/pull/59

Signed-off-by: Drew Fustini <drew@pdp7.com>
[Kent: added BIAS to GPIO flag names and restrict application to input
lines]
Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c    | 18 ++++++++++++++++++
 include/uapi/linux/gpio.h |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index e8964493c571..035022bf0ef9 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -421,6 +421,8 @@ struct linehandle_state {
 	(GPIOHANDLE_REQUEST_INPUT | \
 	GPIOHANDLE_REQUEST_OUTPUT | \
 	GPIOHANDLE_REQUEST_ACTIVE_LOW | \
+	GPIOHANDLE_REQUEST_BIAS_PULL_UP | \
+	GPIOHANDLE_REQUEST_BIAS_PULL_DOWN | \
 	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
 	GPIOHANDLE_REQUEST_OPEN_SOURCE)
 
@@ -552,6 +554,12 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 	     (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
 		return -EINVAL;
 
+	/* PULL_UP and PULL_DOWN flags only make sense for input mode. */
+	if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
+	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
+	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
+		return -EINVAL;
+
 	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
 	if (!lh)
 		return -ENOMEM;
@@ -592,6 +600,10 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 			set_bit(FLAG_OPEN_DRAIN, &desc->flags);
 		if (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)
 			set_bit(FLAG_OPEN_SOURCE, &desc->flags);
+		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
+			set_bit(FLAG_PULL_DOWN, &desc->flags);
+		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
+			set_bit(FLAG_PULL_UP, &desc->flags);
 
 		ret = gpiod_set_transitory(desc, false);
 		if (ret < 0)
@@ -1091,6 +1103,10 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
 			lineinfo.flags |= (GPIOLINE_FLAG_OPEN_SOURCE |
 					   GPIOLINE_FLAG_IS_OUT);
+		if (test_bit(FLAG_PULL_DOWN, &desc->flags))
+			lineinfo.flags |= GPIOLINE_FLAG_BIAS_PULL_DOWN;
+		if (test_bit(FLAG_PULL_UP, &desc->flags))
+			lineinfo.flags |= GPIOLINE_FLAG_BIAS_PULL_UP;
 
 		if (copy_to_user(ip, &lineinfo, sizeof(lineinfo)))
 			return -EFAULT;
@@ -2764,6 +2780,8 @@ static bool gpiod_free_commit(struct gpio_desc *desc)
 		clear_bit(FLAG_REQUESTED, &desc->flags);
 		clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
 		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
+		clear_bit(FLAG_PULL_UP, &desc->flags);
+		clear_bit(FLAG_PULL_DOWN, &desc->flags);
 		clear_bit(FLAG_IS_HOGGED, &desc->flags);
 		ret = true;
 	}
diff --git a/include/uapi/linux/gpio.h b/include/uapi/linux/gpio.h
index 4ebfe0ac6c5b..39e6c7854d63 100644
--- a/include/uapi/linux/gpio.h
+++ b/include/uapi/linux/gpio.h
@@ -33,6 +33,8 @@ struct gpiochip_info {
 #define GPIOLINE_FLAG_ACTIVE_LOW	(1UL << 2)
 #define GPIOLINE_FLAG_OPEN_DRAIN	(1UL << 3)
 #define GPIOLINE_FLAG_OPEN_SOURCE	(1UL << 4)
+#define GPIOLINE_FLAG_BIAS_PULL_UP	(1UL << 5)
+#define GPIOLINE_FLAG_BIAS_PULL_DOWN	(1UL << 6)
 
 /**
  * struct gpioline_info - Information about a certain GPIO line
@@ -62,6 +64,8 @@ struct gpioline_info {
 #define GPIOHANDLE_REQUEST_ACTIVE_LOW	(1UL << 2)
 #define GPIOHANDLE_REQUEST_OPEN_DRAIN	(1UL << 3)
 #define GPIOHANDLE_REQUEST_OPEN_SOURCE	(1UL << 4)
+#define GPIOHANDLE_REQUEST_BIAS_PULL_UP	(1UL << 5)
+#define GPIOHANDLE_REQUEST_BIAS_PULL_DOWN	(1UL << 6)
 
 /**
  * struct gpiohandle_request - Information about a GPIO handle request
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 2/7] gpiolib: add support for pull up/down to lineevent_create
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 1/7] gpio: expose pull-up/pull-down line " Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 3/7] gpiolib: add support for disabling line bias Kent Gibson
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Add support for pull up/down to lineevent_create.
Use cases include receiving asynchronous presses from a
push button without an external pull up/down.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 035022bf0ef9..7dfbb3676ee0 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -950,6 +950,10 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
 
 	if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
 		set_bit(FLAG_ACTIVE_LOW, &desc->flags);
+	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
+		set_bit(FLAG_PULL_DOWN, &desc->flags);
+	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
+		set_bit(FLAG_PULL_UP, &desc->flags);
 
 	ret = gpiod_direction_input(desc);
 	if (ret)
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 3/7] gpiolib: add support for disabling line bias
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 1/7] gpio: expose pull-up/pull-down line " Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 2/7] gpiolib: add support for pull up/down to lineevent_create Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 4/7] gpiolib: add support for biasing output lines Kent Gibson
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Allow pull up/down bias to be disabled, allowing the line to float
or to be biased only by external circuitry.
Use case is for where the bias has been applied previously, either
by default or by the user, but that setting may conflict with the
current use of the line.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c    | 61 ++++++++++++++++++++++++++++++++-------
 drivers/gpio/gpiolib.h    |  1 +
 include/uapi/linux/gpio.h |  2 ++
 3 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 7dfbb3676ee0..7d8ff52ada42 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -423,6 +423,7 @@ struct linehandle_state {
 	GPIOHANDLE_REQUEST_ACTIVE_LOW | \
 	GPIOHANDLE_REQUEST_BIAS_PULL_UP | \
 	GPIOHANDLE_REQUEST_BIAS_PULL_DOWN | \
+	GPIOHANDLE_REQUEST_BIAS_DISABLE | \
 	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
 	GPIOHANDLE_REQUEST_OPEN_SOURCE)
 
@@ -554,12 +555,21 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 	     (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
 		return -EINVAL;
 
-	/* PULL_UP and PULL_DOWN flags only make sense for input mode. */
+	/* Bias flags only allowed for input mode. */
 	if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
-	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
+	    ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
+	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
 	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
 		return -EINVAL;
 
+	/* Only one bias flag can be set. */
+	if (((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
+	     (lflags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
+			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
+	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
+	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
+		return -EINVAL;
+
 	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
 	if (!lh)
 		return -ENOMEM;
@@ -600,6 +610,8 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 			set_bit(FLAG_OPEN_DRAIN, &desc->flags);
 		if (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)
 			set_bit(FLAG_OPEN_SOURCE, &desc->flags);
+		if (lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE)
+			set_bit(FLAG_BIAS_DISABLE, &desc->flags);
 		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
 			set_bit(FLAG_PULL_DOWN, &desc->flags);
 		if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
@@ -924,6 +936,14 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
 	    (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
 		return -EINVAL;
 
+	/* Only one bias flag can be set. */
+	if (((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
+	     (lflags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
+			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
+	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
+	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
+		return -EINVAL;
+
 	le = kzalloc(sizeof(*le), GFP_KERNEL);
 	if (!le)
 		return -ENOMEM;
@@ -950,6 +970,8 @@ static int lineevent_create(struct gpio_device *gdev, void __user *ip)
 
 	if (lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW)
 		set_bit(FLAG_ACTIVE_LOW, &desc->flags);
+	if (lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE)
+		set_bit(FLAG_BIAS_DISABLE, &desc->flags);
 	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)
 		set_bit(FLAG_PULL_DOWN, &desc->flags);
 	if (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)
@@ -1107,6 +1129,8 @@ static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 		if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
 			lineinfo.flags |= (GPIOLINE_FLAG_OPEN_SOURCE |
 					   GPIOLINE_FLAG_IS_OUT);
+		if (test_bit(FLAG_BIAS_DISABLE, &desc->flags))
+			lineinfo.flags |= GPIOLINE_FLAG_BIAS_DISABLE;
 		if (test_bit(FLAG_PULL_DOWN, &desc->flags))
 			lineinfo.flags |= GPIOLINE_FLAG_BIAS_PULL_DOWN;
 		if (test_bit(FLAG_PULL_UP, &desc->flags))
@@ -2786,6 +2810,7 @@ static bool gpiod_free_commit(struct gpio_desc *desc)
 		clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
 		clear_bit(FLAG_PULL_UP, &desc->flags);
 		clear_bit(FLAG_PULL_DOWN, &desc->flags);
+		clear_bit(FLAG_BIAS_DISABLE, &desc->flags);
 		clear_bit(FLAG_IS_HOGGED, &desc->flags);
 		ret = true;
 	}
@@ -2912,6 +2937,7 @@ static int gpio_set_config(struct gpio_chip *gc, unsigned offset,
 	unsigned arg;
 
 	switch (mode) {
+	case PIN_CONFIG_BIAS_DISABLE:
 	case PIN_CONFIG_BIAS_PULL_DOWN:
 	case PIN_CONFIG_BIAS_PULL_UP:
 		arg = 1;
@@ -2925,6 +2951,26 @@ static int gpio_set_config(struct gpio_chip *gc, unsigned offset,
 	return gc->set_config ? gc->set_config(gc, offset, config) : -ENOTSUPP;
 }
 
+static int gpio_set_bias(struct gpio_chip *chip, struct gpio_desc *desc)
+{
+	int bias = 0;
+	int ret = 0;
+
+	if (test_bit(FLAG_BIAS_DISABLE, &desc->flags))
+		bias = PIN_CONFIG_BIAS_DISABLE;
+	else if (test_bit(FLAG_PULL_UP, &desc->flags))
+		bias = PIN_CONFIG_BIAS_PULL_UP;
+	else if (test_bit(FLAG_PULL_DOWN, &desc->flags))
+		bias = PIN_CONFIG_BIAS_PULL_DOWN;
+
+	if (bias) {
+		ret = gpio_set_config(chip, gpio_chip_hwgpio(desc), bias);
+		if (ret != -ENOTSUPP)
+			return ret;
+	}
+	return 0;
+}
+
 /**
  * gpiod_direction_input - set the GPIO direction to input
  * @desc:	GPIO to set to input
@@ -2969,15 +3015,10 @@ int gpiod_direction_input(struct gpio_desc *desc)
 			   __func__);
 		return -EIO;
 	}
-	if (ret == 0)
+	if (ret == 0) {
 		clear_bit(FLAG_IS_OUT, &desc->flags);
-
-	if (test_bit(FLAG_PULL_UP, &desc->flags))
-		gpio_set_config(chip, gpio_chip_hwgpio(desc),
-				PIN_CONFIG_BIAS_PULL_UP);
-	else if (test_bit(FLAG_PULL_DOWN, &desc->flags))
-		gpio_set_config(chip, gpio_chip_hwgpio(desc),
-				PIN_CONFIG_BIAS_PULL_DOWN);
+		ret = gpio_set_bias(chip, desc);
+	}
 
 	trace_gpio_direction(desc_to_gpio(desc), 1, ret);
 
diff --git a/drivers/gpio/gpiolib.h b/drivers/gpio/gpiolib.h
index b8b10a409c7b..ca9bc1e4803c 100644
--- a/drivers/gpio/gpiolib.h
+++ b/drivers/gpio/gpiolib.h
@@ -110,6 +110,7 @@ struct gpio_desc {
 #define FLAG_TRANSITORY 12	/* GPIO may lose value in sleep or reset */
 #define FLAG_PULL_UP    13	/* GPIO has pull up enabled */
 #define FLAG_PULL_DOWN  14	/* GPIO has pull down enabled */
+#define FLAG_BIAS_DISABLE    15	/* GPIO has pull disabled */
 
 	/* Connection label */
 	const char		*label;
diff --git a/include/uapi/linux/gpio.h b/include/uapi/linux/gpio.h
index 39e6c7854d63..7cc21c3b0839 100644
--- a/include/uapi/linux/gpio.h
+++ b/include/uapi/linux/gpio.h
@@ -35,6 +35,7 @@ struct gpiochip_info {
 #define GPIOLINE_FLAG_OPEN_SOURCE	(1UL << 4)
 #define GPIOLINE_FLAG_BIAS_PULL_UP	(1UL << 5)
 #define GPIOLINE_FLAG_BIAS_PULL_DOWN	(1UL << 6)
+#define GPIOLINE_FLAG_BIAS_DISABLE	(1UL << 7)
 
 /**
  * struct gpioline_info - Information about a certain GPIO line
@@ -66,6 +67,7 @@ struct gpioline_info {
 #define GPIOHANDLE_REQUEST_OPEN_SOURCE	(1UL << 4)
 #define GPIOHANDLE_REQUEST_BIAS_PULL_UP	(1UL << 5)
 #define GPIOHANDLE_REQUEST_BIAS_PULL_DOWN	(1UL << 6)
+#define GPIOHANDLE_REQUEST_BIAS_DISABLE	(1UL << 7)
 
 /**
  * struct gpiohandle_request - Information about a GPIO handle request
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
                   ` (2 preceding siblings ...)
  2019-11-04 15:38 ` [PATCH v5 3/7] gpiolib: add support for disabling line bias Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:50   ` Bartosz Golaszewski
  2019-11-04 15:38 ` [PATCH v5 5/7] gpio: mockup: add set_config to support pull up/down Kent Gibson
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Allow pull up/down bias to be set on output lines.
Use case is for open source or open drain applications where
internal pull up/down may conflict with external biasing.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 7d8ff52ada42..de08d1a4a3fb 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -555,8 +555,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 	     (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
 		return -EINVAL;
 
-	/* Bias flags only allowed for input mode. */
-	if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
+	/* Bias flags only allowed for input or output mode. */
+	if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
+	      (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
 	    ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
 	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
 	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
@@ -3144,6 +3145,9 @@ int gpiod_direction_output(struct gpio_desc *desc, int value)
 	}
 
 set_output_value:
+	ret = gpio_set_bias(gc, desc);
+	if (ret)
+		return ret;
 	return gpiod_direction_output_raw_commit(desc, value);
 }
 EXPORT_SYMBOL_GPL(gpiod_direction_output);
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 5/7] gpio: mockup: add set_config to support pull up/down
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
                   ` (3 preceding siblings ...)
  2019-11-04 15:38 ` [PATCH v5 4/7] gpiolib: add support for biasing output lines Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 6/7] gpiolib: move validation of line handle flags into helper function Kent Gibson
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Add support for the pull up/down state set via gpiolib line requests to
be reflected in the state of the mockup.
Use case is for testing of the GPIO uAPI, specifically the pull up/down
flags.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpio-mockup.c | 94 ++++++++++++++++++++++++--------------
 1 file changed, 60 insertions(+), 34 deletions(-)

diff --git a/drivers/gpio/gpio-mockup.c b/drivers/gpio/gpio-mockup.c
index 213aedc97dc2..c28219962ae2 100644
--- a/drivers/gpio/gpio-mockup.c
+++ b/drivers/gpio/gpio-mockup.c
@@ -146,6 +146,61 @@ static void gpio_mockup_set_multiple(struct gpio_chip *gc,
 	mutex_unlock(&chip->lock);
 }
 
+static int gpio_mockup_apply_pull(struct gpio_mockup_chip *chip,
+				  unsigned int offset, int value)
+{
+	struct gpio_desc *desc;
+	struct gpio_chip *gc;
+	struct irq_sim *sim;
+	int curr, irq, irq_type;
+
+	gc = &chip->gc;
+	desc = &gc->gpiodev->descs[offset];
+	sim = &chip->irqsim;
+
+	mutex_lock(&chip->lock);
+
+	if (test_bit(FLAG_REQUESTED, &desc->flags) &&
+		!test_bit(FLAG_IS_OUT, &desc->flags)) {
+		curr = __gpio_mockup_get(chip, offset);
+		if (curr == value)
+			goto out;
+
+		irq = irq_sim_irqnum(sim, offset);
+		irq_type = irq_get_trigger_type(irq);
+
+		if ((value == 1 && (irq_type & IRQ_TYPE_EDGE_RISING)) ||
+			(value == 0 && (irq_type & IRQ_TYPE_EDGE_FALLING)))
+			irq_sim_fire(sim, offset);
+	}
+
+	/* Change the value unless we're actively driving the line. */
+	if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
+		!test_bit(FLAG_IS_OUT, &desc->flags))
+		__gpio_mockup_set(chip, offset, value);
+
+out:
+	chip->lines[offset].pull = value;
+	mutex_unlock(&chip->lock);
+	return 0;
+}
+
+static int gpio_mockup_set_config(struct gpio_chip *gc,
+				  unsigned int offset, unsigned long config)
+{
+	struct gpio_mockup_chip *chip = gpiochip_get_data(gc);
+
+	switch (pinconf_to_config_param(config)) {
+	case PIN_CONFIG_BIAS_PULL_UP:
+		return gpio_mockup_apply_pull(chip, offset, 1);
+	case PIN_CONFIG_BIAS_PULL_DOWN:
+		return gpio_mockup_apply_pull(chip, offset, 0);
+	default:
+		break;
+	}
+	return -ENOTSUPP;
+}
+
 static int gpio_mockup_dirout(struct gpio_chip *gc,
 			      unsigned int offset, int value)
 {
@@ -226,12 +281,8 @@ static ssize_t gpio_mockup_debugfs_write(struct file *file,
 					 size_t size, loff_t *ppos)
 {
 	struct gpio_mockup_dbgfs_private *priv;
-	int rv, val, curr, irq, irq_type;
-	struct gpio_mockup_chip *chip;
+	int rv, val;
 	struct seq_file *sfile;
-	struct gpio_desc *desc;
-	struct gpio_chip *gc;
-	struct irq_sim *sim;
 
 	if (*ppos != 0)
 		return -EINVAL;
@@ -244,35 +295,9 @@ static ssize_t gpio_mockup_debugfs_write(struct file *file,
 
 	sfile = file->private_data;
 	priv = sfile->private;
-	chip = priv->chip;
-	gc = &chip->gc;
-	desc = &gc->gpiodev->descs[priv->offset];
-	sim = &chip->irqsim;
-
-	mutex_lock(&chip->lock);
-
-	if (test_bit(FLAG_REQUESTED, &desc->flags) &&
-	    !test_bit(FLAG_IS_OUT, &desc->flags)) {
-		curr = __gpio_mockup_get(chip, priv->offset);
-		if (curr == val)
-			goto out;
-
-		irq = irq_sim_irqnum(sim, priv->offset);
-		irq_type = irq_get_trigger_type(irq);
-
-		if ((val == 1 && (irq_type & IRQ_TYPE_EDGE_RISING)) ||
-		    (val == 0 && (irq_type & IRQ_TYPE_EDGE_FALLING)))
-			irq_sim_fire(sim, priv->offset);
-	}
-
-	/* Change the value unless we're actively driving the line. */
-	if (!test_bit(FLAG_REQUESTED, &desc->flags) ||
-	    !test_bit(FLAG_IS_OUT, &desc->flags))
-		__gpio_mockup_set(chip, priv->offset, val);
-
-out:
-	chip->lines[priv->offset].pull = val;
-	mutex_unlock(&chip->lock);
+	rv = gpio_mockup_apply_pull(priv->chip, priv->offset, val);
+	if (rv)
+		return rv;
 
 	return size;
 }
@@ -418,6 +443,7 @@ static int gpio_mockup_probe(struct platform_device *pdev)
 	gc->direction_output = gpio_mockup_dirout;
 	gc->direction_input = gpio_mockup_dirin;
 	gc->get_direction = gpio_mockup_get_direction;
+	gc->set_config = gpio_mockup_set_config;
 	gc->to_irq = gpio_mockup_to_irq;
 	gc->free = gpio_mockup_free;
 
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 6/7] gpiolib: move validation of line handle flags into helper function
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
                   ` (4 preceding siblings ...)
  2019-11-04 15:38 ` [PATCH v5 5/7] gpio: mockup: add set_config to support pull up/down Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 15:38 ` [PATCH v5 7/7] gpio: add new SET_CONFIG ioctl() to gpio chardev Kent Gibson
  2019-11-04 19:58 ` [PATCH v5 0/7] gpio: expose line bias flags to userspace Drew Fustini
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Move validation of line handle flags into helper function.
This reduces the size and complexity of linehandle_create and allows the
validation to be reused elsewhere.

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c | 93 +++++++++++++++++++++++-------------------
 1 file changed, 51 insertions(+), 42 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index de08d1a4a3fb..dac1914155cc 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -427,6 +427,54 @@ struct linehandle_state {
 	GPIOHANDLE_REQUEST_OPEN_DRAIN | \
 	GPIOHANDLE_REQUEST_OPEN_SOURCE)
 
+static int linehandle_validate_flags(u32 flags)
+{
+	/* Return an error if an unknown flag is set */
+	if (flags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
+		return -EINVAL;
+
+	/*
+	 * Do not allow both INPUT & OUTPUT flags to be set as they are
+	 * contradictory.
+	 */
+	if ((flags & GPIOHANDLE_REQUEST_INPUT) &&
+	    (flags & GPIOHANDLE_REQUEST_OUTPUT))
+		return -EINVAL;
+
+	/*
+	 * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
+	 * the hardware actually supports enabling both at the same time the
+	 * electrical result would be disastrous.
+	 */
+	if ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) &&
+	    (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
+		return -EINVAL;
+
+	/* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
+	if (!(flags & GPIOHANDLE_REQUEST_OUTPUT) &&
+	    ((flags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
+	     (flags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
+		return -EINVAL;
+
+	/* Bias flags only allowed for input or output mode. */
+	if (!((flags & GPIOHANDLE_REQUEST_INPUT) ||
+	      (flags & GPIOHANDLE_REQUEST_OUTPUT)) &&
+	    ((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
+	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
+	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
+		return -EINVAL;
+
+	/* Only one bias flag can be set. */
+	if (((flags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
+	     (flags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
+			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
+	    ((flags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
+	     (flags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
+		return -EINVAL;
+
+	return 0;
+}
+
 static long linehandle_ioctl(struct file *filep, unsigned int cmd,
 			     unsigned long arg)
 {
@@ -528,48 +576,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 
 	lflags = handlereq.flags;
 
-	/* Return an error if an unknown flag is set */
-	if (lflags & ~GPIOHANDLE_REQUEST_VALID_FLAGS)
-		return -EINVAL;
-
-	/*
-	 * Do not allow both INPUT & OUTPUT flags to be set as they are
-	 * contradictory.
-	 */
-	if ((lflags & GPIOHANDLE_REQUEST_INPUT) &&
-	    (lflags & GPIOHANDLE_REQUEST_OUTPUT))
-		return -EINVAL;
-
-	/*
-	 * Do not allow OPEN_SOURCE & OPEN_DRAIN flags in a single request. If
-	 * the hardware actually supports enabling both at the same time the
-	 * electrical result would be disastrous.
-	 */
-	if ((lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) &&
-	    (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE))
-		return -EINVAL;
-
-	/* OPEN_DRAIN and OPEN_SOURCE flags only make sense for output mode. */
-	if (!(lflags & GPIOHANDLE_REQUEST_OUTPUT) &&
-	    ((lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN) ||
-	     (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
-		return -EINVAL;
-
-	/* Bias flags only allowed for input or output mode. */
-	if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
-	      (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
-	    ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
-	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
-	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
-		return -EINVAL;
-
-	/* Only one bias flag can be set. */
-	if (((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) &&
-	     (lflags & (GPIOHANDLE_REQUEST_BIAS_PULL_DOWN |
-			GPIOHANDLE_REQUEST_BIAS_PULL_UP))) ||
-	    ((lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN) &&
-	     (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP)))
-		return -EINVAL;
+	ret = linehandle_validate_flags(lflags);
+	if (ret)
+		return ret;
 
 	lh = kzalloc(sizeof(*lh), GFP_KERNEL);
 	if (!lh)
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v5 7/7] gpio: add new SET_CONFIG ioctl() to gpio chardev
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
                   ` (5 preceding siblings ...)
  2019-11-04 15:38 ` [PATCH v5 6/7] gpiolib: move validation of line handle flags into helper function Kent Gibson
@ 2019-11-04 15:38 ` Kent Gibson
  2019-11-04 19:58 ` [PATCH v5 0/7] gpio: expose line bias flags to userspace Drew Fustini
  7 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:38 UTC (permalink / raw)
  To: linux-gpio, bgolaszewski, linus.walleij, bamv2005
  Cc: drew, thomas.petazzoni, Kent Gibson

Add the GPIOHANDLE_SET_CONFIG_IOCTL to the gpio chardev.
The ioctl allows some of the configuration of a requested handle to be
changed without having to release the line.
The primary use case is the changing of direction for bi-directional
lines.

Based on initial work by Bartosz Golaszewski <bgolaszewski@baylibre.com>

Signed-off-by: Kent Gibson <warthog618@gmail.com>
---
 drivers/gpio/gpiolib.c    | 69 +++++++++++++++++++++++++++++++++++++++
 include/uapi/linux/gpio.h | 18 ++++++++++
 2 files changed, 87 insertions(+)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index dac1914155cc..969c0eb878df 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -475,6 +475,73 @@ static int linehandle_validate_flags(u32 flags)
 	return 0;
 }
 
+static void linehandle_configure_flag(unsigned long *flagsp,
+				      u32 bit, bool active)
+{
+	if (active)
+		set_bit(bit, flagsp);
+	else
+		clear_bit(bit, flagsp);
+}
+
+static long linehandle_set_config(struct linehandle_state *lh,
+				  void __user *ip)
+{
+	struct gpiohandle_config gcnf;
+	struct gpio_desc *desc;
+	int i, ret;
+	u32 lflags;
+	unsigned long *flagsp;
+
+	if (copy_from_user(&gcnf, ip, sizeof(gcnf)))
+		return -EFAULT;
+
+	lflags = gcnf.flags;
+	ret = linehandle_validate_flags(lflags);
+	if (ret)
+		return ret;
+
+	for (i = 0; i < lh->numdescs; i++) {
+		desc = lh->descs[i];
+		flagsp = &desc->flags;
+
+		linehandle_configure_flag(flagsp, FLAG_ACTIVE_LOW,
+			lflags & GPIOHANDLE_REQUEST_ACTIVE_LOW);
+
+		linehandle_configure_flag(flagsp, FLAG_OPEN_DRAIN,
+			lflags & GPIOHANDLE_REQUEST_OPEN_DRAIN);
+
+		linehandle_configure_flag(flagsp, FLAG_OPEN_SOURCE,
+			lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE);
+
+		linehandle_configure_flag(flagsp, FLAG_PULL_UP,
+			lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP);
+
+		linehandle_configure_flag(flagsp, FLAG_PULL_DOWN,
+			lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN);
+
+		linehandle_configure_flag(flagsp, FLAG_BIAS_DISABLE,
+			lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE);
+
+		/*
+		 * Lines have to be requested explicitly for input
+		 * or output, else the line will be treated "as is".
+		 */
+		if (lflags & GPIOHANDLE_REQUEST_OUTPUT) {
+			int val = !!gcnf.default_values[i];
+
+			ret = gpiod_direction_output(desc, val);
+			if (ret)
+				return ret;
+		} else if (lflags & GPIOHANDLE_REQUEST_INPUT) {
+			ret = gpiod_direction_input(desc);
+			if (ret)
+				return ret;
+		}
+	}
+	return 0;
+}
+
 static long linehandle_ioctl(struct file *filep, unsigned int cmd,
 			     unsigned long arg)
 {
@@ -525,6 +592,8 @@ static long linehandle_ioctl(struct file *filep, unsigned int cmd,
 					      lh->descs,
 					      NULL,
 					      vals);
+	} else if (cmd == GPIOHANDLE_SET_CONFIG_IOCTL) {
+		return linehandle_set_config(lh, ip);
 	}
 	return -EINVAL;
 }
diff --git a/include/uapi/linux/gpio.h b/include/uapi/linux/gpio.h
index 7cc21c3b0839..799cf823d493 100644
--- a/include/uapi/linux/gpio.h
+++ b/include/uapi/linux/gpio.h
@@ -100,6 +100,24 @@ struct gpiohandle_request {
 	int fd;
 };
 
+/**
+ * struct gpiohandle_config - Configuration for a GPIO handle request
+ * @flags: updated flags for the requested GPIO lines, such as
+ * GPIOHANDLE_REQUEST_OUTPUT, GPIOHANDLE_REQUEST_ACTIVE_LOW etc, OR:ed
+ * together
+ * @default_values: if the GPIOHANDLE_REQUEST_OUTPUT is set in flags,
+ * this specifies the default output value, should be 0 (low) or
+ * 1 (high), anything else than 0 or 1 will be interpreted as 1 (high)
+ * @padding: reserved for future use and should be zero filled
+ */
+struct gpiohandle_config {
+	__u32 flags;
+	__u8 default_values[GPIOHANDLES_MAX];
+	__u32 padding[4]; /* padding for future use */
+};
+
+#define GPIOHANDLE_SET_CONFIG_IOCTL _IOWR(0xB4, 0x0a, struct gpiohandle_config)
+
 /**
  * struct gpiohandle_data - Information of values on a GPIO handle
  * @values: when getting the state of lines this contains the current
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-04 15:38 ` [PATCH v5 4/7] gpiolib: add support for biasing output lines Kent Gibson
@ 2019-11-04 15:50   ` Bartosz Golaszewski
  2019-11-04 15:59     ` Kent Gibson
  0 siblings, 1 reply; 17+ messages in thread
From: Bartosz Golaszewski @ 2019-11-04 15:50 UTC (permalink / raw)
  To: Kent Gibson
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

pon., 4 lis 2019 o 16:39 Kent Gibson <warthog618@gmail.com> napisał(a):
>
> Allow pull up/down bias to be set on output lines.
> Use case is for open source or open drain applications where
> internal pull up/down may conflict with external biasing.
>
> Signed-off-by: Kent Gibson <warthog618@gmail.com>
> ---
>  drivers/gpio/gpiolib.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 7d8ff52ada42..de08d1a4a3fb 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -555,8 +555,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
>              (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
>                 return -EINVAL;
>
> -       /* Bias flags only allowed for input mode. */
> -       if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
> +       /* Bias flags only allowed for input or output mode. */
> +       if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
> +             (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
>             ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
>              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
>              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
> @@ -3144,6 +3145,9 @@ int gpiod_direction_output(struct gpio_desc *desc, int value)
>         }
>
>  set_output_value:
> +       ret = gpio_set_bias(gc, desc);
> +       if (ret)
> +               return ret;
>         return gpiod_direction_output_raw_commit(desc, value);

Ugh, I missed one thing here - my for-next branch doesn't contain the
following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
emulating open-drain/open-source") which happens to modify this
function.

If I provided you with a branch containing it - would it be a lot of
effort on your part to rebase it on top of it? If so - I can do it
myself.

Bart

>  }
>  EXPORT_SYMBOL_GPL(gpiod_direction_output);
> --
> 2.23.0
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-04 15:50   ` Bartosz Golaszewski
@ 2019-11-04 15:59     ` Kent Gibson
  2019-11-04 16:19       ` Bartosz Golaszewski
  0 siblings, 1 reply; 17+ messages in thread
From: Kent Gibson @ 2019-11-04 15:59 UTC (permalink / raw)
  To: Bartosz Golaszewski
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

On Mon, Nov 04, 2019 at 04:50:30PM +0100, Bartosz Golaszewski wrote:
> pon., 4 lis 2019 o 16:39 Kent Gibson <warthog618@gmail.com> napisał(a):
> >
> > Allow pull up/down bias to be set on output lines.
> > Use case is for open source or open drain applications where
> > internal pull up/down may conflict with external biasing.
> >
> > Signed-off-by: Kent Gibson <warthog618@gmail.com>
> > ---
> >  drivers/gpio/gpiolib.c | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> > index 7d8ff52ada42..de08d1a4a3fb 100644
> > --- a/drivers/gpio/gpiolib.c
> > +++ b/drivers/gpio/gpiolib.c
> > @@ -555,8 +555,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
> >              (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
> >                 return -EINVAL;
> >
> > -       /* Bias flags only allowed for input mode. */
> > -       if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
> > +       /* Bias flags only allowed for input or output mode. */
> > +       if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
> > +             (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
> >             ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
> >              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
> >              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
> > @@ -3144,6 +3145,9 @@ int gpiod_direction_output(struct gpio_desc *desc, int value)
> >         }
> >
> >  set_output_value:
> > +       ret = gpio_set_bias(gc, desc);
> > +       if (ret)
> > +               return ret;
> >         return gpiod_direction_output_raw_commit(desc, value);
> 
> Ugh, I missed one thing here - my for-next branch doesn't contain the
> following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
> emulating open-drain/open-source") which happens to modify this
> function.
> 
> If I provided you with a branch containing it - would it be a lot of
> effort on your part to rebase it on top of it? If so - I can do it
> myself.
> 

I can do a rebase - though not until tomorrow (it is getting late here).
I would like that commit in as well - I suspect it being missing is
the reason a couple of the gpiod tests I was working on are failing.
I was in the process of tracking that down when I switched back to this.

Cheers,
Kent.



^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-04 15:59     ` Kent Gibson
@ 2019-11-04 16:19       ` Bartosz Golaszewski
  2019-11-05  2:03         ` Kent Gibson
  0 siblings, 1 reply; 17+ messages in thread
From: Bartosz Golaszewski @ 2019-11-04 16:19 UTC (permalink / raw)
  To: Kent Gibson
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

pon., 4 lis 2019 o 16:59 Kent Gibson <warthog618@gmail.com> napisał(a):
>
> On Mon, Nov 04, 2019 at 04:50:30PM +0100, Bartosz Golaszewski wrote:
> > pon., 4 lis 2019 o 16:39 Kent Gibson <warthog618@gmail.com> napisał(a):
> > >
> > > Allow pull up/down bias to be set on output lines.
> > > Use case is for open source or open drain applications where
> > > internal pull up/down may conflict with external biasing.
> > >
> > > Signed-off-by: Kent Gibson <warthog618@gmail.com>
> > > ---
> > >  drivers/gpio/gpiolib.c | 8 ++++++--
> > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> > > index 7d8ff52ada42..de08d1a4a3fb 100644
> > > --- a/drivers/gpio/gpiolib.c
> > > +++ b/drivers/gpio/gpiolib.c
> > > @@ -555,8 +555,9 @@ static int linehandle_create(struct gpio_device *gdev, void __user *ip)
> > >              (lflags & GPIOHANDLE_REQUEST_OPEN_SOURCE)))
> > >                 return -EINVAL;
> > >
> > > -       /* Bias flags only allowed for input mode. */
> > > -       if (!(lflags & GPIOHANDLE_REQUEST_INPUT) &&
> > > +       /* Bias flags only allowed for input or output mode. */
> > > +       if (!((lflags & GPIOHANDLE_REQUEST_INPUT) ||
> > > +             (lflags & GPIOHANDLE_REQUEST_OUTPUT)) &&
> > >             ((lflags & GPIOHANDLE_REQUEST_BIAS_DISABLE) ||
> > >              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_UP) ||
> > >              (lflags & GPIOHANDLE_REQUEST_BIAS_PULL_DOWN)))
> > > @@ -3144,6 +3145,9 @@ int gpiod_direction_output(struct gpio_desc *desc, int value)
> > >         }
> > >
> > >  set_output_value:
> > > +       ret = gpio_set_bias(gc, desc);
> > > +       if (ret)
> > > +               return ret;
> > >         return gpiod_direction_output_raw_commit(desc, value);
> >
> > Ugh, I missed one thing here - my for-next branch doesn't contain the
> > following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
> > emulating open-drain/open-source") which happens to modify this
> > function.
> >
> > If I provided you with a branch containing it - would it be a lot of
> > effort on your part to rebase it on top of it? If so - I can do it
> > myself.
> >
>
> I can do a rebase - though not until tomorrow (it is getting late here).
> I would like that commit in as well - I suspect it being missing is
> the reason a couple of the gpiod tests I was working on are failing.
> I was in the process of tracking that down when I switched back to this.
>
> Cheers,
> Kent.
>
>

No problem, it can wait until tomorrow. Please use the following
branch - gpio/for-kent - from my tree.

Bart

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 0/7] gpio: expose line bias flags to userspace
  2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
                   ` (6 preceding siblings ...)
  2019-11-04 15:38 ` [PATCH v5 7/7] gpio: add new SET_CONFIG ioctl() to gpio chardev Kent Gibson
@ 2019-11-04 19:58 ` Drew Fustini
  2019-11-05  0:12   ` Kent Gibson
  7 siblings, 1 reply; 17+ messages in thread
From: Drew Fustini @ 2019-11-04 19:58 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Mon, Nov 04, 2019 at 11:38:34PM +0800, Kent Gibson wrote:
> on a Raspberry Pi, in both cases using the feature/pud_set_config 
> branch of my Go gpiod library[2], as well as with my feature/pud 
> development branch of libgpiod[3].  Patch 7 has only been tested using 
> my gpiod library as libgpiod has not yet been updated to support the 
> SET_CONFIG ioctl.
> 
> Patch 1 adds pull-up/pull-down support to line handle requests.
> Patch 2 adds pull-up/pull-down support to line event requests.
> Patch 3 adds support for disabling bias.
> Patch 4 adds support for setting bias on output lines.
> Patch 5 adds pull-up/down support to the gpio-mockup for uAPI testing.
> Patch 6 refactors the flag validation from linehandle_create.
> Patch 7 adds the SET_CONFIG ioctl.

Hi Kent, thanks for continuing pushing this patch series forward.

I've not used gpiomockup before and I was hoping you might be able to share
the commands you use to run it to test the patches.

thanks,
drew

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 0/7] gpio: expose line bias flags to userspace
  2019-11-04 19:58 ` [PATCH v5 0/7] gpio: expose line bias flags to userspace Drew Fustini
@ 2019-11-05  0:12   ` Kent Gibson
  2019-11-05  5:34     ` Kent Gibson
  0 siblings, 1 reply; 17+ messages in thread
From: Kent Gibson @ 2019-11-05  0:12 UTC (permalink / raw)
  To: Drew Fustini; +Cc: linux-gpio

On Mon, Nov 04, 2019 at 11:58:38AM -0800, Drew Fustini wrote:
> On Mon, Nov 04, 2019 at 11:38:34PM +0800, Kent Gibson wrote:
> > on a Raspberry Pi, in both cases using the feature/pud_set_config 
> > branch of my Go gpiod library[2], as well as with my feature/pud 
> > development branch of libgpiod[3].  Patch 7 has only been tested using 
> > my gpiod library as libgpiod has not yet been updated to support the 
> > SET_CONFIG ioctl.
> > 
> > Patch 1 adds pull-up/pull-down support to line handle requests.
> > Patch 2 adds pull-up/pull-down support to line event requests.
> > Patch 3 adds support for disabling bias.
> > Patch 4 adds support for setting bias on output lines.
> > Patch 5 adds pull-up/down support to the gpio-mockup for uAPI testing.
> > Patch 6 refactors the flag validation from linehandle_create.
> > Patch 7 adds the SET_CONFIG ioctl.
> 
> Hi Kent, thanks for continuing pushing this patch series forward.
> 
> I've not used gpiomockup before and I was hoping you might be able to share
> the commands you use to run it to test the patches.
> 

I refer you to the libgpiod tests, particularly
libgpiod/tests/mockup/gpio-mockup.c as well as gpio/gpio-mockup.c
itself.

If you run the libgpiod tests they will load and manipulate the module
themselves.  My gpiod tests do similarly.  I run them in a VM to ensure
they can't interfere with real hardware by accident.

Here is a quick guide to using the mockup manually.

Load the module with two chips with 4 and 8 lines respectively:  

 modprobe gpio-mockup gpio_mockup_named_lines gpio_mockup_ranges=-1,4,-1,8

$ gpiodetect
gpiochip0 [gpio-mockup-A] (4 lines)
gpiochip1 [gpio-mockup-B] (8 lines)

You add a -1,N pair for each chip you want mocked.
The -1s is there for historical reasons.

The gpio_mockup_named_lines is optional and creates labels for the lines 
based on chip and line number (the labels are quoted here):

$ gpioinfo
gpiochip0 - 4 lines:
	line   0: "gpio-mockup-A-0" unused input active-high
	line   1: "gpio-mockup-A-1" unused input active-high
	line   2: "gpio-mockup-A-2" unused input active-high
	line   3: "gpio-mockup-A-3" unused input active-high
gpiochip1 - 8 lines:
	line   0: "gpio-mockup-B-0" unused input active-high
	line   1: "gpio-mockup-B-1" unused input active-high
	line   2: "gpio-mockup-B-2" unused input active-high
	line   3: "gpio-mockup-B-3" unused input active-high
	line   4: "gpio-mockup-B-4" unused input active-high
	line   5: "gpio-mockup-B-5" unused input active-high
	line   6: "gpio-mockup-B-6" unused input active-high
	line   7: "gpio-mockup-B-7" unused input active-high

You manipulate the lines using debugfs as per these examples.

Pull line 1 of chip 0 high:

 echo 1 > /sys/kernel/debug/gpio-mockup/gpiochip0/1

Pull line 2 of chip 1 low:

 echo 0 > /sys/kernel/debug/gpio-mockup/gpiochip1/2

Check the value of a line, which can be set from the kernel side
for gpio output lines:

 cat /sys/kernel/debug/gpio-mockup/gpiochip0/1

Cheers,
Kent.


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-04 16:19       ` Bartosz Golaszewski
@ 2019-11-05  2:03         ` Kent Gibson
  2019-11-05  6:06           ` Kent Gibson
  0 siblings, 1 reply; 17+ messages in thread
From: Kent Gibson @ 2019-11-05  2:03 UTC (permalink / raw)
  To: Bartosz Golaszewski
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

On Mon, Nov 04, 2019 at 05:19:14PM +0100, Bartosz Golaszewski wrote:
> pon., 4 lis 2019 o 16:59 Kent Gibson <warthog618@gmail.com> napisał(a):
> >
> > > Ugh, I missed one thing here - my for-next branch doesn't contain the
> > > following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
> > > emulating open-drain/open-source") which happens to modify this
> > > function.
> > >
> > > If I provided you with a branch containing it - would it be a lot of
> > > effort on your part to rebase it on top of it? If so - I can do it
> > > myself.
> > >
> >
> > I can do a rebase - though not until tomorrow (it is getting late here).
> > I would like that commit in as well - I suspect it being missing is
> > the reason a couple of the gpiod tests I was working on are failing.
> > I was in the process of tracking that down when I switched back to this.
> >
> > Cheers,
> > Kent.
> >
> >
> 
> No problem, it can wait until tomorrow. Please use the following
> branch - gpio/for-kent - from my tree.
> 

That was a lot simpler than I expected - it rebased cleanly onto the 
new branch.  And fixed the gpiod test errors I was trying to track down.
Will submit v6 shortly.

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 0/7] gpio: expose line bias flags to userspace
  2019-11-05  0:12   ` Kent Gibson
@ 2019-11-05  5:34     ` Kent Gibson
  0 siblings, 0 replies; 17+ messages in thread
From: Kent Gibson @ 2019-11-05  5:34 UTC (permalink / raw)
  To: Drew Fustini; +Cc: linux-gpio

On Tue, Nov 05, 2019 at 08:12:13AM +0800, Kent Gibson wrote:
> On Mon, Nov 04, 2019 at 11:58:38AM -0800, Drew Fustini wrote:
> > On Mon, Nov 04, 2019 at 11:38:34PM +0800, Kent Gibson wrote:
> > > on a Raspberry Pi, in both cases using the feature/pud_set_config 
> > > branch of my Go gpiod library[2], as well as with my feature/pud 
> > > development branch of libgpiod[3].  Patch 7 has only been tested using 
> > > my gpiod library as libgpiod has not yet been updated to support the 
> > > SET_CONFIG ioctl.
> > > 
> > > Patch 1 adds pull-up/pull-down support to line handle requests.
> > > Patch 2 adds pull-up/pull-down support to line event requests.
> > > Patch 3 adds support for disabling bias.
> > > Patch 4 adds support for setting bias on output lines.
> > > Patch 5 adds pull-up/down support to the gpio-mockup for uAPI testing.
> > > Patch 6 refactors the flag validation from linehandle_create.
> > > Patch 7 adds the SET_CONFIG ioctl.
> > 
> > Hi Kent, thanks for continuing pushing this patch series forward.
> > 
> > I've not used gpiomockup before and I was hoping you might be able to share
> > the commands you use to run it to test the patches.
> > 
> 
> I refer you to the libgpiod tests, particularly
> libgpiod/tests/mockup/gpio-mockup.c as well as gpio/gpio-mockup.c
> itself.
> 
> If you run the libgpiod tests they will load and manipulate the module
> themselves.  My gpiod tests do similarly.  I run them in a VM to ensure
> they can't interfere with real hardware by accident.
> 

It occurs to me that you might want to know how to run the Go tests that
I'm refering to when I say I've tested against gpio-mockup using gpiod.
While that is probably obvious for Go developers, it probably isn't 
so obvious for kernel developers.

So here is a quick guide for running the gpiod tests:

1. Install Go[1].

2. Checkout gpiod:
  git clone https://github.com/warthog618/gpiod.git

3. The uapi sub-package contains the tests for the uapi itself so
  cd gpiod/uapi

4. Checkout the appropriate branch - in this case 
  git checkout feature/pud_set_config

5. Build the tests
  go test -c

6. Run the tests (requires modprobe rights hence the sudo)
  sudo ./uapi.test

You can get a list of the tests being run by adding a --test.v
parameter to uapi.test, or run particular tests with 
  uapi.test --test.run [pattern]

The tests themselves are in uapi_test.go, in case you get errors or want
to see what they do.  The gpio-mockup wrapper is in gpiod/mockup.

There are also tests for gpiod itself in gpiod/*_test.go, though 
those focus on the gpiod library rather than the uapi and kernel.

Cheers,
Kent.

[1] https://golang.org/doc/install


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-05  2:03         ` Kent Gibson
@ 2019-11-05  6:06           ` Kent Gibson
  2019-11-05  9:10             ` Bartosz Golaszewski
  0 siblings, 1 reply; 17+ messages in thread
From: Kent Gibson @ 2019-11-05  6:06 UTC (permalink / raw)
  To: Bartosz Golaszewski
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

On Tue, Nov 05, 2019 at 10:03:42AM +0800, Kent Gibson wrote:
> On Mon, Nov 04, 2019 at 05:19:14PM +0100, Bartosz Golaszewski wrote:
> > pon., 4 lis 2019 o 16:59 Kent Gibson <warthog618@gmail.com> napisał(a):
> > >
> > > > Ugh, I missed one thing here - my for-next branch doesn't contain the
> > > > following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
> > > > emulating open-drain/open-source") which happens to modify this
> > > > function.
> > > >
> > > > If I provided you with a branch containing it - would it be a lot of
> > > > effort on your part to rebase it on top of it? If so - I can do it
> > > > myself.
> > > >
> > >
> > > I can do a rebase - though not until tomorrow (it is getting late here).
> > > I would like that commit in as well - I suspect it being missing is
> > > the reason a couple of the gpiod tests I was working on are failing.
> > > I was in the process of tracking that down when I switched back to this.
> > >
> > > Cheers,
> > > Kent.
> > >
> > >
> > 
> > No problem, it can wait until tomorrow. Please use the following
> > branch - gpio/for-kent - from my tree.
> > 
> 
> That was a lot simpler than I expected - it rebased cleanly onto the 
> new branch.  And fixed the gpiod test errors I was trying to track down.
> Will submit v6 shortly.
> 

Maybe I'm missing something, but given that the rebase was clean, was 
there actually any need for v6?
i.e. anyone can rebase the v5 patch onto gpio/for-kent:

$ git checkout -b pud_rebase brgl/gpio/for-next
Branch 'pud_rebase' set up to track remote branch 'gpio/for-next' from 'brgl'.
Switched to a new branch 'pud_rebase'
$ git am PATCH-v5-0-7-gpio-expose-line-bias-flags-to-userspace.mbox
Applying: gpio: expose pull-up/pull-down line flags to userspace
Applying: gpiolib: add support for pull up/down to lineevent_create
Applying: gpiolib: add support for disabling line bias
Applying: gpiolib: add support for biasing output lines
Applying: gpio: mockup: add set_config to support pull up/down
Applying: gpiolib: move validation of line handle flags into helper function
Applying: gpio: add new SET_CONFIG ioctl() to gpio chardev
$ git rebase brgl/gpio/for-kent
First, rewinding head to replay your work on top of it...
Applying: gpio: expose pull-up/pull-down line flags to userspace
Applying: gpiolib: add support for pull up/down to lineevent_create
Applying: gpiolib: add support for disabling line bias
Applying: gpiolib: add support for biasing output lines
Using index info to reconstruct a base tree...
M	drivers/gpio/gpiolib.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpio/gpiolib.c
Applying: gpio: mockup: add set_config to support pull up/down
Applying: gpiolib: move validation of line handle flags into helper function
Applying: gpio: add new SET_CONFIG ioctl() to gpio chardev

Or was it more about eyeballing and retesting the rebase in case the
3-way merge went haywire?

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v5 4/7] gpiolib: add support for biasing output lines
  2019-11-05  6:06           ` Kent Gibson
@ 2019-11-05  9:10             ` Bartosz Golaszewski
  0 siblings, 0 replies; 17+ messages in thread
From: Bartosz Golaszewski @ 2019-11-05  9:10 UTC (permalink / raw)
  To: Kent Gibson
  Cc: linux-gpio, Linus Walleij, Bamvor Jian Zhang, Drew Fustini,
	Thomas Petazzoni

wt., 5 lis 2019 o 07:06 Kent Gibson <warthog618@gmail.com> napisał(a):
>
> On Tue, Nov 05, 2019 at 10:03:42AM +0800, Kent Gibson wrote:
> > On Mon, Nov 04, 2019 at 05:19:14PM +0100, Bartosz Golaszewski wrote:
> > > pon., 4 lis 2019 o 16:59 Kent Gibson <warthog618@gmail.com> napisał(a):
> > > >
> > > > > Ugh, I missed one thing here - my for-next branch doesn't contain the
> > > > > following commit e735244e2cf0 ("gpiolib: don't clear FLAG_IS_OUT when
> > > > > emulating open-drain/open-source") which happens to modify this
> > > > > function.
> > > > >
> > > > > If I provided you with a branch containing it - would it be a lot of
> > > > > effort on your part to rebase it on top of it? If so - I can do it
> > > > > myself.
> > > > >
> > > >
> > > > I can do a rebase - though not until tomorrow (it is getting late here).
> > > > I would like that commit in as well - I suspect it being missing is
> > > > the reason a couple of the gpiod tests I was working on are failing.
> > > > I was in the process of tracking that down when I switched back to this.
> > > >
> > > > Cheers,
> > > > Kent.
> > > >
> > > >
> > >
> > > No problem, it can wait until tomorrow. Please use the following
> > > branch - gpio/for-kent - from my tree.
> > >
> >
> > That was a lot simpler than I expected - it rebased cleanly onto the
> > new branch.  And fixed the gpiod test errors I was trying to track down.
> > Will submit v6 shortly.
> >
>
> Maybe I'm missing something, but given that the rebase was clean, was
> there actually any need for v6?
> i.e. anyone can rebase the v5 patch onto gpio/for-kent:
>
> $ git checkout -b pud_rebase brgl/gpio/for-next
> Branch 'pud_rebase' set up to track remote branch 'gpio/for-next' from 'brgl'.
> Switched to a new branch 'pud_rebase'
> $ git am PATCH-v5-0-7-gpio-expose-line-bias-flags-to-userspace.mbox
> Applying: gpio: expose pull-up/pull-down line flags to userspace
> Applying: gpiolib: add support for pull up/down to lineevent_create
> Applying: gpiolib: add support for disabling line bias
> Applying: gpiolib: add support for biasing output lines
> Applying: gpio: mockup: add set_config to support pull up/down
> Applying: gpiolib: move validation of line handle flags into helper function
> Applying: gpio: add new SET_CONFIG ioctl() to gpio chardev
> $ git rebase brgl/gpio/for-kent
> First, rewinding head to replay your work on top of it...
> Applying: gpio: expose pull-up/pull-down line flags to userspace
> Applying: gpiolib: add support for pull up/down to lineevent_create
> Applying: gpiolib: add support for disabling line bias
> Applying: gpiolib: add support for biasing output lines
> Using index info to reconstruct a base tree...
> M       drivers/gpio/gpiolib.c
> Falling back to patching base and 3-way merge...
> Auto-merging drivers/gpio/gpiolib.c
> Applying: gpio: mockup: add set_config to support pull up/down
> Applying: gpiolib: move validation of line handle flags into helper function
> Applying: gpio: add new SET_CONFIG ioctl() to gpio chardev
>
> Or was it more about eyeballing and retesting the rebase in case the
> 3-way merge went haywire?
>

Exactly. :)

Thanks for the patches, I'll have time to review them around 3:00pm
and I'll take them through my branch for v5.5.

Bart

> Cheers,
> Kent.

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2019-11-05  9:10 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-04 15:38 [PATCH v5 0/7] gpio: expose line bias flags to userspace Kent Gibson
2019-11-04 15:38 ` [PATCH v5 1/7] gpio: expose pull-up/pull-down line " Kent Gibson
2019-11-04 15:38 ` [PATCH v5 2/7] gpiolib: add support for pull up/down to lineevent_create Kent Gibson
2019-11-04 15:38 ` [PATCH v5 3/7] gpiolib: add support for disabling line bias Kent Gibson
2019-11-04 15:38 ` [PATCH v5 4/7] gpiolib: add support for biasing output lines Kent Gibson
2019-11-04 15:50   ` Bartosz Golaszewski
2019-11-04 15:59     ` Kent Gibson
2019-11-04 16:19       ` Bartosz Golaszewski
2019-11-05  2:03         ` Kent Gibson
2019-11-05  6:06           ` Kent Gibson
2019-11-05  9:10             ` Bartosz Golaszewski
2019-11-04 15:38 ` [PATCH v5 5/7] gpio: mockup: add set_config to support pull up/down Kent Gibson
2019-11-04 15:38 ` [PATCH v5 6/7] gpiolib: move validation of line handle flags into helper function Kent Gibson
2019-11-04 15:38 ` [PATCH v5 7/7] gpio: add new SET_CONFIG ioctl() to gpio chardev Kent Gibson
2019-11-04 19:58 ` [PATCH v5 0/7] gpio: expose line bias flags to userspace Drew Fustini
2019-11-05  0:12   ` Kent Gibson
2019-11-05  5:34     ` Kent Gibson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.