Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Switch GPIO direction on Raspberry Pi using ioctl()



gremlin%portal-to-web.de@localhost (Martin Mersberger) writes:

>My todays workaround is to run a kernel with 'INSECURE' option enabled,
>but any alternative which would allow a direction change of certain pins
>would be great

There is already a bidirectional GPIO_PIN_INOUT mode (as opposed to the
unidirectional GPIO_PIN_INPUT and GPIO_PIN_OUTPUT modes). But I doubt
anyone has an idea how it should operate. It also lacks a method to
tristate an output.

These 4 drivers reference the INOUT mode.

arch/arm/imx/imx23_pinctrl.c
- treats it like GPIO_PIN_OUTPUT, the output is open-drain with
  an internal or maybe an external pullup.

arch/emips/ebus/gpio_ebus.c
- I doubt this works for anything, the control method sets a
  bitmask for one pin and clears them for all other pins.

arch/powerpc/ibm4xx/dev/gpio_opb.c
- GPIO_PIN_INOUT, GPIO_PIN_TRISTATE and GPIO_PIN_OPENDRAIN are
  used as disjunct modes to control a pin.

arch/sandpoint/sandpoint/nhpow.c
- nothing to control, all pins have a default mode of GPIO_PIN_INOUT.
  That's probably an open-drain output.


There should be a clear definition on what the flags actually mean.
For example:

Pin directions, you must configure one of these:

GPIO_PIN_INPUT   - pin can be only read
GPIO_PIN_OUTPUT  - pin can be only written
GPIO_PIN_INOUT   - pin can be read and written

Output modes, you can configure one of these for an output pin.
If none is set, a hardware dependent value is used. The modes
are ignored for an input pin.

GPIO_PIN_OPENDRAIN - configure output as open drain
GPIO_PIN_PUSHPULL  - configure output as push-pull
GPIO_PIN_TRISTATE  - disable output

Pin options:

GPIO_PIN_PULLUP    - enable pullup resistor
GPIO_PIN_PULLDOWN  - enable pull-down resistor
GPIO_PIN_INVIN     - invert input (ignored for GPIO_PIN_OUTPUT mode)
GPIO_PIN_INVOUT    - invert output (ignored for GPIO_PIN_INPUT mode)
GPIO_PIN_PULSATE   - pulsate output (ignored for GPIO_PIN_INPUT mode)


GPIO_PIN_INPUT behaves like GPIO_PIN_INOUT+GPIO_PIN_TRISTATE but
tells you that the pin cannot be programmed as output.


There should also be new pin options, like:

GPIO_PIN_HIGHZ     - output can be tristated
GPIO_PIN_FLOAT     - pullups/pulldowns can be disabled

and corresponding operations

GPIOHIGHZ(struct gpio_req)
GPIOFLOAT(struct gpio_req)


-- 
-- 
                                Michael van Elst
Internet: mlelstv%serpens.de@localhost
                                "A potential Snark may lurk in every tree."


Home | Main Index | Thread Index | Old Index