diff mbox series

[v5,4/7] gpiolib: add support for biasing output lines

Message ID 20191104153841.16911-5-warthog618@gmail.com
State New
Headers show
Series gpio: expose line bias flags to userspace | expand

Commit Message

Kent Gibson Nov. 4, 2019, 3:38 p.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

Bartosz Golaszewski Nov. 4, 2019, 3:50 p.m. UTC | #1
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
>
Kent Gibson Nov. 4, 2019, 3:59 p.m. UTC | #2
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.
Bartosz Golaszewski Nov. 4, 2019, 4:19 p.m. UTC | #3
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
Kent Gibson Nov. 5, 2019, 2:03 a.m. UTC | #4
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.
Kent Gibson Nov. 5, 2019, 6:06 a.m. UTC | #5
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.
Bartosz Golaszewski Nov. 5, 2019, 9:10 a.m. UTC | #6
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.
diff mbox series

Patch

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);