Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 07 Nov 2014 21:36:58 -0700
From:      Ian Lepore <ian@FreeBSD.org>
To:        Rui Paulo <rpaulo@me.com>
Cc:        arm@freebsd.org, embedded@freebsd.org
Subject:   Re: libgpio
Message-ID:  <1415421418.1200.278.camel@revolution.hippie.lan>
In-Reply-To: <7B37033A-A7DC-4328-90E0-F33A2A008D68@me.com>
References:  <B3B50210-8AE9-411A-84B1-AE6C10494149@me.com> <58908C87-6046-4873-87B1-74995EFA72D1@bsdimp.com> <7B37033A-A7DC-4328-90E0-F33A2A008D68@me.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2014-11-07 at 20:08 -0800, Rui Paulo wrote:
> On Nov 7, 2014, at 07:44, Warner Losh <imp@bsdimp.com> wrote:
> > I generally like it. Here=92s some suggestions, though many may be ha=
rd given that our gpio interface is a bit weak.
> >=20
> > First, there=92s no way to set multiple pins at the same time. That=92=
s likely a reflection of our GPIO system, I know, but it is a deficiency.=
 Fortunately, most devices can tolerate multiple pins changing at differe=
nt times before a =91clock=92 or =91enable=92 pin forces them to latch th=
eir state.
>=20
> OK;  I'll work on an API that does this even if it's just a for loop se=
tting multiple pins to their state.
>=20

A loop would default the purpose of the feature.  Sometimes you need to
create a bus out of a collection of pins, and it only works if you can
manipulate the pin states atomically as a group.  If the underlying
device doesn't support it, then you wouldn't be trying to do it in the
first place.

The current at91 gpio interface supports this in a fairly simple way,
but not a way that would necessarily map to every device (it assumes 32
pins per /dev/gpiocN for example).

> > What the heck is g_caps? There=92s nothing at all to describe it. Not=
 even an indirection to look at sys/gpio.h
>=20
> It's what describes the pin: input/output/pullup/etc.  I'll add some do=
cumentation.  I need to write a man page anyway.
>=20
> > For systems that have multiple GPIO devices (some have a few hundred =
I/O lines that can be addressed), how
> > do you handle that? Do you just kinda have to know these details?
>=20
> Right now you have to work with each individually.  We could change it =
so that it opens all gpio devices and provides a structure that includes =
all pins.
>=20

That's probably not a good idea, because gpio devices can come and go.
For example, at work we have hot-pluggable expansion cards with an i2c
bus that runs to each expansion slot, and there are i2c devices that
provide gpio.  FTDI usb<->serial chips also provide gpio pins and can
come and go.

I think userland software working with gpios is generally purpose-
specific and targeted at a particular piece of hardware, and just knows
what device and pin numbers to work with, as opposed to knowing some
abstraction like "pin 147".

-- Ian

> > There=92s no facilities for interrupts (usually you=92d like to say =93=
wait for this line to change and let me know=94). I know that the Atmel g=
pio stuff did this, but I don=92t think that made it into the generalizat=
ion that was later done.
>=20
> There's no kernel support for it, but the library could create a thread=
 to poll the pin to see if it has changed.  It's wasteful, but I don't se=
e any better way until we have GPIO interrupts.
>=20
> > I=92m not sure that I like the gpio_pin_* helper functions causing th=
e thing to change, rather than operating on a gpio_config_t. But since yo=
u don=92t normally change a bunch at a time, that=92s not so bad.
>=20
> I just added those to make it easy to configure pins in one shot.
>=20
> > Finally a question: What does Linux do here? Is there a standard inte=
rface that we could use to leverage off applications written for Linux? P=
erhaps beyond the scope of what you=92re trying to do, but any discussion=
 about pushing things into the base should ask the question =93Is this th=
e right, most useful interface?=94
>=20
> That was correctly answered by Johny.
>=20
> --
> Rui Paulo
>=20
>=20
>=20
> _______________________________________________
> freebsd-arm@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arm
> To unsubscribe, send any mail to "freebsd-arm-unsubscribe@freebsd.org"
>=20





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1415421418.1200.278.camel>