Re: i2c bit banging timeout for SCL

From: Ian Lepore <ian_at_freebsd.org>
Date: Mon, 01 Jul 2019 10:27:42 -0600
On Mon, 2019-07-01 at 19:03 +0300, Andriy Gapon wrote:
> iicbb driver has a hardcoded timeout that defines how long the driver waits for
>  SCL line to go high after the driver releases it to float.  Sometimes slaves
> hold the line low until they are ready to continue with the communication.
> As a side note, the timeout means that the driver just goes on as if the line
> became high.  Maybe it should produce an error instead.
> 
> Anyway, I would like to increase the current timeout of 100 x 10us to 1000 x
> 10us.  The rationale is that there are many slave devices, like sensors, that
> take about 10 ms to return a result.  So, I think that it makes sense to play
> nice with such devices by default.
> 
> Probably I'll add a sysctl for that parameter while I'll be there.
> 
> Any objections?

Many (perhaps most?) modern i2c slave devices are both i2c and smbus
compatible, and the smbus slave timeout is 35ms, so that wouldn't be a
bad default value.

I don't think ignoring the error and forging ahead is a good idea.  It
should return an error, and perhaps it should use the bitbang bus-
recovery sequence (from iic_recover_bus.c) to unwedge the slave device.

-- Ian
Received on Mon Jul 01 2019 - 14:27:53 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:21 UTC