| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
- %YAML 1.2
- ---
- $id: http://devicetree.org/schemas/i2c/nvidia,tegra20-i2c.yaml#
- $schema: http://devicetree.org/meta-schemas/core.yaml#
- maintainers:
- - Thierry Reding <thierry.reding@gmail.com>
- - Jon Hunter <jonathanh@nvidia.com>
- title: NVIDIA Tegra I2C controller driver
- properties:
- compatible:
- oneOf:
- - description: Tegra20 has 4 generic I2C controller. This can support
- master and slave mode of I2C communication. The i2c-tegra driver
- only support master mode of I2C communication. Driver of I2C
- controller is only compatible with "nvidia,tegra20-i2c".
- const: nvidia,tegra20-i2c
- - description: Tegra20 has specific I2C controller called as DVC I2C
- controller. This only support master mode of I2C communication.
- Register interface/offset and interrupts handling are different than
- generic I2C controller. Driver of DVC I2C controller is only
- compatible with "nvidia,tegra20-i2c-dvc".
- const: nvidia,tegra20-i2c-dvc
- - description: |
- Tegra30 has 5 generic I2C controller. This controller is very much
- similar to Tegra20 I2C controller with additional feature: Continue
- Transfer Support. This feature helps to implement M_NO_START as per
- I2C core API transfer flags. Driver of I2C controller is compatible
- with "nvidia,tegra30-i2c" to enable the continue transfer support.
- This is also compatible with "nvidia,tegra20-i2c" without continue
- transfer support.
- items:
- - const: nvidia,tegra30-i2c
- - const: nvidia,tegra20-i2c
- - description: |
- Tegra114 has 5 generic I2C controllers. This controller is very much
- similar to Tegra30 I2C controller with some hardware modification:
- - Tegra30/Tegra20 I2C controller has 2 clock source called div-clk
- and fast-clk. Tegra114 has only one clock source called as
- div-clk and hence clock mechanism is changed in I2C controller.
- - Tegra30/Tegra20 I2C controller has enabled per packet transfer
- by default and there is no way to disable it. Tegra114 has this
- interrupt disable by default and SW need to enable explicitly.
- Due to above changes, Tegra114 I2C driver makes incompatible with
- previous hardware driver. Hence, Tegra114 I2C controller is
- compatible with "nvidia,tegra114-i2c".
- const: nvidia,tegra114-i2c
- - description: |
- Tegra124 has 6 generic I2C controllers. These controllers are very
- similar to those found on Tegra114 but also contain several hardware
- improvements and new registers.
- const: nvidia,tegra124-i2c
- - description: |
- Tegra210 has 6 generic I2C controllers. These controllers are very
- similar to those found on Tegra124.
- items:
- - const: nvidia,tegra210-i2c
- - const: nvidia,tegra124-i2c
- - description: |
- Tegra210 has one I2C controller that is on host1x bus and is part of
- the VE power domain and typically used for camera use-cases. This VI
- I2C controller is mostly compatible with the programming model of
- the regular I2C controllers with a few exceptions. The I2C registers
- start at an offset of 0xc00 (instead of 0), registers are 16 bytes
- apart (rather than 4) and the controller does not support slave
- mode.
- const: nvidia,tegra210-i2c-vi
- - description: |
- Tegra186 has 9 generic I2C controllers, two of which are in the AON
- (always-on) partition of the SoC. All of these controllers are very
- similar to those found on Tegra210.
- const: nvidia,tegra186-i2c
- - description: |
- Tegra194 has 8 generic I2C controllers, two of which are in the AON
- (always-on) partition of the SoC. All of these controllers are very
- similar to those found on Tegra186. However, these controllers have
- support for 64 KiB transactions whereas earlier chips supported no
- more than 4 KiB per transactions.
- const: nvidia,tegra194-i2c
- - description: |
- Tegra256 has 8 generic I2C controllers. The controllers are similar to
- the previous generations, but have a different parent clock and hence
- the timing parameters are configured differently.
- const: nvidia,tegra256-i2c
- - description:
- Tegra264 has 17 generic I2C controllers, two of which are in the AON
- (always-on) partition of the SoC. In addition to the features from
- Tegra194, a SW mutex register is added to support use of the same I2C
- instance across multiple firmwares.
- const: nvidia,tegra264-i2c
- reg:
- maxItems: 1
- interrupts:
- maxItems: 1
- clocks:
- minItems: 1
- maxItems: 2
- clock-names:
- minItems: 1
- maxItems: 2
- resets:
- items:
- - description:
- Module reset. This property is optional for controllers in Tegra194,
- Tegra234 etc where an internal software reset is available as an
- alternative.
- reset-names:
- items:
- - const: i2c
- power-domains:
- maxItems: 1
- dmas:
- items:
- - description: DMA channel for the reception FIFO
- - description: DMA channel for the transmission FIFO
- dma-names:
- items:
- - const: rx
- - const: tx
- required:
- - compatible
- - reg
- - interrupts
- - clocks
- - clock-names
- allOf:
- - $ref: /schemas/i2c/i2c-controller.yaml
- - if:
- properties:
- compatible:
- contains:
- enum:
- - nvidia,tegra20-i2c
- - nvidia,tegra30-i2c
- then:
- properties:
- clocks:
- minItems: 2
- clock-names:
- items:
- - const: div-clk
- - const: fast-clk
- - if:
- properties:
- compatible:
- contains:
- enum:
- - nvidia,tegra114-i2c
- - nvidia,tegra210-i2c
- then:
- properties:
- clocks:
- maxItems: 1
- clock-names:
- items:
- - const: div-clk
- - if:
- properties:
- compatible:
- contains:
- const: nvidia,tegra210-i2c-vi
- then:
- properties:
- clocks:
- minItems: 2
- clock-names:
- items:
- - const: div-clk
- - const: slow
- power-domains:
- items:
- - description: phandle to the VENC power domain
- else:
- properties:
- power-domains: false
- - if:
- not:
- properties:
- compatible:
- contains:
- enum:
- - nvidia,tegra194-i2c
- - nvidia,tegra256-i2c
- - nvidia,tegra264-i2c
- then:
- required:
- - resets
- - reset-names
- unevaluatedProperties: false
- examples:
- - |
- i2c@7000c000 {
- compatible = "nvidia,tegra20-i2c";
- reg = <0x7000c000 0x100>;
- interrupts = <0 38 0x04>;
- clocks = <&tegra_car 12>, <&tegra_car 124>;
- clock-names = "div-clk", "fast-clk";
- resets = <&tegra_car 12>;
- reset-names = "i2c";
- dmas = <&apbdma 16>, <&apbdma 16>;
- dma-names = "rx", "tx";
- #address-cells = <1>;
- #size-cells = <0>;
- };
|