# 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 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 #include 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 = ; }; 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>; };