All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kent Gibson <warthog618@gmail.com>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Drew Fustini <drew@pdp7.com>,
	"open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>,
	Linus Walleij <linus.walleij@linaro.org>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [RFC] gpio: expose pull-up/pull-down line flags to userspace
Date: Wed, 9 Oct 2019 07:56:26 +0800	[thread overview]
Message-ID: <20191008235626.GA10744@sol> (raw)
In-Reply-To: <CAMRc=MdcWUtEx3QAKxEmEEa1Effq7JpRPGNJOGfSYP6Nh0p1Hg@mail.gmail.com>

On Wed, Oct 09, 2019 at 01:30:18AM +0200, Bartosz Golaszewski wrote:
> śr., 9 paź 2019 o 01:21 Kent Gibson <warthog618@gmail.com> napisał(a):
> >
> > On Tue, Oct 08, 2019 at 10:56:18PM +0200, Bartosz Golaszewski wrote:
> > > wt., 8 paź 2019 o 08:15 Kent Gibson <warthog618@gmail.com> napisał(a):
> > > >
> > > > On Sat, Sep 21, 2019 at 12:25:23PM +0200, Drew Fustini wrote:
> > > > > 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>
> > > > > ---
> > > > >  drivers/gpio/gpiolib.c    | 12 ++++++++++++
> > > > >  include/uapi/linux/gpio.h |  4 ++++
> > > > >  2 files changed, 16 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> > > > > index d9074191edef..9da1093cc7f5 100644
> > > > > --- a/drivers/gpio/gpiolib.c
> > > > > +++ b/drivers/gpio/gpiolib.c
> > > > > @@ -427,6 +427,8 @@ struct linehandle_state {
> > > > >       (GPIOHANDLE_REQUEST_INPUT | \
> > > > >       GPIOHANDLE_REQUEST_OUTPUT | \
> > > > >       GPIOHANDLE_REQUEST_ACTIVE_LOW | \
> > > > > +     GPIOHANDLE_REQUEST_PULL_UP | \
> > > > > +     GPIOHANDLE_REQUEST_PULL_DOWN | \
> > > > >       GPIOHANDLE_REQUEST_OPEN_DRAIN | \
> > > > >       GPIOHANDLE_REQUEST_OPEN_SOURCE)
> > > > >
> > > > > @@ -598,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_PULL_DOWN)
> > > > > +                     set_bit(FLAG_PULL_DOWN, &desc->flags);
> > > > > +             if (lflags & GPIOHANDLE_REQUEST_PULL_UP)
> > > > > +                     set_bit(FLAG_PULL_UP, &desc->flags);
> > > > >
> > > > >               ret = gpiod_set_transitory(desc, false);
> > > > >               if (ret < 0)
> > > > > @@ -1102,6 +1108,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_PULL_DOWN;
> > > > > +             if (test_bit(FLAG_PULL_UP, &desc->flags))
> > > > > +                     lineinfo.flags |= GPIOLINE_FLAG_PULL_UP;
> > > > >
> > > > >               if (copy_to_user(ip, &lineinfo, sizeof(lineinfo)))
> > > > >                       return -EFAULT;
> > > > > @@ -2475,6 +2485,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..c2d1f7d908d6 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_PULL_UP        (1UL << 5)
> > > > > +#define GPIOLINE_FLAG_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_PULL_UP   (1UL << 5)
> > > > > +#define GPIOHANDLE_REQUEST_PULL_DOWN (1UL << 6)
> > > > >
> > > > >  /**
> > > > >   * struct gpiohandle_request - Information about a GPIO handle request
> > > > > --
> > > > > 2.20.1
> > > > >
> > > > Sorry for the late feedback, but I'm still not sure whether this patch
> > > > is on track to be applied or not.  I had thought not, at least not yet,
> > > > but just in case...
> > > >
> > >
> > > It still needs some fixes, but Linus seems to be fine with the general idea.
> > >
> > > > You have added the flags to linehandle_create, but not lineevent_create.
> > > > Given that your primary use case is push buttons, isn't the event request
> > > > at least as important as the handle request?  Even ignoring your use
> > > > case, I'd add them to lineevent_create just to maintain symmetry.
> > > >
> > > > Also, is it valid to set PULL_UP and PULL_DOWN simulaneously?
> > > > I would think not, but I could be wrong.
> > > > If not then that combination should be rejected with EINVAL.
> > > >
> > >
> > > Yes, some validity checks of the flags must be added. I even did it in
> > > my local branch[1].
> > >
> > Your changes for linehandle_create look ok, but for lineevent_create
> > you explicitly disabled PULL_UP and PULL_DOWN, and in a block labelled
> > "This is just wrong: we don't look for events on output lines" at that.
> >
> 
> Yeah, feel free to change it.
> 
Yeah, you see I didn't feel free to change it, as I thought the
appropriate etiquette was to send comments to the original author.
At least until the patch has been applied.
Or are RFCs a special case?

> > > Re: direction and configuration changes on requested lines: I think
> > > it's quite useful to add in the form of a new ioctl():
> > > GPIOHANDLE_SET_CONFIG_IOCTL or something. I started hacking on this
> > > but eventually got more busy this week than I anticipated. I'm still
> > > planning on sending an RFC by the end of the week though.
> > >
> > I have the reverse problem - bored and looking for something to do, so
> > more than willing to help out - if you want it.
> >
> 
> Sure, in that case let's just wait for your patches. You can just
> extend what I started, if you wish.
>
Yep, you sound tired.
Are we talking about the SET_CONFIG here?  If you have a link to what
you've started I'll take a look, but as I've already said - I'm not
about to go writing new ioctls without approval and guidance from you
and Linus.  If you have the ioctl defined I'm happy to take it from
there. Well happy-ish.

> > And while we're talking, does the gpio-mockup support pull up/down
> > being set from the kernel side?
> >
> 
> No, but feel free to add it.
>
Ok, will have a look - cos I would like to add tests for the above and
that will require the mockup supporting it as well.

Cheers,
Kent.


  reply	other threads:[~2019-10-08 23:56 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-21 10:25 [RFC] gpio: expose pull-up/pull-down line flags to userspace Drew Fustini
2019-09-23  8:38 ` Bartosz Golaszewski
2019-10-02 11:10   ` Drew Fustini
2019-10-03 12:47   ` Linus Walleij
2019-10-04  7:22     ` Bartosz Golaszewski
2019-10-04 12:46       ` Bartosz Golaszewski
2019-10-05 17:02       ` Linus Walleij
2019-10-06  3:12         ` Kent Gibson
2019-10-06 21:06           ` Linus Walleij
2019-10-07  4:37             ` Kent Gibson
2019-10-08  6:15 ` Kent Gibson
2019-10-08 20:56   ` Bartosz Golaszewski
2019-10-08 23:21     ` Kent Gibson
2019-10-08 23:30       ` Bartosz Golaszewski
2019-10-08 23:56         ` Kent Gibson [this message]
2019-10-09  0:03           ` Bartosz Golaszewski
2019-10-09  0:22             ` Kent Gibson
2019-10-09  6:55               ` Kent Gibson
2019-10-09 12:57                 ` Drew Fustini
2019-10-09 13:23                   ` Kent Gibson
2019-10-09 13:30                 ` Drew Fustini
2019-10-09 14:11                   ` Kent Gibson
2019-10-09 15:50                     ` Bartosz Golaszewski
2019-10-09 16:19                       ` Kent Gibson
2019-10-09 23:59                   ` Kent Gibson
2019-10-10  7:47                     ` Drew Fustini
2019-10-10 10:14                       ` Kent Gibson
2019-10-10 11:17                         ` Kent Gibson
2019-10-11 13:04                           ` Drew Fustini
2019-10-11 13:06                         ` Drew Fustini
2019-10-11 13:49                           ` Kent Gibson
2019-10-09 11:32               ` Drew Fustini
2019-10-09 13:57       ` Drew Fustini
2019-10-09 14:01         ` Kent Gibson
2019-10-09 11:46   ` Drew Fustini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191008235626.GA10744@sol \
    --to=warthog618@gmail.com \
    --cc=brgl@bgdev.pl \
    --cc=drew@pdp7.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=thomas.petazzoni@bootlin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.