Add new constants for choosing the additional USIv1 configuration modes
in device tree. Those are further used in the USI driver to figure out
which value to write into SW_CONF register. Modify the current USI IP-core
bindings to include information about USIv1 and a compatible for
exynos8895.
Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
---
.../bindings/soc/samsung/exynos-usi.yaml | 107 ++++++++++++------
include/dt-bindings/soc/samsung,exynos-usi.h | 3 +
2 files changed, 74 insertions(+), 36 deletions(-)
diff --git a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml
index cc92a06a3..d6c39c3e3 100644
--- a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml
+++ b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml
@@ -11,11 +11,21 @@ maintainers:
- Krzysztof Kozlowski <krzk@kernel.org>
description: |
- USI IP-core provides selectable serial protocol (UART, SPI or High-Speed I2C).
- USI shares almost all internal circuits within each protocol, so only one
- protocol can be chosen at a time. USI is modeled as a node with zero or more
- child nodes, each representing a serial sub-node device. The mode setting
- selects which particular function will be used.
+ The USI IP-core provides configurable support for serial protocols, enabling
+ different serial communication modes depending on the version.
+
+ In USIv1, configurations are available to enable either one or two protocols
+ simultaneously in select combinations - High-Speed I2C0, High-Speed
+ I2C1, SPI, UART, High-Speed I2C0 and I2C1 or both High-Speed
+ I2C1 and UART.
+
+ In USIv2, only one protocol can be active at a time, either UART, SPI, or
+ High-Speed I2C.
+
+ The USI core shares internal circuits across protocols, meaning only the
+ selected configuration is active at any given time. USI is modeled as a node
+ with zero or more child nodes, each representing a serial sub-node device. The
+ mode setting selects which particular function will be used.
properties:
$nodename:
@@ -64,7 +74,7 @@ properties:
samsung,mode:
$ref: /schemas/types.yaml#/definitions/uint32
- enum: [0, 1, 2, 3]
+ enum: [0, 1, 2, 3, 4, 5, 6]
description:
Selects USI function (which serial protocol to use). Refer to
<include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values.
@@ -101,37 +111,62 @@ required:
- samsung,sysreg
- samsung,mode
-if:
- properties:
- compatible:
- contains:
- enum:
- - samsung,exynos850-usi
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - google,gs101-usi
+ - samsung,exynos850-usi
+ - samsung,exynosautov9-usi
+ - samsung,exynosautov920-usi
+
+ then:
+ properties:
+ reg:
+ maxItems: 1
+
+ clocks:
+ items:
+ - description: Bus (APB) clock
+ - description: Operating clock for UART/SPI/I2C protocol
+
+ clock-names:
+ maxItems: 2
+
+ samsung,mode:
+ enum: [0, 1, 2, 3]
+
+ required:
+ - reg
+ - clocks
+ - clock-names
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - samsung,exynos8895-usi
+
+ then:
+ properties:
+ reg: false
+
+ clocks:
+ items:
+ - description: Bus (APB) clock
+ - description: Operating clock for UART/SPI protocol
+
+ clock-names:
+ maxItems: 2
+
+ samsung,clkreq-on: false
-then:
- properties:
- reg:
- maxItems: 1
-
- clocks:
- items:
- - description: Bus (APB) clock
- - description: Operating clock for UART/SPI/I2C protocol
-
- clock-names:
- maxItems: 2
-
- required:
- - reg
- - clocks
- - clock-names
-
-else:
- properties:
- reg: false
- clocks: false
- clock-names: false
- samsung,clkreq-on: false
+ required:
+ - clocks
+ - clock-names
additionalProperties: false
diff --git a/include/dt-bindings/soc/samsung,exynos-usi.h b/include/dt-bindings/soc/samsung,exynos-usi.h
index b7c1406f3..aab28176c 100644
--- a/include/dt-bindings/soc/samsung,exynos-usi.h
+++ b/include/dt-bindings/soc/samsung,exynos-usi.h
@@ -13,5 +13,8 @@
#define USI_MODE_UART 1
#define USI_MODE_SPI 2
#define USI_MODE_I2C 3
+#define USI_MODE_I2C1 4
+#define USI_MODE_I2C0_1 5
+#define USI_MODE_UART_I2C1 6
#endif /* __DT_BINDINGS_SAMSUNG_EXYNOS_USI_H */
--
2.43.0
On Sun, Jan 05, 2025 at 06:03:44PM +0200, Ivaylo Ivanov wrote: > samsung,mode: > $ref: /schemas/types.yaml#/definitions/uint32 > - enum: [0, 1, 2, 3] > + enum: [0, 1, 2, 3, 4, 5, 6] > description: > Selects USI function (which serial protocol to use). Refer to > <include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values. > @@ -101,37 +111,62 @@ required: > - samsung,sysreg > - samsung,mode > > -if: > - properties: > - compatible: > - contains: > - enum: > - - samsung,exynos850-usi > +allOf: > + - if: > + properties: > + compatible: > + contains: > + enum: > + - google,gs101-usi > + - samsung,exynos850-usi > + - samsung,exynosautov9-usi > + - samsung,exynosautov920-usi I made mistake during last review - the binding had a confusing "else" here, but that else was a no-op. All existing compatibles are fallbacked to samsung,exynos850-usi, so previous code "contains: enum: samsung,exynos850-usi" was covering everything. You can drop other variants and keep the original samsung,exynos850-usi only. > + > + then: > + properties: > + reg: > + maxItems: 1 > + > + clocks: > + items: > + - description: Bus (APB) clock > + - description: Operating clock for UART/SPI/I2C protocol > + > + clock-names: > + maxItems: 2 > + > + samsung,mode: > + enum: [0, 1, 2, 3] > + > + required: > + - reg > + - clocks > + - clock-names > + > + - if: > + properties: > + compatible: > + contains: > + enum: > + - samsung,exynos8895-usi I don't see where this compatible is documented. > + > + then: > + properties: > + reg: false > + > + clocks: > + items: > + - description: Bus (APB) clock > + - description: Operating clock for UART/SPI protocol Best regards, Krzysztof
On 1/6/25 08:31, Krzysztof Kozlowski wrote: > On Sun, Jan 05, 2025 at 06:03:44PM +0200, Ivaylo Ivanov wrote: >> samsung,mode: >> $ref: /schemas/types.yaml#/definitions/uint32 >> - enum: [0, 1, 2, 3] >> + enum: [0, 1, 2, 3, 4, 5, 6] >> description: >> Selects USI function (which serial protocol to use). Refer to >> <include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values. >> @@ -101,37 +111,62 @@ required: >> - samsung,sysreg >> - samsung,mode >> >> -if: >> - properties: >> - compatible: >> - contains: >> - enum: >> - - samsung,exynos850-usi >> +allOf: >> + - if: >> + properties: >> + compatible: >> + contains: >> + enum: >> + - google,gs101-usi >> + - samsung,exynos850-usi >> + - samsung,exynosautov9-usi >> + - samsung,exynosautov920-usi > I made mistake during last review - the binding had a confusing "else" > here, but that else was a no-op. All existing compatibles are fallbacked > to samsung,exynos850-usi, so previous code "contains: enum: > samsung,exynos850-usi" was covering everything. > > You can drop other variants and keep the original samsung,exynos850-usi > only. Yeah I thought so too. It's fine, will fix in the next revision. > >> + >> + then: >> + properties: >> + reg: >> + maxItems: 1 >> + >> + clocks: >> + items: >> + - description: Bus (APB) clock >> + - description: Operating clock for UART/SPI/I2C protocol >> + >> + clock-names: >> + maxItems: 2 >> + >> + samsung,mode: >> + enum: [0, 1, 2, 3] >> + >> + required: >> + - reg >> + - clocks >> + - clock-names >> + >> + - if: >> + properties: >> + compatible: >> + contains: >> + enum: >> + - samsung,exynos8895-usi > I don't see where this compatible is documented. Right, ommited that. Yet dtbs_check W=1 still didn't catch that. Thanks for the feedback! Best regards, Ivaylo > >> + >> + then: >> + properties: >> + reg: false >> + >> + clocks: >> + items: >> + - description: Bus (APB) clock >> + - description: Operating clock for UART/SPI protocol > Best regards, > Krzysztof >
© 2016 - 2026 Red Hat, Inc.