105 lines
3.1 KiB
YAML
105 lines
3.1 KiB
YAML
|
# SPDX-License-Identifier: GPL-2.0-only
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/i2c/i2c-mux-gpio.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: GPIO-based I2C Bus Mux
|
||
|
|
||
|
maintainers:
|
||
|
- Wolfram Sang <wsa@kernel.org>
|
||
|
|
||
|
description: |
|
||
|
This binding describes an I2C bus multiplexer that uses GPIOs to route the I2C signals.
|
||
|
|
||
|
+-----+ +-----+
|
||
|
| dev | | dev |
|
||
|
+------------+ +-----+ +-----+
|
||
|
| SoC | | |
|
||
|
| | /--------+--------+
|
||
|
| +------+ | +------+ child bus A, on GPIO value set to 0
|
||
|
| | I2C |-|--| Mux |
|
||
|
| +------+ | +--+---+ child bus B, on GPIO value set to 1
|
||
|
| | | \----------+--------+--------+
|
||
|
| +------+ | | | | |
|
||
|
| | GPIO |-|-----+ +-----+ +-----+ +-----+
|
||
|
| +------+ | | dev | | dev | | dev |
|
||
|
+------------+ +-----+ +-----+ +-----+
|
||
|
|
||
|
For each I2C child node, an I2C child bus will be created. They will be numbered based on their
|
||
|
order in the device tree.
|
||
|
|
||
|
Whenever an access is made to a device on a child bus, the value set in the relevant node's reg
|
||
|
property will be output using the list of GPIOs, the first in the list holding the least-
|
||
|
significant value.
|
||
|
|
||
|
If an idle state is defined, using the idle-state (optional) property, whenever an access is not
|
||
|
being made to a device on a child bus, the GPIOs will be set according to the idle value.
|
||
|
|
||
|
If an idle state is not defined, the most recently used value will be left programmed into
|
||
|
hardware whenever no access is being made to a device on a child bus.
|
||
|
|
||
|
properties:
|
||
|
compatible:
|
||
|
const: i2c-mux-gpio
|
||
|
|
||
|
i2c-parent:
|
||
|
description: phandle of the I2C bus that this multiplexer's master-side port is connected to
|
||
|
$ref: "/schemas/types.yaml#/definitions/phandle"
|
||
|
|
||
|
mux-gpios:
|
||
|
description: list of GPIOs used to control the muxer
|
||
|
minItems: 1
|
||
|
maxItems: 4 # Should be enough
|
||
|
|
||
|
idle-state:
|
||
|
description: Value to set the muxer to when idle. When no value is given, it defaults to the
|
||
|
last value used.
|
||
|
$ref: "/schemas/types.yaml#/definitions/uint32"
|
||
|
|
||
|
allOf:
|
||
|
- $ref: i2c-mux.yaml
|
||
|
|
||
|
unevaluatedProperties: false
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- i2c-parent
|
||
|
- mux-gpios
|
||
|
|
||
|
examples:
|
||
|
- |
|
||
|
i2cmux {
|
||
|
compatible = "i2c-mux-gpio";
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
mux-gpios = <&gpio1 22 0>, <&gpio1 23 0>;
|
||
|
i2c-parent = <&i2c1>;
|
||
|
|
||
|
i2c@1 {
|
||
|
reg = <1>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
|
||
|
ssd1307: oled@3c {
|
||
|
compatible = "solomon,ssd1307fb-i2c";
|
||
|
reg = <0x3c>;
|
||
|
pwms = <&pwm 4 3000>;
|
||
|
reset-gpios = <&gpio2 7 1>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
i2c@3 {
|
||
|
reg = <3>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
|
||
|
pca9555: pca9555@20 {
|
||
|
compatible = "nxp,pca9555";
|
||
|
gpio-controller;
|
||
|
#gpio-cells = <2>;
|
||
|
reg = <0x20>;
|
||
|
};
|
||
|
};
|
||
|
};
|