| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- # 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: /schemas/i2c/i2c-controller.yaml#
- properties:
- compatible:
- const: i2c-demux-pinctrl
- i2c-parent:
- $ref: /schemas/types.yaml#/definitions/phandle-array
- items:
- maxItems: 1
- 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>;
- };
- };
- };
- };
- };
|