Re: [PATCH v7 1/2] i2c: core: Add i2c_update_timeout() helper for dynamic transfer timeouts
From: Aniket RANDIVE
Date: Wed Aug 26 2026 - 06:57:28 EST
On 8/24/2026 7:14 PM, Mukesh Savaliya wrote:
On 8/24/2026 3:36 PM, Aniket RANDIVE wrote:
On 8/24/2026 11:49 AM, Mukesh Savaliya wrote:
On 8/13/2026 11:15 AM, Aniket Randive wrote:
[...]
+void i2c_update_timeout(struct i2c_adapter *adap, u32 bus_freq_hz,let's validate bus_freq_hz to prevent from 0 value in case of any abnormal caller.
+ size_t len, unsigned int safety_coeff,
+ unsigned int min_usec)
+{
+ u64 bit_usec = mul_u64_u32_div(len * 9, USEC_PER_SEC, bus_freq_hz);
This scenario is highly unlikely. Most drivers operate with a default bus frequency, typically 400 kHz, and therefore the condition being checked is not expected to occur in practice. As a result, I do not believe this validation is necessary in this case.
Unlikely but also possible, it's framework change. So can't guarantee about all other soc drivers.
Sure. I will provide a warning and return early if frequency is 0.
Thanks,
Aniket
Please remove this sign from in between.
+ u64 total_usec = bit_usec * safety_coeff + min_usec;
+ unsigned long jiffies_val;
+
+ /* Userspace-configured timeout always takes precedence. */
+ if (adap->user_timeout > 0) {
+ adap->timeout = adap->user_timeout;
+ return;
+ }
+
+ jiffies_val = usecs_to_jiffies((unsigned int)min_t(u64, total_usec, UINT_MAX));
+ /* adap->timeout is int; guard against signed overflow. */
+ adap->timeout = (int)min_t(unsigned long, jiffies_val, INT_MAX);
+}
+EXPORT_SYMBOL_GPL(i2c_update_timeout);
+#endif /* CONFIG_I2C_DYNAMIC_TIMEOUT */
+
[...]