1*2a7618baSJonas Jelonek# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*2a7618baSJonas Jelonek%YAML 1.2 3*2a7618baSJonas Jelonek--- 4*2a7618baSJonas Jelonek$id: http://devicetree.org/schemas/gpio/gpio-line-mux.yaml# 5*2a7618baSJonas Jelonek$schema: http://devicetree.org/meta-schemas/core.yaml# 6*2a7618baSJonas Jelonek 7*2a7618baSJonas Jelonektitle: GPIO line mux 8*2a7618baSJonas Jelonek 9*2a7618baSJonas Jelonekmaintainers: 10*2a7618baSJonas Jelonek - Jonas Jelonek <jelonek.jonas@gmail.com> 11*2a7618baSJonas Jelonek 12*2a7618baSJonas Jelonekdescription: | 13*2a7618baSJonas Jelonek A GPIO controller to provide virtual GPIOs for a 1-to-many input-only mapping 14*2a7618baSJonas Jelonek backed by a single shared GPIO and a multiplexer. A simple illustrated 15*2a7618baSJonas Jelonek example is: 16*2a7618baSJonas Jelonek 17*2a7618baSJonas Jelonek +----- A 18*2a7618baSJonas Jelonek IN / 19*2a7618baSJonas Jelonek <-----o------- B 20*2a7618baSJonas Jelonek / |\ 21*2a7618baSJonas Jelonek | | +----- C 22*2a7618baSJonas Jelonek | | \ 23*2a7618baSJonas Jelonek | | +--- D 24*2a7618baSJonas Jelonek | | 25*2a7618baSJonas Jelonek M1 M0 26*2a7618baSJonas Jelonek 27*2a7618baSJonas Jelonek MUX CONTROL 28*2a7618baSJonas Jelonek 29*2a7618baSJonas Jelonek M1 M0 IN 30*2a7618baSJonas Jelonek 0 0 A 31*2a7618baSJonas Jelonek 0 1 B 32*2a7618baSJonas Jelonek 1 0 C 33*2a7618baSJonas Jelonek 1 1 D 34*2a7618baSJonas Jelonek 35*2a7618baSJonas Jelonek This can be used in case a real GPIO is connected to multiple inputs and 36*2a7618baSJonas Jelonek controlled by a multiplexer, and another subsystem/driver does not work 37*2a7618baSJonas Jelonek directly with the multiplexer subsystem. 38*2a7618baSJonas Jelonek 39*2a7618baSJonas Jelonekproperties: 40*2a7618baSJonas Jelonek compatible: 41*2a7618baSJonas Jelonek const: gpio-line-mux 42*2a7618baSJonas Jelonek 43*2a7618baSJonas Jelonek gpio-controller: true 44*2a7618baSJonas Jelonek 45*2a7618baSJonas Jelonek "#gpio-cells": 46*2a7618baSJonas Jelonek const: 2 47*2a7618baSJonas Jelonek 48*2a7618baSJonas Jelonek gpio-line-mux-states: 49*2a7618baSJonas Jelonek description: Mux states corresponding to the virtual GPIOs. 50*2a7618baSJonas Jelonek $ref: /schemas/types.yaml#/definitions/uint32-array 51*2a7618baSJonas Jelonek 52*2a7618baSJonas Jelonek gpio-line-names: true 53*2a7618baSJonas Jelonek 54*2a7618baSJonas Jelonek mux-controls: 55*2a7618baSJonas Jelonek maxItems: 1 56*2a7618baSJonas Jelonek description: 57*2a7618baSJonas Jelonek Phandle to the multiplexer to control access to the GPIOs. 58*2a7618baSJonas Jelonek 59*2a7618baSJonas Jelonek ngpios: false 60*2a7618baSJonas Jelonek 61*2a7618baSJonas Jelonek muxed-gpios: 62*2a7618baSJonas Jelonek maxItems: 1 63*2a7618baSJonas Jelonek description: 64*2a7618baSJonas Jelonek GPIO which is the '1' in 1-to-many and is shared by the virtual GPIOs 65*2a7618baSJonas Jelonek and controlled via the mux. 66*2a7618baSJonas Jelonek 67*2a7618baSJonas Jelonekrequired: 68*2a7618baSJonas Jelonek - compatible 69*2a7618baSJonas Jelonek - gpio-controller 70*2a7618baSJonas Jelonek - gpio-line-mux-states 71*2a7618baSJonas Jelonek - mux-controls 72*2a7618baSJonas Jelonek - muxed-gpios 73*2a7618baSJonas Jelonek 74*2a7618baSJonas JelonekadditionalProperties: false 75*2a7618baSJonas Jelonek 76*2a7618baSJonas Jelonekexamples: 77*2a7618baSJonas Jelonek - | 78*2a7618baSJonas Jelonek #include <dt-bindings/gpio/gpio.h> 79*2a7618baSJonas Jelonek #include <dt-bindings/mux/mux.h> 80*2a7618baSJonas Jelonek 81*2a7618baSJonas Jelonek sfp_gpio_mux: mux-controller-1 { 82*2a7618baSJonas Jelonek compatible = "gpio-mux"; 83*2a7618baSJonas Jelonek mux-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>, 84*2a7618baSJonas Jelonek <&gpio0 1 GPIO_ACTIVE_HIGH>; 85*2a7618baSJonas Jelonek #mux-control-cells = <0>; 86*2a7618baSJonas Jelonek idle-state = <MUX_IDLE_AS_IS>; 87*2a7618baSJonas Jelonek }; 88*2a7618baSJonas Jelonek 89*2a7618baSJonas Jelonek sfp1_gpio: sfp-gpio-1 { 90*2a7618baSJonas Jelonek compatible = "gpio-line-mux"; 91*2a7618baSJonas Jelonek gpio-controller; 92*2a7618baSJonas Jelonek #gpio-cells = <2>; 93*2a7618baSJonas Jelonek 94*2a7618baSJonas Jelonek mux-controls = <&sfp_gpio_mux>; 95*2a7618baSJonas Jelonek muxed-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; 96*2a7618baSJonas Jelonek 97*2a7618baSJonas Jelonek gpio-line-mux-states = <0>, <1>, <3>; 98*2a7618baSJonas Jelonek }; 99*2a7618baSJonas Jelonek 100*2a7618baSJonas Jelonek sfp1: sfp-p1 { 101*2a7618baSJonas Jelonek compatible = "sff,sfp"; 102*2a7618baSJonas Jelonek 103*2a7618baSJonas Jelonek i2c-bus = <&sfp1_i2c>; 104*2a7618baSJonas Jelonek los-gpios = <&sfp1_gpio 0 GPIO_ACTIVE_HIGH>; 105*2a7618baSJonas Jelonek mod-def0-gpios = <&sfp1_gpio 1 GPIO_ACTIVE_LOW>; 106*2a7618baSJonas Jelonek tx-fault-gpios = <&sfp1_gpio 2 GPIO_ACTIVE_HIGH>; 107*2a7618baSJonas Jelonek }; 108