[PATCH RFC 1/1] gpio: mcp23s08: convert driver to DT

Grant Likely grant.likely at secretlab.ca
Sun Feb 10 01:24:04 EST 2013


On Wed, 6 Feb 2013 10:31:04 +0100, Lars Poeschel <poeschel at lemonage.de> wrote:
> On Tuesday 05 February 2013 at 15:29:09, Grant Likely wrote:
> > On Thu, 31 Jan 2013 21:51:36 +0100, Linus Walleij 
> <linus.walleij at linaro.org> wrote:
> > > On Thu, Jan 31, 2013 at 4:58 PM, Lars Poeschel <larsi at wh2.tu-dresden.de> 
> wrote:
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt
> > > > @@ -0,0 +1,27 @@
> > > > +Microchip MCP2308/MCP23S08/MCP23017/MCP23S17 driver for
> > > > +8-/16-bit I/O expander with serial interface (I2C/SPI)
> > > > +
> > > > +Required properties:
> > > > +- compatible : Should be "mcp,mcp23s08-gpio", "mcp,mcp23s17-gpio",
> > > > +                       "mcp,mcp23008-gpio" or "mcp,mcp23017-gpio"
> > > > +- base : The first gpio number that should be assigned by this chip.
> > > 
> > > No. We do not tie the global GPIO numbers into the device tree.
> > > 
> > > In the DT GPIOs are referenced by ampersand <&gpio0 1 2>
> > > notation referring to the instance, so as you realize DT itself
> > > has no need for that number.
> > > 
> > > Further it is not OS-neutral.
> > > 
> > > You have to find another way to handle this in the driver code.
> > > In worst case: use AUXDATA.
> > 
> > Hi Lars,
> > 
> > The trick is to declare the io expander to be a "gpio-controller" and
> > use the #gpio-cells property to declare how many cells (32-bit numbers)
> > are need to specify a single gpio line. Most gpio controllers use
> > "gpio-cells=<2>"; The first cell is the *controller local* gpio
> > number, and the second cell is used for flags. That way your gpio
> > controller can be referenced by other nodes in the tree with a "gpios"
> > property.
> > 
> > You can find lots of examples of this in the tree.
> 
> Linus, Grant, thanks for the explanations. I think I have catched where it 
> should go.
> The thing that confused me was, that the platform_data for the chip has a 
> mandatory "base" member, that sets the linux global gpio number at which the 
> chip should appear. A value of -1 for automatic assigning gpio number is not 
> allowed, the chip will not probe.
> I have to change the driver to allow at least this -1 as an additional value.
> As Linus pointed out, it is not desirable to set the global gpio base number 
> from device tree, right ? If I have 3 instances of this chips then, how can 
> userspace sw distinguish then to which one it is talking ?

You look in sysfs to find the chip you are interested in. That is the
place to find out how dynamic numbers have been assigned.

g.



More information about the devicetree-discuss mailing list