Convert the pinctrl-based I2C bus demultiplexer Device Tree binding documentation to json-schema. Update the example to match reality. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Wolfram Sang <wsa@kernel.org>
173 lines
5.8 KiB
YAML
173 lines
5.8 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/i2c/i2c-demux-pinctrl.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Pinctrl-based I2C Bus Demultiplexer
|
|
|
|
maintainers:
|
|
- Wolfram Sang <wsa+renesas@sang-engineering.com>
|
|
|
|
description: |
|
|
This binding describes an I2C bus demultiplexer that uses pin multiplexing to
|
|
route the I2C signals, and represents the pin multiplexing configuration
|
|
using the pinctrl device tree bindings. This may be used to select one I2C
|
|
IP core at runtime which may have a better feature set for a given task than
|
|
another I2C IP core on the SoC. The most simple example is to fall back to
|
|
GPIO bitbanging if your current runtime configuration hits an errata of the
|
|
internal IP core.
|
|
|
|
+-------------------------------+
|
|
| SoC |
|
|
| | +-----+ +-----+
|
|
| +------------+ | | dev | | dev |
|
|
| |I2C IP Core1|--\ | +-----+ +-----+
|
|
| +------------+ \-------+ | | |
|
|
| |Pinctrl|--|------+--------+
|
|
| +------------+ +-------+ |
|
|
| |I2C IP Core2|--/ |
|
|
| +------------+ |
|
|
| |
|
|
+-------------------------------+
|
|
|
|
allOf:
|
|
- $ref: i2c-mux.yaml
|
|
- $ref: /schemas/i2c/i2c-controller.yaml#
|
|
|
|
properties:
|
|
compatible:
|
|
const: i2c-demux-pinctrl
|
|
|
|
i2c-parent:
|
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
|
description:
|
|
List of phandles of I2C masters available for selection. The first one
|
|
will be used as default.
|
|
|
|
i2c-bus-name:
|
|
$ref: /schemas/types.yaml#/definitions/string
|
|
description:
|
|
The name of this bus. Also needed as pinctrl-name for the I2C parents.
|
|
|
|
required:
|
|
- compatible
|
|
- i2c-parent
|
|
- i2c-bus-name
|
|
|
|
unevaluatedProperties: false
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
|
|
gpioi2c2: i2c-9 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
compatible = "i2c-gpio";
|
|
scl-gpios = <&gpio5 5 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
sda-gpios = <&gpio5 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
i2c-gpio,delay-us = <5>;
|
|
|
|
// The I2C controller must have its status "disabled". The I2C bus
|
|
// demultiplexer will enable it at runtime when needed.
|
|
status = "disabled";
|
|
};
|
|
|
|
iic2: i2c@e6520000 {
|
|
reg = <0xe6520000 0x425>;
|
|
pinctrl-0 = <&iic2_pins>;
|
|
// The pinctrl property for the parent I2C controller needs a pinctrl
|
|
// state with the same name as i2c-bus-name in the I2C bus demultiplexer
|
|
// node, not "default"!
|
|
pinctrl-names = "i2c-hdmi";
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
// The I2C controller must have its status "disabled". The I2C bus
|
|
// demultiplexer will enable it at runtime when needed.
|
|
status = "disabled";
|
|
};
|
|
|
|
i2c2: i2c@e6530000 {
|
|
reg = <0 0xe6530000 0 0x40>;
|
|
pinctrl-0 = <&i2c2_pins>;
|
|
// The pinctrl property for the parent I2C controller needs a pinctrl
|
|
// state with the same name as i2c-bus-name in the I2C bus demultiplexer
|
|
// node, not "default"!
|
|
pinctrl-names = "i2c-hdmi";
|
|
|
|
clock-frequency = <100000>;
|
|
|
|
// The I2C controller must have its status "disabled". The I2C bus
|
|
// demultiplexer will enable it at runtime when needed.
|
|
status = "disabled";
|
|
};
|
|
|
|
// Example for a bus to be demuxed. It contains various I2C clients for
|
|
// HDMI, so the bus is named "i2c-hdmi":
|
|
i2chdmi: i2c-mux3 {
|
|
compatible = "i2c-demux-pinctrl";
|
|
i2c-parent = <&iic2>, <&i2c2>, <&gpioi2c2>;
|
|
i2c-bus-name = "i2c-hdmi";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
ak4643: codec@12 {
|
|
compatible = "asahi-kasei,ak4643";
|
|
#sound-dai-cells = <0>;
|
|
reg = <0x12>;
|
|
};
|
|
|
|
composite-in@20 {
|
|
compatible = "adi,adv7180";
|
|
reg = <0x20>;
|
|
|
|
port {
|
|
adv7180: endpoint {
|
|
bus-width = <8>;
|
|
remote-endpoint = <&vin1ep0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
hdmi@39 {
|
|
compatible = "adi,adv7511w";
|
|
reg = <0x39>;
|
|
interrupt-parent = <&gpio1>;
|
|
interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
|
|
clocks = <&cec_clock>;
|
|
clock-names = "cec";
|
|
|
|
avdd-supply = <&fixedregulator1v8>;
|
|
dvdd-supply = <&fixedregulator1v8>;
|
|
pvdd-supply = <&fixedregulator1v8>;
|
|
dvdd-3v-supply = <&fixedregulator3v3>;
|
|
bgvdd-supply = <&fixedregulator1v8>;
|
|
|
|
adi,input-depth = <8>;
|
|
adi,input-colorspace = "rgb";
|
|
adi,input-clock = "1x";
|
|
|
|
ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
port@0 {
|
|
reg = <0>;
|
|
adv7511_in: endpoint {
|
|
remote-endpoint = <&lvds0_out>;
|
|
};
|
|
};
|
|
|
|
port@1 {
|
|
reg = <1>;
|
|
adv7511_out: endpoint {
|
|
remote-endpoint = <&hdmi_con_out>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|