There is a bug in the I2C clocking code between both the firmware and the linux kernel. I have solved this in the recent firmware and kernel that is in testing. First off I have patches for both firmware and kernel to fix the I2C clocking code so that device communication is a lot more reliable. Secondly I have split the thermal zone code so that the internal TMU is only responsible for critical shutdown, removing I2C from this signal completely. Additionally I have moved the full speed fan trigger to the TMU as well so even if I2C is malfunctioning or not supported by the host OS we will still have basic fan management that doesn’t rely on I2c, just GPIO controlled via system registers.
Additionally we have removed the secondary temperature sensor and are only using the external PWM controller sensor. Since we need to access the PWM over I2C to control the fan speed we figured using this temp reading was best. It will also simplify future designs.