123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- Pinctrl-based I2C Bus DeMux
- 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|--/ |
- | +------------+ |
- | |
- +-------------------------------+
- Required properties:
- - compatible: "i2c-demux-pinctrl"
- - i2c-parent: List of phandles of I2C masters available for selection. The first
- one will be used as default.
- - i2c-bus-name: The name of this bus. Also needed as pinctrl-name for the I2C
- parents.
- Furthermore, I2C mux properties and child nodes. See i2c-mux.txt in this
- directory.
- Example:
- Here is a snipplet for a bus to be demuxed. It contains various i2c clients for
- HDMI, so the bus is named "i2c-hdmi":
- i2chdmi: i2c@8 {
- compatible = "i2c-demux-pinctrl";
- i2c-parent = <&gpioi2c>, <&iic2>, <&i2c2>;
- i2c-bus-name = "i2c-hdmi";
- #address-cells = <1>;
- #size-cells = <0>;
- ak4643: sound-codec@12 {
- compatible = "asahi-kasei,ak4643";
- #sound-dai-cells = <0>;
- reg = <0x12>;
- };
- composite-in@20 {
- compatible = "adi,adv7180";
- reg = <0x20>;
- remote = <&vin1>;
- 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>;
- adi,input-depth = <8>;
- adi,input-colorspace = "rgb";
- adi,input-clock = "1x";
- adi,input-style = <1>;
- adi,input-justification = "evenly";
- ports {
- #address-cells = <1>;
- #size-cells = <0>;
- port@0 {
- reg = <0>;
- adv7511_in: endpoint {
- remote-endpoint = <&du_out_lvds0>;
- };
- };
- port@1 {
- reg = <1>;
- adv7511_out: endpoint {
- remote-endpoint = <&hdmi_con>;
- };
- };
- };
- };
- };
- And for clarification, here are the snipplets for the i2c-parents:
- gpioi2c: i2c@9 {
- #address-cells = <1>;
- #size-cells = <0>;
- compatible = "i2c-gpio";
- status = "disabled";
- gpios = <&gpio5 6 GPIO_ACTIVE_HIGH /* sda */
- &gpio5 5 GPIO_ACTIVE_HIGH /* scl */
- >;
- i2c-gpio,delay-us = <5>;
- };
- ...
- &i2c2 {
- pinctrl-0 = <&i2c2_pins>;
- pinctrl-names = "i2c-hdmi";
- clock-frequency = <100000>;
- };
- ...
- &iic2 {
- pinctrl-0 = <&iic2_pins>;
- pinctrl-names = "i2c-hdmi";
- clock-frequency = <100000>;
- };
- Please note:
- - pinctrl properties for the parent I2C controllers need a pinctrl state
- with the same name as i2c-bus-name, not "default"!
- - the i2c masters must have their status "disabled". This driver will
- enable them at runtime when needed.
|