It is set of ig4 improvements which were done during HID over I2C driver development:
- Main polling loop is converted to use INTR register rather than STA to make better interrupt utilization
- ig4 interrupts are masked out permanently to avoid interrupt storms and for code simplification (internal driver's RX FIFO is dropped now)
- Error handling: INTR_STAT and TX_ABORT registers are checked for error conditions now.
- Suspend/resume support
- Polling mode support. The driver can work at cold boot, in DDB and be called from interrupt handlers. Polling mode can be enabled through issuing of iicbus_request_bus() with IIC_NOWAIT flag set
- burst mode for data reads: DATA_CMD register reads and writes are performed in TX/RX FIFO-sized bursts to increase I2C bus utilization. That reduces read time from 60us to 30us per byte when read data is fit in to RX FIFO buffer in FAST speed mode.
- data writes utilizes mtx_sleep() instead of doing busy loops while waiting for free space in TX FIFO
- Timing registers are set based on controller model and ACPI data
- CannonLake support
- Interrupt handler converted to be filter based
The are some other minor changes as well. They can be found here https://github.com/wulf7/freebsd/commits/ig4 being split on per-change basis.
Previous versions have got some testing: PR/240339, PR/240485