Thread (60 messages) 60 messages, 7 authors, 2022-02-05

Re: [PATCH v3 0/2] gpio: add generic gpio input multiplexer

From: Drew Fustini <hidden>
Date: 2021-05-24 21:25:43

On Mon, May 17, 2021 at 07:58:45PM +0300, Mauri Sandberg wrote:
Hello all!

This patch set is closely related to another thread at [4], which I abandoned
against better judgement and created this one.

Here I am sending revised versions of the patches. It builds on v2 and adopts 
managed device resources as suggested by Andy on the thread mentioned
above [5].

I have tested the functionality on a NXP 74HC153 dual 4-way muxer. Drew, did
you find the time to have a go with this [6] and if so, did it work as expected?

Thanks,
Mauri

[4] https://www.spinics.net/lists/linux-gpio/msg58573.html
[5] https://www.spinics.net/lists/linux-gpio/msg60160.html
[6] https://www.spinics.net/lists/linux-gpio/msg60159.html


Mauri Sandberg (2):
  dt-bindings: gpio-mux-input: add documentation
  gpio: gpio-mux-input: add generic gpio input multiplexer

 .../bindings/gpio/gpio-mux-input.yaml         |  75 +++++++++++
 drivers/gpio/Kconfig                          |  16 +++
 drivers/gpio/Makefile                         |   1 +
 drivers/gpio/gpio-mux-input.c                 | 124 ++++++++++++++++++
 4 files changed, 216 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/gpio/gpio-mux-input.yaml
 create mode 100644 drivers/gpio/gpio-mux-input.c


base-commit: 6453b9532b5f77d19837b159c4d074f0af9f141b
-- 
2.25.1
Tested-by: Drew Fustini <redacted>
Reviewed-by: Drew Fustini <redacted>

I have wired up the TI CD74HC153E to a BeagleBone Black:

  S0: P8_7
  S1: P8_8

  1Y: P8_10
  2Y: P8_9

I added this to arch/arm/boot/dts/am335x-boneblack.dts

  mux: mux-controller {
          compatible = "gpio-mux";
          #mux-control-cells = <0>;

          mux-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>, /* S0: P8_7 */
                      <&gpio2 3 GPIO_ACTIVE_HIGH>  /* S1: P8_8 */;
  };

  gpio8: key-mux1 {
          compatible = "gpio-mux-input";
          mux-controls = <&mux>;

          gpio-controller;
          #gpio-cells = <2>;

          // GPIOs used by this node, mux pin
          pin-gpios = <&gpio2 5 GPIO_ACTIVE_HIGH>; /* 2Y: P8_9 */
  };

  gpio9: key-mux2 {
          compatible = "gpio-mux-input";
          mux-controls = <&mux>;

          gpio-controller;
          #gpio-cells = <2>;

          // GPIOs used by this node, mux pin
          pin-gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>; /* 1Y: P8_10 */
  };


The two new gpiochips appear:

  root@beaglebone:~# gpiodetect
  gpiochip0 [gpio-0-31] (32 lines)
  gpiochip1 [gpio-32-63] (32 lines)
  gpiochip2 [gpio-64-95] (32 lines)
  gpiochip3 [gpio-96-127] (32 lines)
  gpiochip4 [key-mux1] (4 lines)
  gpiochip5 [key-mux2] (4 lines)
  
The mux pins and input pins are connected to lines on gpiochip1:

  debian@beaglebone:~$ gpioinfo 1
  gpiochip1 - 32 lines:
	  line   0:     "P9_15B"       unused   input  active-high
	  line   1:      "P8_18"       unused   input  active-high
	  line   2:       "P8_7"        "mux"  output  active-high [used]
	  line   3:       "P8_8"        "mux"  output  active-high [used]
	  line   4:      "P8_10"        "pin"   input  active-high [used]
	  line   5:       "P8_9"        "pin"   input  active-high [used]
  <snip>
  

Test with all inputs connected to 3.3V (1I0:1I3 and 2I0:2I3)

  debian@beaglebone:~$ gpioget 4 0
  1
  debian@beaglebone:~$ gpioget 4 1
  1
  debian@beaglebone:~$ gpioget 4 2
  1
  debian@beaglebone:~$ gpioget 4 3
  1
  debian@beaglebone:~$ gpioget 5 0
  1
  debian@beaglebone:~$ gpioget 5 1
  1
  debian@beaglebone:~$ gpioget 5 2
  1
  debian@beaglebone:~$ gpioget 5 3
  1

Connect 1I0 to GND

  debian@beaglebone:~$ gpioget 4 0
  0

Connect 1I0 to 3V3

  debian@beaglebone:~$ gpioget 4 0
  1

I tried this with all the rest and got the same succesfull results.

thanks,
drew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help