summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml
blob: 3e52a0db6c41b16b049dd4cb5d799ff51f196a17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/i2c/i2c-exynos5.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung's High Speed I2C controller

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  The Samsung's High Speed I2C controller is used to interface with I2C devices
  at various speeds ranging from 100kHz to 3.4MHz.

  In case the HSI2C controller is encapsulated within USI block (it's the case
  e.g. for Exynos850 and Exynos Auto V9 SoCs), it might be also necessary to
  define USI node in device tree file, choosing "i2c" configuration. Please see
  Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml for details.

properties:
  compatible:
    oneOf:
      - enum:
          - samsung,exynos5250-hsi2c    # Exynos5250 and Exynos5420
          - samsung,exynos5260-hsi2c    # Exynos5260
          - samsung,exynos7-hsi2c       # Exynos7
          - samsung,exynosautov9-hsi2c  # ExynosAutoV9 and Exynos850
      - const: samsung,exynos5-hsi2c    # Exynos5250 and Exynos5420
        deprecated: true

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clock-frequency:
    default: 100000
    description:
      Desired operating frequency in Hz of the bus.

      If not specified, the bus operates in fast-speed mode at 100kHz.

      If specified, the bus operates in high-speed mode only if the
      clock-frequency is >= 1MHz.

  clocks:
    minItems: 1
    items:
      - description: I2C operating clock
      - description: Bus clock (APB)

  clock-names:
    minItems: 1
    items:
      - const: hsi2c
      - const: hsi2c_pclk

required:
  - compatible
  - reg
  - interrupts
  - clocks

allOf:
  - $ref: /schemas/i2c/i2c-controller.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - samsung,exynosautov9-hsi2c

    then:
      properties:
        clocks:
          minItems: 2

        clock-names:
          minItems: 2

      required:
        - clock-names

    else:
      properties:
        clocks:
          maxItems: 1

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/clock/exynos5420.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    hsi2c_8: i2c@12e00000 {
        compatible = "samsung,exynos5250-hsi2c";
        reg = <0x12e00000 0x1000>;
        interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
        #address-cells = <1>;
        #size-cells = <0>;
        clock-frequency = <100000>;
        clocks = <&clock CLK_USI4>;
        clock-names = "hsi2c";

        pmic@66 {
            /* compatible = "samsung,s2mps11-pmic"; */
            reg = <0x66>;
        };
    };

  - |
    #include <dt-bindings/clock/exynos850.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    hsi2c_2: i2c@138c0000 {
        compatible = "samsung,exynosautov9-hsi2c";
        reg = <0x138c0000 0xc0>;
        interrupts = <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>;
        #address-cells = <1>;
        #size-cells = <0>;
        clocks = <&cmu_peri CLK_GOUT_HSI2C2_IPCLK>,
                 <&cmu_peri CLK_GOUT_HSI2C2_PCLK>;
        clock-names = "hsi2c", "hsi2c_pclk";

        pmic@66 {
            /* compatible = "samsung,s2mps11-pmic"; */
            reg = <0x66>;
        };
    };