The iic_callback/sc->call_lock is an advisory lock which some I²C clients use and which some do not.
To work around this, the IG4_IIC driver checks if the sc->call_lock is already held, and only grabs it if not.
Problem is, if one thread holds the sc->call_lock, everybody else get free access, even in the middle of transactions.
Reduce sc->call_lock to its advisory function, and introduce a new water-tight sc->bus_lock to serialize access to the I²C bus for all clients.