The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/device-tree/Bindings/i2c/i2c-demux-pinctrl.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 Pinctrl-based I2C Bus DeMux
    2 
    3 This binding describes an I2C bus demultiplexer that uses pin multiplexing to
    4 route the I2C signals, and represents the pin multiplexing configuration using
    5 the pinctrl device tree bindings. This may be used to select one I2C IP core at
    6 runtime which may have a better feature set for a given task than another I2C
    7 IP core on the SoC. The most simple example is to fall back to GPIO bitbanging
    8 if 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 
   23 Required 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 
   30 Furthermore, I2C mux properties and child nodes. See i2c-mux.yaml in this
   31 directory.
   32 
   33 Example:
   34 
   35 Here is a snipplet for a bus to be demuxed. It contains various i2c clients for
   36 HDMI, 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 
   99 And 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 
  129 Please 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.

Cache object: 14e7cd3da2dcecd1ef4b4a191bf9e00c


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.