Re: dtschema: i2c: messy situation about timeouts

Chris Packham <[email protected]>
Newsgroups org.kernel.vger.devicetree-spec,org.kernel.vger.linux-i2c
Message-ID <[email protected]>
On 26/02/24 23:08, Wolfram Sang wrote:
> Hey guys,
>
> we have quite a messy situation regarding I2C timeouts in the dtschema.
> Partly because I was too busy to pay detailed attention, partly because
> reviewing dtschema changes happen on Github which I totally missed. No
> complaining, though, here are my observations and suggestions to get it
> straight. Comments are more than welcome.
>
> - "i2c-transfer-timeout-us"
>
> Description says "Number of microseconds to wait before considering an
> I2C transfer has failed."
>
> To me, this binding is very descriptive and makes sense. We should keep
> it. Sadly, it is the newest one and we already have others.
>
>
> - "i2c-scl-has-clk-low-timeout"
>
> AFAIU this binding tells that the controller can do clock stretching.
> But what for? I don't see why this is important for clients. If
> anything, then it would be interesting if the *client* can do clock
> stretching and if the controller can actually handle that. But no need
> to describe it in DT, we have this as an adapter quirk already
> 'I2C_AQ_NO_CLK_STRETCH'.

Hmm I know of a few adapters that should probably set 
I2C_AQ_NO_CLK_STRETCH based on some Errata. Probably just a 
documentation exercise. It would be nice to reject clients that need to 
do clock stretching but often it happens as a side effect rather than 
being intentional (I've seen this with i2c clients implemented in 
microcontrollers).

>   Two controllers use it, but no client checks
> for it so far. Coming back to this binding, it is also unused in the
> kernel.
>
> Suggestion: let's remove it
>
>
> - "i2c-scl-clk-low-timeout-us"
>
> The description says "Number of microseconds the clock line needs to be
> pulled down in order to force a waiting state." What does "forcing a
> waiting state" mean here? I don't understand this description.
>
> It is used in the i2c-mpc driver. The use case is simply to put it into
> the 'struct i2c_adapter.timeout' member. That timeout is used to
> determine if a transfer failed. So, to me, "i2c-transfer-timeout-us"
> makes a lot more sense to use here.
>
> Suggestion: let's remove this binding and conver i2c-mpc to
> "i2c-transfer-timeout-us". Yes, not nice to have two deprecated
> bindings, but things happened.

Sounds like a good idea. We'd obviously need to keep support for the 
existing property but it wouldn't be hard to add 
"i2c-transfer-timeout-us". I'll try to whip up a patch for that sometime 
this week, just need to dust off my Freescale boards.

> So, these are my thoughts about the current situation. I might have
> missed something, so if you have anything to add, I am all ears.
> Comments really welcome!
>
> Happy hacking,
>
>     Wolfram
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.