[v6,4/7] gpiolib: add support for biasing output lines
diff mbox series

Message ID 20191105020429.18942-5-warthog618@gmail.com
State New
Headers show
Series
  • gpio: expose line bias flags to userspace
Related show

Commit Message

Kent Gibson Nov. 5, 2019, 2:04 a.m. UTC
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(-)

Comments

Drew Fustini Nov. 6, 2019, 7:39 p.m. UTC | #1
On Tue, Nov 05, 2019 at 10:04:26AM +0800, Kent Gibson wrote:
> 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(-)

I'm not sure if I am doing something wrong but I can't seem to apply this patch
from the series.

I checked out brgl/gpio/for-next.  I opened this mailbox from lore in mutt:
https://lore.kernel.org/linux-gpio/20191105231533.GA3478@sol/t.mbox.gz

And then I saved each message in the v6 series so I could run 'git am' on each.
I thought I should be able to run git am on the whole mailbox file but I wasn't
sure if the cover letter and replies would cause a problem.

I'd appreciate any suggestions as to how I can resolve this:

pdp7@x1:~/linux$ git checkout -b brgl-gpio-for-next brgl/gpio/for-next 
Branch 'brgl-gpio-for-next' set up to track remote branch 'gpio/for-next' from 'brgl'.
Switched to a new branch 'brgl-gpio-for-next'
pdp7@x1:~/linux$ git log --oneline -1
228fc0104070 (HEAD -> brgl-gpio-for-next, tag: gpio-v5.5-updates-for-linus-part-1, brgl/gpio/for-next) gpio: of: don't warn if ignored GPIO flag matches the behavior
pdp7@x1:~/linux$ grep Subject /tmp/7*
/tmp/71:Subject: [PATCH v6 1/7] gpio: expose pull-up/pull-down line flags to userspace
/tmp/72:Subject: [PATCH v6 2/7] gpiolib: add support for pull up/down to lineevent_create
/tmp/73:Subject: [PATCH v6 3/7] gpiolib: add support for disabling line bias
/tmp/74:Subject: [PATCH v6 4/7] gpiolib: add support for biasing output lines
/tmp/75:Subject: [PATCH v6 5/7] gpio: mockup: add set_config to support pull up/down
/tmp/76:Subject: [PATCH v6 6/7] gpiolib: move validation of line handle flags into helper function
/tmp/77:Subject: [PATCH v6 7/7] gpio: add new SET_CONFIG ioctl() to gpio chardev
pdp7@x1:~/linux$ git am /tmp/7*
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
error: patch failed: drivers/gpio/gpiolib.c:3168
error: drivers/gpio/gpiolib.c: patch does not apply
Patch failed at 0004 gpiolib: add support for biasing output lines
hint: Use 'git am --show-current-patch' to see the failed patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

thanks,
drew
Kent Gibson Nov. 6, 2019, 11:56 p.m. UTC | #2
On Wed, Nov 06, 2019 at 11:39:31AM -0800, Drew Fustini wrote:
> On Tue, Nov 05, 2019 at 10:04:26AM +0800, Kent Gibson wrote:
> > 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(-)
> 
> I'm not sure if I am doing something wrong but I can't seem to apply this patch
> from the series.
> 
> I checked out brgl/gpio/for-next.  I opened this mailbox from lore in mutt:
> https://lore.kernel.org/linux-gpio/20191105231533.GA3478@sol/t.mbox.gz
> 
> And then I saved each message in the v6 series so I could run 'git am' on each.
> I thought I should be able to run git am on the whole mailbox file but I wasn't
> sure if the cover letter and replies would cause a problem.
> 
> I'd appreciate any suggestions as to how I can resolve this:
> 
> pdp7@x1:~/linux$ git checkout -b brgl-gpio-for-next brgl/gpio/for-next 

As per the cover note, v6 is based on brgl/gpio/for-kent, not brgl/gpio/for-next:

 The changes from v5:
  - rebased onto Bart's gpio/for-kent branch.
 
That is the only diff between v5 and v6.  Ironically you should be
applying v5 to your branch :)

Specifically, in my branch the v6 patch is applied to 

e812692b6e9c (brgl/gpio/for-kent) gpio: rcar: Use proper irq_chip name

which is still the HEAD at time of writing.

Applying the patch to for-next also breaks for me at 0004, so your 
patches are probably ok.

You aren't the only one wondering if there is an easier way to apply patches
from lore, especially when there are additional replies in the thread.
To write my demo showing how anyone, not just those that received the 
patches by mail, can rebase v5 onto for-kent to get v6, I ended up 
downloading the mbox.gz, and unzipping and removing the cruft from it.
Fortunately the mbox is chronological, so it was just removing the cover
note and then everything after patch 7.

Surely there is a better way to do this?
Is there a filter for lore or some tool out there that can filter
the returned mbox for you?

Cheers,
Kent.

Patch
diff mbox series

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 0ac0a250b17a..f852ff60ae6e 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -556,8 +556,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)))
@@ -3168,6 +3169,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);
 
 set_output_flag: