blob: f49c05249ca78f989f64d06e0d7a3b1157552eb0 [file] [edit]
# 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>;
};