# HG changeset patch # User Paul Boddie # Date 1563729420 -7200 # Node ID 9213bb0bab76416b12caa02eda74ddc7fb3e9bbe # Parent 92433cd492f50ecae551b1d88872541f4d0628bf Fixed the hold count representation for low SMB clock frequencies. diff -r 92433cd492f5 -r 9213bb0bab76 pkg/devices/lib/i2c/src/jz4780.cc --- a/pkg/devices/lib/i2c/src/jz4780.cc Mon Apr 15 00:14:33 2019 +0200 +++ b/pkg/devices/lib/i2c/src/jz4780.cc Sun Jul 21 19:17:00 2019 +0200 @@ -264,7 +264,8 @@ uint32_t high_reg, low_reg; uint32_t high_count, low_count; - uint32_t hold_count, setup_count; + int32_t hold_count; + uint32_t setup_count; // Level hold times: @@ -306,8 +307,8 @@ hold_count = (smb_clk * 300) / 1000000 - 1; _regs[Smb_sda_hold_time] = (_regs[Smb_sda_hold_time] & ~Smb_hold_mask) | - (hold_count > 0 ? Smb_hold_enable : Smb_hold_disable) | - (hold_count < 255 ? hold_count : 255); + (hold_count >= 0 ? Smb_hold_enable : Smb_hold_disable) | + (hold_count < 0 ? 0 : hold_count < 255 ? hold_count : 255); // T{delay} = (SMBSDASU - 1) * T{SMB_CLK} // SMBSDASU = T{delay} / T{SMB_CLK} + 1