STRUCT I2C_TIMINGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct i2c_timings β€” like, the whole vibe of I2C timing, explained

okay so bestie, welcome to the Kernel API Manual ✨ this one's a struct page, which means it's basically a little ✨glossary✨ of every knob your I2C bus can turn. no cap, it's short but it's important, so let's get into it πŸŽ€


🌸 NAME 🌸

struct i2c_timings β€” literally just "I2C timing information". that's the whole thing. that's the tweet πŸ¦‹


✨ SYNOPSIS ✨

here's the icon itself, bestie β€” every field, character for character, do not touch 🫢

struct i2c_timings {
    u32 bus_freq_hz;
    u32 scl_rise_ns;
    u32 scl_fall_ns;
    u32 scl_int_delay_ns;
    u32 sda_fall_ns;
    u32 sda_hold_ns;
    u32 digital_filter_width_ns;
    u32 analog_filter_cutoff_freq_hz;
 };

πŸŽ€ Members πŸŽ€

okay this is the main character section, let's go one by one πŸ’–

  • bus_freq_hz β€” the bus frequency, in Hz. the speed. the tempo. the beat the bus dances to πŸ•Ί
  • scl_rise_ns β€” how long the SCL signal takes to rise, in ns. that's t(r) in the I2C specification, iykyk πŸ“ˆ
  • scl_fall_ns β€” how long SCL takes to fall, in ns. yes, that's t(f) in the I2C specification πŸ“‰
  • scl_int_delay_ns β€” the extra time the IP core needs to, like, set up SCL, in ns. extra setup era ⏳
  • sda_fall_ns β€” how long SDA takes to fall, in ns. also t(f) in the I2C specification (yes it's the same symbol, no I'm not making that up 😭)
  • sda_hold_ns β€” the extra time the IP core needs to hold SDA, in ns. hold it. don't let go. 🫢
  • digital_filter_width_ns β€” the width, in ns, of spikes on the i2c lines that the IP core's digital filter can filter out. so like, the little noise gremlins it can yeet πŸ’€
  • analog_filter_cutoff_freq_hz β€” the threshold frequency for the low pass IP core analog filter. the cutoff. the line. 🌈

πŸ‘‘ SEE ALSO πŸ‘‘

the whole friend group, in the exact order they showed up πŸ’œ

kernel file ./include/linux/i2c.h, and then:


ok that's the whole page, you ate that πŸ’… now go set your scl_rise_ns correctly or the bus will simply not slay.

and that's a wrap, bestie πŸŽ€ brought to you by ./include/linux, dated October 2026, and yes the header is struct i2c_timings(9) β€” iconic, no notes ⭐

πŸ“¦ where this page comes from