| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/gpio/gpio-line-mux.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: GPIO line mux |
| |
| maintainers: |
| - Jonas Jelonek <jelonek.jonas@gmail.com> |
| |
| description: | |
| A GPIO controller to provide virtual GPIOs for a 1-to-many input-only mapping |
| backed by a single shared GPIO and a multiplexer. A simple illustrated |
| example is: |
| |
| +----- A |
| IN / |
| <-----o------- B |
| / |\ |
| | | +----- C |
| | | \ |
| | | +--- D |
| | | |
| M1 M0 |
| |
| MUX CONTROL |
| |
| M1 M0 IN |
| 0 0 A |
| 0 1 B |
| 1 0 C |
| 1 1 D |
| |
| This can be used in case a real GPIO is connected to multiple inputs and |
| controlled by a multiplexer, and another subsystem/driver does not work |
| directly with the multiplexer subsystem. |
| |
| properties: |
| compatible: |
| const: gpio-line-mux |
| |
| gpio-controller: true |
| |
| "#gpio-cells": |
| const: 2 |
| |
| gpio-line-mux-states: |
| description: Mux states corresponding to the virtual GPIOs. |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| |
| gpio-line-names: true |
| |
| mux-controls: |
| maxItems: 1 |
| description: |
| Phandle to the multiplexer to control access to the GPIOs. |
| |
| ngpios: false |
| |
| muxed-gpios: |
| maxItems: 1 |
| description: |
| GPIO which is the '1' in 1-to-many and is shared by the virtual GPIOs |
| and controlled via the mux. |
| |
| required: |
| - compatible |
| - gpio-controller |
| - gpio-line-mux-states |
| - mux-controls |
| - muxed-gpios |
| |
| additionalProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/gpio/gpio.h> |
| #include <dt-bindings/mux/mux.h> |
| |
| sfp_gpio_mux: mux-controller-1 { |
| compatible = "gpio-mux"; |
| mux-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, |
| <&gpio0 1 GPIO_ACTIVE_HIGH>; |
| #mux-control-cells = <0>; |
| idle-state = <MUX_IDLE_AS_IS>; |
| }; |
| |
| sfp1_gpio: sfp-gpio-1 { |
| compatible = "gpio-line-mux"; |
| gpio-controller; |
| #gpio-cells = <2>; |
| |
| mux-controls = <&sfp_gpio_mux>; |
| muxed-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; |
| |
| gpio-line-mux-states = <0>, <1>, <3>; |
| }; |
| |
| sfp1: sfp-p1 { |
| compatible = "sff,sfp"; |
| |
| i2c-bus = <&sfp1_i2c>; |
| los-gpios = <&sfp1_gpio 0 GPIO_ACTIVE_HIGH>; |
| mod-def0-gpios = <&sfp1_gpio 1 GPIO_ACTIVE_LOW>; |
| tx-fault-gpios = <&sfp1_gpio 2 GPIO_ACTIVE_HIGH>; |
| }; |