cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i2c-demux-pinctrl.txt (3342B)


      1Pinctrl-based I2C Bus DeMux
      2
      3This binding describes an I2C bus demultiplexer that uses pin multiplexing to
      4route the I2C signals, and represents the pin multiplexing configuration using
      5the pinctrl device tree bindings. This may be used to select one I2C IP core at
      6runtime which may have a better feature set for a given task than another I2C
      7IP core on the SoC. The most simple example is to fall back to GPIO bitbanging
      8if your current runtime configuration hits an errata of the internal IP core.
      9
     10    +-------------------------------+
     11    | SoC                           |
     12    |                               |   +-----+  +-----+
     13    |   +------------+              |   | dev |  | dev |
     14    |   |I2C IP Core1|--\           |   +-----+  +-----+
     15    |   +------------+   \-------+  |      |        |
     16    |                    |Pinctrl|--|------+--------+
     17    |   +------------+   +-------+  |
     18    |   |I2C IP Core2|--/           |
     19    |   +------------+              |
     20    |                               |
     21    +-------------------------------+
     22
     23Required properties:
     24- compatible: "i2c-demux-pinctrl"
     25- i2c-parent: List of phandles of I2C masters available for selection. The first
     26	      one will be used as default.
     27- i2c-bus-name: The name of this bus. Also needed as pinctrl-name for the I2C
     28		parents.
     29
     30Furthermore, I2C mux properties and child nodes. See i2c-mux.yaml in this
     31directory.
     32
     33Example:
     34
     35Here is a snipplet for a bus to be demuxed. It contains various i2c clients for
     36HDMI, so the bus is named "i2c-hdmi":
     37
     38	i2chdmi: i2c@8 {
     39
     40		compatible = "i2c-demux-pinctrl";
     41		i2c-parent = <&gpioi2c>, <&iic2>, <&i2c2>;
     42		i2c-bus-name = "i2c-hdmi";
     43		#address-cells = <1>;
     44		#size-cells = <0>;
     45
     46		ak4643: sound-codec@12 {
     47			compatible = "asahi-kasei,ak4643";
     48
     49			#sound-dai-cells = <0>;
     50			reg = <0x12>;
     51		};
     52
     53		composite-in@20 {
     54			compatible = "adi,adv7180";
     55			reg = <0x20>;
     56			remote = <&vin1>;
     57
     58			port {
     59				adv7180: endpoint {
     60					bus-width = <8>;
     61					remote-endpoint = <&vin1ep0>;
     62				};
     63			};
     64		};
     65
     66		hdmi@39 {
     67			compatible = "adi,adv7511w";
     68			reg = <0x39>;
     69			interrupt-parent = <&gpio1>;
     70			interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
     71
     72			adi,input-depth = <8>;
     73			adi,input-colorspace = "rgb";
     74			adi,input-clock = "1x";
     75			adi,input-style = <1>;
     76			adi,input-justification = "evenly";
     77
     78			ports {
     79				#address-cells = <1>;
     80				#size-cells = <0>;
     81
     82				port@0 {
     83					reg = <0>;
     84					adv7511_in: endpoint {
     85						remote-endpoint = <&du_out_lvds0>;
     86					};
     87				};
     88
     89				port@1 {
     90					reg = <1>;
     91					adv7511_out: endpoint {
     92						remote-endpoint = <&hdmi_con>;
     93					};
     94				};
     95			};
     96		};
     97	};
     98
     99And for clarification, here are the snipplets for the i2c-parents:
    100
    101	gpioi2c: i2c@9 {
    102		#address-cells = <1>;
    103		#size-cells = <0>;
    104		compatible = "i2c-gpio";
    105		gpios = <&gpio5 6 GPIO_ACTIVE_HIGH /* sda */
    106			 &gpio5 5 GPIO_ACTIVE_HIGH /* scl */
    107			>;
    108		i2c-gpio,delay-us = <5>;
    109	};
    110
    111...
    112
    113&i2c2	{
    114	pinctrl-0 = <&i2c2_pins>;
    115	pinctrl-names = "i2c-hdmi";
    116
    117	clock-frequency = <100000>;
    118};
    119
    120...
    121
    122&iic2	{
    123	pinctrl-0 = <&iic2_pins>;
    124	pinctrl-names = "i2c-hdmi";
    125
    126	clock-frequency = <100000>;
    127};
    128
    129Please note:
    130
    131- pinctrl properties for the parent I2C controllers need a pinctrl state
    132  with the same name as i2c-bus-name, not "default"!
    133
    134- the i2c masters must have their status "disabled". This driver will
    135  enable them at runtime when needed.