I2C device 0x3a is the low power MCU inside the WP module. The MCU goes to sleep and wakes up on I2C transactions. What I have been told is that the wakeup takes too long for the MCU to handle the first transaction so the transaction fails and then the driver for the I2C master prints that annoying message. When the transaction is retried, the MCU is now awake and the transaction succeeds.
The error message is printed from the kernel in drivers/i2c/busses/i2c-qup.c. Just search for “not connected” and you will find it. A naive solution would be to simply rate limit the log message. But if for example, the errors were for 0x3a, 0x3a, 0x3a, 0x3a, 0x68, 0x3a, 0x3a, 0x3a then you definitely don’t want to supress the error for 0x68 that occurs in the middle.
In this case, I get this message everytime I read GPIO34 thru 37; which I have to poll 34, 36 and 37 due to a lack of edge detection . I really wish I had not designed my board using these inputs. Lesson learned!!
Talking of naive… how does one rate limit the log message?