1*8b82b841SThierry Reding# SPDX-License-Identifier: GPL-2.0-only 2*8b82b841SThierry Reding%YAML 1.2 3*8b82b841SThierry Reding--- 4*8b82b841SThierry Reding$id: http://devicetree.org/schemas/i2c/i2c-mux-pinctrl.yaml# 5*8b82b841SThierry Reding$schema: http://devicetree.org/meta-schemas/core.yaml# 6*8b82b841SThierry Reding 7*8b82b841SThierry Redingtitle: Pinctrl-based I2C Bus Mux 8*8b82b841SThierry Reding 9*8b82b841SThierry Redingmaintainers: 10*8b82b841SThierry Reding - Wolfram Sang <wsa@kernel.org> 11*8b82b841SThierry Reding 12*8b82b841SThierry Redingdescription: | 13*8b82b841SThierry Reding This binding describes an I2C bus multiplexer that uses pin multiplexing to route the I2C 14*8b82b841SThierry Reding signals, and represents the pin multiplexing configuration using the pinctrl device tree 15*8b82b841SThierry Reding bindings. 16*8b82b841SThierry Reding 17*8b82b841SThierry Reding +-----+ +-----+ 18*8b82b841SThierry Reding | dev | | dev | 19*8b82b841SThierry Reding +------------------------+ +-----+ +-----+ 20*8b82b841SThierry Reding | SoC | | | 21*8b82b841SThierry Reding | /----|------+--------+ 22*8b82b841SThierry Reding | +---+ +------+ | child bus A, on first set of pins 23*8b82b841SThierry Reding | |I2C|---|Pinmux| | 24*8b82b841SThierry Reding | +---+ +------+ | child bus B, on second set of pins 25*8b82b841SThierry Reding | \----|------+--------+--------+ 26*8b82b841SThierry Reding | | | | | 27*8b82b841SThierry Reding +------------------------+ +-----+ +-----+ +-----+ 28*8b82b841SThierry Reding | dev | | dev | | dev | 29*8b82b841SThierry Reding +-----+ +-----+ +-----+ 30*8b82b841SThierry Reding 31*8b82b841SThierry Reding For each named state defined in the pinctrl-names property, an I2C child bus will be created. 32*8b82b841SThierry Reding I2C child bus numbers are assigned based on the index into the pinctrl-names property. 33*8b82b841SThierry Reding 34*8b82b841SThierry Reding The only exception is that no bus will be created for a state named "idle". If such a state is 35*8b82b841SThierry Reding defined, it must be the last entry in pinctrl-names. For example: 36*8b82b841SThierry Reding 37*8b82b841SThierry Reding pinctrl-names = "ddc", "pta", "idle" -> ddc = bus 0, pta = bus 1 38*8b82b841SThierry Reding pinctrl-names = "ddc", "idle", "pta" -> Invalid ("idle" not last) 39*8b82b841SThierry Reding pinctrl-names = "idle", "ddc", "pta" -> Invalid ("idle" not last) 40*8b82b841SThierry Reding 41*8b82b841SThierry Reding Whenever an access is made to a device on a child bus, the relevant pinctrl state will be 42*8b82b841SThierry Reding programmed into hardware. 43*8b82b841SThierry Reding 44*8b82b841SThierry Reding If an idle state is defined, whenever an access is not being made to a device on a child bus, 45*8b82b841SThierry Reding the idle pinctrl state will be programmed into hardware. 46*8b82b841SThierry Reding 47*8b82b841SThierry Reding If an idle state is not defined, the most recently used pinctrl state will be left programmed 48*8b82b841SThierry Reding into hardware whenever no access is being made of a device on a child bus. 49*8b82b841SThierry Reding 50*8b82b841SThierry Redingproperties: 51*8b82b841SThierry Reding compatible: 52*8b82b841SThierry Reding const: i2c-mux-pinctrl 53*8b82b841SThierry Reding 54*8b82b841SThierry Reding i2c-parent: 55*8b82b841SThierry Reding $ref: /schemas/types.yaml#/definitions/phandle 56*8b82b841SThierry Reding description: The phandle of the I2C bus that this multiplexer's master-side port is connected 57*8b82b841SThierry Reding to. 58*8b82b841SThierry Reding 59*8b82b841SThierry RedingallOf: 60*8b82b841SThierry Reding - $ref: i2c-mux.yaml 61*8b82b841SThierry Reding 62*8b82b841SThierry RedingunevaluatedProperties: false 63*8b82b841SThierry Reding 64*8b82b841SThierry Redingrequired: 65*8b82b841SThierry Reding - compatible 66*8b82b841SThierry Reding - i2c-parent 67*8b82b841SThierry Reding 68*8b82b841SThierry Redingexamples: 69*8b82b841SThierry Reding - | 70*8b82b841SThierry Reding i2cmux { 71*8b82b841SThierry Reding compatible = "i2c-mux-pinctrl"; 72*8b82b841SThierry Reding #address-cells = <1>; 73*8b82b841SThierry Reding #size-cells = <0>; 74*8b82b841SThierry Reding 75*8b82b841SThierry Reding i2c-parent = <&i2c1>; 76*8b82b841SThierry Reding 77*8b82b841SThierry Reding pinctrl-names = "ddc", "pta", "idle"; 78*8b82b841SThierry Reding pinctrl-0 = <&state_i2cmux_ddc>; 79*8b82b841SThierry Reding pinctrl-1 = <&state_i2cmux_pta>; 80*8b82b841SThierry Reding pinctrl-2 = <&state_i2cmux_idle>; 81*8b82b841SThierry Reding 82*8b82b841SThierry Reding i2c@0 { 83*8b82b841SThierry Reding reg = <0>; 84*8b82b841SThierry Reding #address-cells = <1>; 85*8b82b841SThierry Reding #size-cells = <0>; 86*8b82b841SThierry Reding 87*8b82b841SThierry Reding eeprom@50 { 88*8b82b841SThierry Reding compatible = "atmel,24c02"; 89*8b82b841SThierry Reding reg = <0x50>; 90*8b82b841SThierry Reding }; 91*8b82b841SThierry Reding }; 92*8b82b841SThierry Reding 93*8b82b841SThierry Reding i2c@1 { 94*8b82b841SThierry Reding reg = <1>; 95*8b82b841SThierry Reding #address-cells = <1>; 96*8b82b841SThierry Reding #size-cells = <0>; 97*8b82b841SThierry Reding 98*8b82b841SThierry Reding eeprom@50 { 99*8b82b841SThierry Reding compatible = "atmel,24c02"; 100*8b82b841SThierry Reding reg = <0x50>; 101*8b82b841SThierry Reding }; 102*8b82b841SThierry Reding }; 103*8b82b841SThierry Reding }; 104