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