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-pxa-pci-ce4100.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 CE4100 I2C
    2 ----------
    3 
    4 CE4100 has one PCI device which is described as the I2C-Controller. This
    5 PCI device has three PCI-bars, each bar contains a complete I2C
    6 controller. So we have a total of three independent I2C-Controllers
    7 which share only an interrupt line.
    8 The driver is probed via the PCI-ID and is gathering the information of
    9 attached devices from the devices tree.
   10 Grant Likely recommended to use the ranges property to map the PCI-Bar
   11 number to its physical address and to use this to find the child nodes
   12 of the specific I2C controller. This were his exact words:
   13 
   14        Here's where the magic happens.  Each entry in
   15        ranges describes how the parent pci address space
   16        (middle group of 3) is translated to the local
   17        address space (first group of 2) and the size of
   18        each range (last cell).  In this particular case,
   19        the first cell of the local address is chosen to be
   20        1:1 mapped to the BARs, and the second is the
   21        offset from be base of the BAR (which would be
   22        non-zero if you had 2 or more devices mapped off
   23        the same BAR)
   24 
   25        ranges allows the address mapping to be described
   26        in a way that the OS can interpret without
   27        requiring custom device driver code.
   28 
   29 This is an example which is used on FalconFalls:
   30 ------------------------------------------------
   31         i2c-controller@b,2 {
   32                 #address-cells = <2>;
   33                 #size-cells = <1>;
   34                 compatible = "pci8086,2e68.2",
   35                                 "pci8086,2e68",
   36                                 "pciclass,ff0000",
   37                                 "pciclass,ff00";
   38 
   39                 reg = <0x15a00 0x0 0x0 0x0 0x0>;
   40                 interrupts = <16 1>;
   41 
   42                 /* as described by Grant, the first number in the group of
   43                 * three is the bar number followed by the 64bit bar address
   44                 * followed by size of the mapping. The bar address
   45                 * requires also a valid translation in parents ranges
   46                 * property.
   47                 */
   48                 ranges = <0 0   0x02000000 0 0xdffe0500 0x100
   49                           1 0   0x02000000 0 0xdffe0600 0x100
   50                           2 0   0x02000000 0 0xdffe0700 0x100>;
   51 
   52                 i2c@0 {
   53                         #address-cells = <1>;
   54                         #size-cells = <0>;
   55                         compatible = "intel,ce4100-i2c-controller";
   56 
   57                         /* The first number in the reg property is the
   58                         * number of the bar
   59                         */
   60                         reg = <0 0 0x100>;
   61 
   62                         /* This I2C controller has no devices */
   63                 };
   64 
   65                 i2c@1 {
   66                         #address-cells = <1>;
   67                         #size-cells = <0>;
   68                         compatible = "intel,ce4100-i2c-controller";
   69                         reg = <1 0 0x100>;
   70 
   71                         /* This I2C controller has one gpio controller */
   72                         gpio@26 {
   73                                 #gpio-cells = <2>;
   74                                 compatible = "nxp,pcf8575";
   75                                 reg = <0x26>;
   76                                 gpio-controller;
   77                         };
   78                 };
   79 
   80                 i2c@2 {
   81                         #address-cells = <1>;
   82                         #size-cells = <0>;
   83                         compatible = "intel,ce4100-i2c-controller";
   84                         reg = <2 0 0x100>;
   85 
   86                         gpio@26 {
   87                                 #gpio-cells = <2>;
   88                                 compatible = "nxp,pcf8575";
   89                                 reg = <0x26>;
   90                                 gpio-controller;
   91                         };
   92                 };
   93         };

Cache object: 1f64f09b7a2941e850a4121342803b50


[ 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.