* [PATCH 0/2] Add the clock stretching i2c property @ 2023-03-12 13:19 Andi Shyti 2023-03-12 13:19 ` [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property Andi Shyti 2023-03-12 13:19 ` [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Andi Shyti 0 siblings, 2 replies; 7+ messages in thread From: Andi Shyti @ 2023-03-12 13:19 UTC (permalink / raw) To: linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen, Andi Shyti Hello, fter a discussion between Krzysztof and Ryan[*], it has become apparent that the i2c binding is lacking the definition of a property that needs to be added at a more generic level. This property is also used by the mpc i2c controller, which has been updated in the second patch. As it has been several years since I worked with DTSs, I hope that I have done everything correctly. Thank you, Andi [*] https://lore.kernel.org/all/c41ee6b5-ddb4-1253-de54-a295b3bab2cc@linaro.org/ Andi Shyti (2): dt-bindings: i2c: Add the clock stretching property i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Documentation/devicetree/bindings/i2c/i2c-mpc.yaml | 12 ++++++------ Documentation/devicetree/bindings/i2c/i2c.txt | 9 +++++++++ drivers/i2c/busses/i2c-mpc.c | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property 2023-03-12 13:19 [PATCH 0/2] Add the clock stretching i2c property Andi Shyti @ 2023-03-12 13:19 ` Andi Shyti 2023-03-12 13:43 ` Krzysztof Kozlowski 2023-03-12 13:19 ` [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Andi Shyti 1 sibling, 1 reply; 7+ messages in thread From: Andi Shyti @ 2023-03-12 13:19 UTC (permalink / raw) To: linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen, Andi Shyti The I2C specification allows for the clock line to be held low for a specified timeout to force the slave device into a 'wait' mode. This feature is known as 'Clock stretching' and is optional. In the NXP I2C specification, clock stretching is described as the process of pausing a transaction by holding the SCL line LOW. The transaction can only continue when the line is released HIGH again.[*] However, most target devices do not include an SCL driver and are therefore unable to stretch the clock. Add the following properties: - i2c-scl-clk-low-timeout-ms: This property specifies the duration, in milliseconds, for which the clock is kept low and a client needs to detect a forced waiting state. - i2c-scl-has-clk-low-timeout: This property specifies whether the I2C controller implements the clock stretching property. It's important to note that this feature should not be confused with the SMBUS clock timeout, which serves a similar function but specifies a timeout of 25-35ms. The I2C specification does not recommend any specific timeout. [*] NXP, UM10204 - I2C-bus specification and user manual Rev. 7.0, 1 October 2021, chapter 3.1.9. Signed-off-by: Andi Shyti <andi.shyti@kernel.org> --- Documentation/devicetree/bindings/i2c/i2c.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/i2c/i2c.txt b/Documentation/devicetree/bindings/i2c/i2c.txt index fc3dd7ec0445..12c311f0e831 100644 --- a/Documentation/devicetree/bindings/i2c/i2c.txt +++ b/Documentation/devicetree/bindings/i2c/i2c.txt @@ -45,6 +45,15 @@ wants to support one of the below features, it should adapt these bindings. Number of nanoseconds the SCL signal takes to rise; t(r) in the I2C specification. +- i2c-scl-clk-low-timeout-ms + Number of miliseconds the clock line needs to be pulled down in order + to force a waiting state. + +- i2c-scl-has-clk-low-timeout + Boolean value that indicates whether the controller implements the + feature of wait induction through SCL low, with the timeout being + implemented internally by the controller. + - i2c-sda-falling-time-ns Number of nanoseconds the SDA signal takes to fall; t(f) in the I2C specification. -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property 2023-03-12 13:19 ` [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property Andi Shyti @ 2023-03-12 13:43 ` Krzysztof Kozlowski 0 siblings, 0 replies; 7+ messages in thread From: Krzysztof Kozlowski @ 2023-03-12 13:43 UTC (permalink / raw) To: Andi Shyti, linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen On 12/03/2023 14:19, Andi Shyti wrote: > The I2C specification allows for the clock line to be held low > for a specified timeout to force the slave device into a 'wait' > mode. This feature is known as 'Clock stretching' and is > optional. > > In the NXP I2C specification, clock stretching is described as > the process of pausing a transaction by holding the SCL line LOW. > The transaction can only continue when the line is released HIGH > again.[*] However, most target devices do not include an SCL > driver and are therefore unable to stretch the clock. > > Add the following properties: > > - i2c-scl-clk-low-timeout-ms: This property specifies the > duration, in milliseconds, for which the clock is kept low and > a client needs to detect a forced waiting state. > > - i2c-scl-has-clk-low-timeout: This property specifies whether > the I2C controller implements the clock stretching property. > > It's important to note that this feature should not be confused > with the SMBUS clock timeout, which serves a similar function but > specifies a timeout of 25-35ms. The I2C specification does not > recommend any specific timeout. > > [*] NXP, UM10204 - I2C-bus specification and user manual > Rev. 7.0, 1 October 2021, chapter 3.1.9. > > Signed-off-by: Andi Shyti <andi.shyti@kernel.org> > --- > Documentation/devicetree/bindings/i2c/i2c.txt | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/Documentation/devicetree/bindings/i2c/i2c.txt b/Documentation/devicetree/bindings/i2c/i2c.txt > index fc3dd7ec0445..12c311f0e831 100644 > --- a/Documentation/devicetree/bindings/i2c/i2c.txt > +++ b/Documentation/devicetree/bindings/i2c/i2c.txt Although the properties are still sometimes added here, but the bindings are now in dtschema, so rather this should be updated: https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/i2c/i2c-controller.yaml > @@ -45,6 +45,15 @@ wants to support one of the below features, it should adapt these bindings. > Number of nanoseconds the SCL signal takes to rise; t(r) in the I2C > specification. > > +- i2c-scl-clk-low-timeout-ms > + Number of miliseconds the clock line needs to be pulled down in order > + to force a waiting state. > + > +- i2c-scl-has-clk-low-timeout > + Boolean value that indicates whether the controller implements the > + feature of wait induction through SCL low, with the timeout being > + implemented internally by the controller. > + > - i2c-sda-falling-time-ns > Number of nanoseconds the SDA signal takes to fall; t(f) in the I2C > specification. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property 2023-03-12 13:19 [PATCH 0/2] Add the clock stretching i2c property Andi Shyti 2023-03-12 13:19 ` [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property Andi Shyti @ 2023-03-12 13:19 ` Andi Shyti 2023-03-12 13:44 ` Krzysztof Kozlowski 2023-03-12 13:44 ` Krzysztof Kozlowski 1 sibling, 2 replies; 7+ messages in thread From: Andi Shyti @ 2023-03-12 13:19 UTC (permalink / raw) To: linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen, Andi Shyti Now we have the i2c-scl-clk-low-timeout-ms property defined in the binding. Use it and remove the previous "fsl,timeout". Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Cc: Chris Packham <chris.packham@alliedtelesis.co.nz> --- Documentation/devicetree/bindings/i2c/i2c-mpc.yaml | 12 ++++++------ drivers/i2c/busses/i2c-mpc.c | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml b/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml index 018e1b944424..c01547585456 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml +++ b/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml @@ -41,11 +41,6 @@ properties: if defined, the clock settings from the bootloader are preserved (not touched) - fsl,timeout: - $ref: /schemas/types.yaml#/definitions/uint32 - description: | - I2C bus timeout in microseconds - fsl,i2c-erratum-a004447: $ref: /schemas/types.yaml#/definitions/flag description: | @@ -53,6 +48,11 @@ properties: says that the standard i2c recovery scheme mechanism does not work and an alternate implementation is needed. + i2c-scl-clk-low-timeout-ms: + description: + Indicates the SCL timeouts which used to force the client + into a waiting state + required: - compatible - reg @@ -95,6 +95,6 @@ examples: interrupts = <43 2>; interrupt-parent = <&mpic>; clock-frequency = <400000>; - fsl,timeout = <10000>; + i2c-scl-clk-low-timeout-ms = <10000>; }; ... diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c index 81ac92bb4f6f..93c484efc3f3 100644 --- a/drivers/i2c/busses/i2c-mpc.c +++ b/drivers/i2c/busses/i2c-mpc.c @@ -846,7 +846,8 @@ static int fsl_i2c_probe(struct platform_device *op) mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock); } - prop = of_get_property(op->dev.of_node, "fsl,timeout", &plen); + prop = of_get_property(op->dev.of_node, + "i2c-scl-clk-low-timeout-ms", &plen); if (prop && plen == sizeof(u32)) { mpc_ops.timeout = *prop * HZ / 1000000; if (mpc_ops.timeout < 5) -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property 2023-03-12 13:19 ` [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Andi Shyti @ 2023-03-12 13:44 ` Krzysztof Kozlowski 2023-03-12 13:44 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: Krzysztof Kozlowski @ 2023-03-12 13:44 UTC (permalink / raw) To: Andi Shyti, linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen On 12/03/2023 14:19, Andi Shyti wrote: > Now we have the i2c-scl-clk-low-timeout-ms property defined in > the binding. Use it and remove the previous "fsl,timeout". > > Signed-off-by: Andi Shyti <andi.shyti@kernel.org> > Cc: Chris Packham <chris.packham@alliedtelesis.co.nz> > --- > Documentation/devicetree/bindings/i2c/i2c-mpc.yaml | 12 ++++++------ > drivers/i2c/busses/i2c-mpc.c | 3 ++- > 2 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml b/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml > index 018e1b944424..c01547585456 100644 > --- a/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml > +++ b/Documentation/devicetree/bindings/i2c/i2c-mpc.yaml > @@ -41,11 +41,6 @@ properties: > if defined, the clock settings from the bootloader are > preserved (not touched) > > - fsl,timeout: > - $ref: /schemas/types.yaml#/definitions/uint32 > - description: | > - I2C bus timeout in microseconds Instead: deprecated: true > - > fsl,i2c-erratum-a004447: > $ref: /schemas/types.yaml#/definitions/flag > description: | > @@ -53,6 +48,11 @@ properties: > says that the standard i2c recovery scheme mechanism does > not work and an alternate implementation is needed. > > + i2c-scl-clk-low-timeout-ms: > + description: > + Indicates the SCL timeouts which used to force the client > + into a waiting state No need for this - will be coming from dtschema. > + > required: > - compatible > - reg > @@ -95,6 +95,6 @@ examples: > interrupts = <43 2>; > interrupt-parent = <&mpic>; > clock-frequency = <400000>; > - fsl,timeout = <10000>; > + i2c-scl-clk-low-timeout-ms = <10000>; > }; > ... > diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c > index 81ac92bb4f6f..93c484efc3f3 100644 > --- a/drivers/i2c/busses/i2c-mpc.c > +++ b/drivers/i2c/busses/i2c-mpc.c > @@ -846,7 +846,8 @@ static int fsl_i2c_probe(struct platform_device *op) > mpc_i2c_setup_8xxx(op->dev.of_node, i2c, clock); > } > > - prop = of_get_property(op->dev.of_node, "fsl,timeout", &plen); > + prop = of_get_property(op->dev.of_node, > + "i2c-scl-clk-low-timeout-ms", &plen); That's an ABI break. You need to keep old code as fallback. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property 2023-03-12 13:19 ` [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Andi Shyti 2023-03-12 13:44 ` Krzysztof Kozlowski @ 2023-03-12 13:44 ` Krzysztof Kozlowski 2023-03-12 13:48 ` Andi Shyti 1 sibling, 1 reply; 7+ messages in thread From: Krzysztof Kozlowski @ 2023-03-12 13:44 UTC (permalink / raw) To: Andi Shyti, linux-i2c, devicetree, linux-kernel Cc: Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen On 12/03/2023 14:19, Andi Shyti wrote: > Now we have the i2c-scl-clk-low-timeout-ms property defined in > the binding. Use it and remove the previous "fsl,timeout". > > Signed-off-by: Andi Shyti <andi.shyti@kernel.org> > Cc: Chris Packham <chris.packham@alliedtelesis.co.nz> > --- > Documentation/devicetree/bindings/i2c/i2c-mpc.yaml | 12 ++++++------ Ah, and I forgot: bindings are always separate patches from driver changes. Cannot be mixed. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property 2023-03-12 13:44 ` Krzysztof Kozlowski @ 2023-03-12 13:48 ` Andi Shyti 0 siblings, 0 replies; 7+ messages in thread From: Andi Shyti @ 2023-03-12 13:48 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Andi Shyti, linux-i2c, devicetree, linux-kernel, Wolfram Sang, Rob Herring, Krzysztof Kozlowski, Chris Packham, Ryan Chen Hi Krzysztof, On Sun, Mar 12, 2023 at 02:44:47PM +0100, Krzysztof Kozlowski wrote: > On 12/03/2023 14:19, Andi Shyti wrote: > > Now we have the i2c-scl-clk-low-timeout-ms property defined in > > the binding. Use it and remove the previous "fsl,timeout". > > > > Signed-off-by: Andi Shyti <andi.shyti@kernel.org> > > Cc: Chris Packham <chris.packham@alliedtelesis.co.nz> > > --- > > Documentation/devicetree/bindings/i2c/i2c-mpc.yaml | 12 ++++++------ > > Ah, and I forgot: bindings are always separate patches from driver > changes. Cannot be mixed. Thanks for all your comments, will send a v2. Andi ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-03-12 13:48 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-12 13:19 [PATCH 0/2] Add the clock stretching i2c property Andi Shyti 2023-03-12 13:19 ` [PATCH 1/2] dt-bindings: i2c: Add the clock stretching property Andi Shyti 2023-03-12 13:43 ` Krzysztof Kozlowski 2023-03-12 13:19 ` [PATCH 2/2] i2c: mpc: Use the i2c-scl-clk-low-timeout-ms property Andi Shyti 2023-03-12 13:44 ` Krzysztof Kozlowski 2023-03-12 13:44 ` Krzysztof Kozlowski 2023-03-12 13:48 ` Andi Shyti
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox