[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <44CA7738.4050102@bootc.net>
Date: Fri, 28 Jul 2006 21:44:40 +0100
From: Chris Boot <bootc@...tc.net>
To: kernel list <linux-kernel@...r.kernel.org>
Subject: [RFC] Proposal: common kernel-wide GPIO interface
Hello all,
More and more devices these days come with some sort of GPIO interface, and more
and more drivers within the kernel could make use of a common way of accessing
pins on such an interface, not to mention userspace apps. For example, we have
the I2C, LED, and SPI subsystems that each could drive a device that's actually
connected to some GPIO pins somewhere.
I propose to develop a common way of registering and accessing GPIO pins on
various devices. Now I'm no hardware expert, but I do like to dabble a bit and
would love to see such a system be developed. Most people tend to attach stuff
like LCD displays to their parallel ports, but GPIOs are much better suited to
such a purpose than a parallel port. Some (out of tree) drivers even emulate a
parallel interface in order that userspace software can be fooled to use the
GPIO pins as a parallel port. In my view, this is ugly.
As far as I can tell, GPIO interfaces all share the following attributes:
- One or more ports made up of one or more individual pins
- Value on input or output depending on configuration
- Various configuration bits might be available to influence the pin's behaviour
- Direction
- Push-pull / Open drain
- Pull-up enable
- Possibly others
We'll need some way of assigning pins to different functions I'm guessing as
well, especially when we come to write drivers for the interface. It might not
fit right into the GPIO driver, but as far as I can see the I2C, LED, and SPI
subsystem drivers would need such a method to create generic
GPIO<=>{I2C,LED,SPI} drivers.
As well as a kernel interface I propose a userspace interface of some kind. I'm
not entirely sure what might be the most efficient way of doing this, but the
current standard way seems to be to create a sysfs class interface, although an
old-fashioned device interface with IOCTLs and so on might be the best way
forward. Any suggestions?
As for drivers, to start with I suggest a parallel port driver as well as
drivers for the NSC SCx200 and PC8736x (since I own a board with both of those).
So, if anyone likes this idea and/or has some comments, please voice your
opinions! With a little guidance from the masters, I'm willing to put the effort
in to code such a system, but I'd really like to hear what people involved both
in the hardware side and software side of GPIOs and the kernel have to say about
such an interface.
Many thanks,
Chris
--
Chris Boot
bootc@...tc.net
http://www.bootc.net/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists