freebsd-dev/sys/dev/iicbus
Andriy Gapon 459dfa0dd2 iicbb: allow longer SCL low timeout and other improvements
First, SCL low timeout is set to 25 milliseconds by default as opposed
to 1 millisecond before.  The new value is based on the SMBus
specification.  The timeout can be changed on a per bus basis using
dev.iicbb.N.scl_low_timeout sysctl.

The driver uses DELAY to wait for high SCL up to 1 millisecond, then it
switches to pause_sbt(SBT_1MS) for the rest of the timeout.

While here I made a number of other changes.  'udelay' that's used for
timing clock and data signals is now calculated based on the requested
bus frequency (dev.iicbus.N.frequency) instead of being hardcoded to 10
microseconds.  The calculations are done in such a fashion that the
default bus frequency of 100000 is converted to udelay of 10 us.  This
is for backward compatibility.  The actual frequency will be less than a
quarter (I think) of the requested frequency.

Also, I added detection of stuck low SCL in a few places.  Previously,
the code would just carry on after the SCL low timeout and that might
potentially lead to misinterpreted bits.

Finally, I fixed several style issues near the code that I changed.
Many more are still remaining.

Tested by accessing HTU21 temperature and humidity sensor in this setup:
  superio0: <Nuvoton NCT5104D/NCT6102D/NCT6106D (rev. B+)> at port 0x2e-0x2f on isa0
  gpio1: <Nuvoton GPIO controller> at GPIO ldn 0x07 on superio0
  pcib0: allocated type 4 (0x220-0x226) for rid 0 of gpio1
  gpiobus1: <GPIO bus> on gpio1
  gpioiic0: <GPIO I2C bit-banging driver> at pins 14-15 on gpiobus1
  gpioiic0: SCL pin: 14, SDA pin: 15
  iicbb0: <I2C bit-banging driver> on gpioiic0
  iicbus0: <Philips I2C bus> on iicbb0 master-only
  iic0: <I2C generic I/O> on iicbus0

Discussed with:	ian, imp
MFC after:	3 weeks
Differential Revision: https://reviews.freebsd.org/D22109
2019-10-31 11:31:13 +00:00
..
twsi twsi: Fix build when DEBUG is used on 32bits arch. 2019-08-15 18:59:52 +00:00
ad7417.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
ad7418.c Remove some unused header files from the ad7418 driver. 2019-06-23 17:20:39 +00:00
adm1030.c
ads111x.c Use a single write of 3 bytes instead of iicdev_writeto() in ads111x. 2019-09-05 19:17:53 +00:00
adt746x.c Clean up OF_getprop_alloc API 2018-04-08 22:59:34 +00:00
ds13rtc.c Add pnpinfo to all i2c drivers that have FDT compat data. 2019-05-23 18:24:27 +00:00
ds1307.c Add pnpinfo to all i2c drivers that have FDT compat data. 2019-05-23 18:24:27 +00:00
ds1307reg.h
ds1631.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
ds1672.c Build the ds1672 driver as a module. Add a detach() to unregister the rtc. 2018-03-06 02:30:34 +00:00
ds1775.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
ds3231.c Switch to the new bcd_clocktime conversion routines, and add calls to the 2018-03-05 00:15:56 +00:00
ds3231reg.h
icee.c Rename IICBUS_FDT_PNPINFO -> IICBUS_FDT_PNP_INFO because all the other 2019-05-23 16:03:30 +00:00
if_ic.c Widen NET_EPOCH coverage. 2019-10-07 22:40:05 +00:00
iic_recover_bus.c
iic_recover_bus.h
iic.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
iic.h sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
iicbb_if.m
iicbb.c iicbb: allow longer SCL low timeout and other improvements 2019-10-31 11:31:13 +00:00
iicbus_if.m
iicbus.c revert r273728 and parts of r306589, iicbus no-stop by default feature 2019-05-29 09:08:20 +00:00
iicbus.h Restore the ability for i2c slave devices to do IO from their probe method. 2019-07-08 20:26:56 +00:00
iicoc.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
iicoc.h sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
iiconf.c Create a mechanism for encoding a system errno into the IIC_Exxxxx space. 2019-09-14 19:33:36 +00:00
iiconf.h Create a mechanism for encoding a system errno into the IIC_Exxxxx space. 2019-09-14 19:33:36 +00:00
iicsmb.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
isl12xx.c Add pnpinfo to all i2c drivers that have FDT compat data. 2019-05-23 18:24:27 +00:00
lm75.c
max6690.c sys/dev: further adoption of SPDX licensing ID tags. 2017-11-27 14:52:40 +00:00
nxprtc.c Add support for setting the aging/frequency-offset register via sysctl. 2019-07-21 17:14:39 +00:00
ofw_iicbus.c Allow i2c hardware drivers to declare their own relationships to ofw_iicbus 2018-02-18 19:33:28 +00:00
rtc8583.c Add pnpinfo to all i2c drivers that have FDT compat data. 2019-05-23 18:24:27 +00:00
s35390a.c Switch to the new bcd_clocktime conversion routines, and add calls to the 2018-03-05 00:43:53 +00:00
sy8106a.c Add pnpinfo to all i2c drivers that have FDT compat data. 2019-05-23 18:24:27 +00:00
syr827.c syr827: Switch to iicdev_{readfrom,writeto} 2019-10-01 18:32:27 +00:00