18ad69f49SConor Dooley# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
28ad69f49SConor Dooley%YAML 1.2
38ad69f49SConor Dooley---
48ad69f49SConor Dooley$id: http://devicetree.org/schemas/i2c/opencores,i2c-ocores.yaml#
58ad69f49SConor Dooley$schema: http://devicetree.org/meta-schemas/core.yaml#
68ad69f49SConor Dooley
78ad69f49SConor Dooleytitle: OpenCores I2C controller
88ad69f49SConor Dooley
98ad69f49SConor Dooleymaintainers:
108ad69f49SConor Dooley  - Peter Korsgaard <peter@korsgaard.com>
118ad69f49SConor Dooley  - Andrew Lunn <andrew@lunn.ch>
128ad69f49SConor Dooley
138ad69f49SConor DooleyallOf:
148ad69f49SConor Dooley  - $ref: /schemas/i2c/i2c-controller.yaml#
158ad69f49SConor Dooley
168ad69f49SConor Dooleyproperties:
178ad69f49SConor Dooley  compatible:
188ad69f49SConor Dooley    oneOf:
198ad69f49SConor Dooley      - items:
208ad69f49SConor Dooley          - enum:
218ad69f49SConor Dooley              - sifive,fu740-c000-i2c # Opencore based IP block FU740-C000 SoC
228ad69f49SConor Dooley              - sifive,fu540-c000-i2c # Opencore based IP block FU540-C000 SoC
238ad69f49SConor Dooley          - const: sifive,i2c0
248ad69f49SConor Dooley      - enum:
258ad69f49SConor Dooley          - opencores,i2c-ocores
268ad69f49SConor Dooley          - aeroflexgaisler,i2cmst
278ad69f49SConor Dooley
288ad69f49SConor Dooley  reg:
298ad69f49SConor Dooley    maxItems: 1
308ad69f49SConor Dooley
318ad69f49SConor Dooley  interrupts:
328ad69f49SConor Dooley    maxItems: 1
338ad69f49SConor Dooley
348ad69f49SConor Dooley  clocks:
358ad69f49SConor Dooley    maxItems: 1
368ad69f49SConor Dooley
378ad69f49SConor Dooley  clock-frequency:
388ad69f49SConor Dooley    description: |
398ad69f49SConor Dooley      clock-frequency property is meant to control the bus frequency for i2c bus
408ad69f49SConor Dooley      drivers, but it was incorrectly used to specify i2c controller input clock
418ad69f49SConor Dooley      frequency. So the following rules are set to fix this situation:
428ad69f49SConor Dooley      - if clock-frequency is present and neither opencores,ip-clock-frequency nor
438ad69f49SConor Dooley        clocks are, then clock-frequency specifies i2c controller clock frequency.
448ad69f49SConor Dooley        This is to keep backwards compatibility with setups using old DTB. i2c bus
458ad69f49SConor Dooley        frequency is fixed at 100 KHz.
468ad69f49SConor Dooley      - if clocks is present it specifies i2c controller clock. clock-frequency
478ad69f49SConor Dooley        property specifies i2c bus frequency.
488ad69f49SConor Dooley      - if opencores,ip-clock-frequency is present it specifies i2c controller
498ad69f49SConor Dooley        clock frequency. clock-frequency property specifies i2c bus frequency.
508ad69f49SConor Dooley    default: 100000
518ad69f49SConor Dooley
528ad69f49SConor Dooley  reg-io-width:
538ad69f49SConor Dooley    description: |
548ad69f49SConor Dooley      io register width in bytes
558ad69f49SConor Dooley    enum: [1, 2, 4]
568ad69f49SConor Dooley
578ad69f49SConor Dooley  reg-shift:
588ad69f49SConor Dooley    description: |
598ad69f49SConor Dooley      device register offsets are shifted by this value
608ad69f49SConor Dooley    default: 0
618ad69f49SConor Dooley
628ad69f49SConor Dooley  regstep:
63*bd5c7104SRob Herring    $ref: /schemas/types.yaml#/definitions/uint32
648ad69f49SConor Dooley    description: |
658ad69f49SConor Dooley      deprecated, use reg-shift above
668ad69f49SConor Dooley    deprecated: true
678ad69f49SConor Dooley
688ad69f49SConor Dooley  opencores,ip-clock-frequency:
698ad69f49SConor Dooley    $ref: /schemas/types.yaml#/definitions/uint32
708ad69f49SConor Dooley    description: |
718ad69f49SConor Dooley      Frequency of the controller clock in Hz. Mutually exclusive with clocks.
728ad69f49SConor Dooley      See the note above.
738ad69f49SConor Dooley
748ad69f49SConor Dooleyrequired:
758ad69f49SConor Dooley  - compatible
768ad69f49SConor Dooley  - reg
778ad69f49SConor Dooley  - "#address-cells"
788ad69f49SConor Dooley  - "#size-cells"
798ad69f49SConor Dooley
808ad69f49SConor DooleyoneOf:
818ad69f49SConor Dooley  - required:
828ad69f49SConor Dooley      - opencores,ip-clock-frequency
838ad69f49SConor Dooley  - required:
848ad69f49SConor Dooley      - clocks
858ad69f49SConor Dooley
868ad69f49SConor DooleyunevaluatedProperties: false
878ad69f49SConor Dooley
888ad69f49SConor Dooleyexamples:
898ad69f49SConor Dooley  - |
908ad69f49SConor Dooley    i2c@a0000000 {
918ad69f49SConor Dooley      compatible = "opencores,i2c-ocores";
928ad69f49SConor Dooley      reg = <0xa0000000 0x8>;
938ad69f49SConor Dooley      #address-cells = <1>;
948ad69f49SConor Dooley      #size-cells = <0>;
958ad69f49SConor Dooley      interrupts = <10>;
968ad69f49SConor Dooley      opencores,ip-clock-frequency = <20000000>;
978ad69f49SConor Dooley
988ad69f49SConor Dooley      reg-shift = <0>;	/* 8 bit registers */
998ad69f49SConor Dooley      reg-io-width = <1>;	/* 8 bit read/write */
1008ad69f49SConor Dooley    };
1018ad69f49SConor Dooley
1028ad69f49SConor Dooley    i2c@b0000000 {
1038ad69f49SConor Dooley      compatible = "opencores,i2c-ocores";
1048ad69f49SConor Dooley      reg = <0xa0000000 0x8>;
1058ad69f49SConor Dooley      #address-cells = <1>;
1068ad69f49SConor Dooley      #size-cells = <0>;
1078ad69f49SConor Dooley      interrupts = <10>;
1088ad69f49SConor Dooley      clocks = <&osc>;
1098ad69f49SConor Dooley      clock-frequency = <400000>; /* i2c bus frequency 400 KHz */
1108ad69f49SConor Dooley
1118ad69f49SConor Dooley      reg-shift = <0>;	/* 8 bit registers */
1128ad69f49SConor Dooley      reg-io-width = <1>;	/* 8 bit read/write */
1138ad69f49SConor Dooley    };
1148ad69f49SConor Dooley...
115