STRUCT CDNS_I2C(9)
๐ struct cdns_i2c(9) โ I2C device private data structure ๐
okay bestie, welcome to the struct cdns_i2c(9) page from the Kernel API Manual โจ we are in section 9, deep in kernel territory, and this is the I2C device private data structure. it's giving backstage-pass energy, and we are obsessed ๐ no field left behind, periodt.
โจ NAME โจ
struct cdns_i2c โ I2C device private data structure ๐ธ
๐ฆ SYNOPSIS ๐ฆ
struct cdns_i2c {
struct device *dev;
void __iomem *membase;
struct i2c_adapter adap;
struct i2c_msg *p_msg;
int err_status;
struct completion xfer_done;
unsigned char *p_send_buf;
unsigned char *p_recv_buf;
unsigned int send_count;
unsigned int recv_count;
unsigned int curr_recv_count;
unsigned long input_clk;
unsigned int i2c_clk;
unsigned int bus_hold_flag;
struct clk *clk;
struct notifier_block clk_rate_change_nb;
struct reset_control *reset;
u32 quirks;
u32 ctrl_reg;
struct i2c_bus_recovery_info rinfo;
#if IS_ENABLED(CONFIG_I2C_SLAVE);
u16 ctrl_reg_diva_divb;
struct i2c_client *slave;
enum cdns_i2c_mode dev_mode;
enum cdns_i2c_slave_state slave_state;
#endif;
u32 fifo_depth;
unsigned int transfer_size;
bool atomic;
int err_status_atomic;
};
here's the whole struct in all its glory, bestie โ read it like a group-chat screenshot ๐ซถ now let's meet every member one by one.
๐ Members ๐
devโ pointer to thedevicestructure ๐membaseโ base address of the I2C device ๐adapโ I2C adapter instance ๐p_msgโ message pointer ๐err_statusโ error status in Interrupt Status Register ๐ญxfer_doneโ transfer complete status โp_send_bufโ pointer to transmit buffer ๐คp_recv_bufโ pointer to receive buffer ๐ฅsend_countโ number of bytes still expected to send ๐ขrecv_countโ number of bytes still expected to receive ๐งฎcurr_recv_countโ number of bytes to be received in current transfer ๐ฏinput_clkโ input clock to I2C controller โฐi2c_clkโ maximum I2C clock speed ๐bus_hold_flagโ flag used in repeated start for clearing HOLD bit โclkโ pointer tostruct clk๐ฐ๏ธclk_rate_change_nbโ notifier block for clock rate changes ๐resetโ reset control for the device ๐quirksโ flag for broken hold bit usage in r1p10 ๐ฉctrl_regโ cached value of the control register. ๐rinfoโ I2C GPIO recovery information ๐ctrl_reg_diva_divbโ value of fields DIV_A and DIV_B from CR register ๐งฎslaveโ registered slave instance. ๐คdev_modeโ I2C operating role(master/slave). ๐slave_stateโ I2C Slave state(idle/read/write). ๐คfifo_depthโ the depth of the transfer FIFO ๐งบtransfer_sizeโ the maximum number of bytes in one transfer ๐atomicโ mode of transfer โ๏ธerr_status_atomicโ error status in atomic mode ๐ฅ
๐ SEE ALSO ๐
kernel file: ./drivers/i2c/busses/i2c-cadence.c ๐
enum cdns_i2c_mode(9)enum cdns_i2c_slave_state(9)cdns_i2c_init(9)cdns_i2c_runtime_suspend(9)cdns_i2c_runtime_resume(9)cdns_i2c_clear_bus_hold(9)cdns_i2c_slave_isr(9)cdns_i2c_master_isr(9)cdns_i2c_isr(9)cdns_i2c_mrecv(9)cdns_i2c_msend(9)cdns_i2c_master_reset(9)cdns_i2c_master_xfer(9)cdns_i2c_master_xfer_atomic(9)cdns_i2c_func(9)cdns_i2c_calc_divs(9)cdns_i2c_setclk(9)cdns_i2c_clk_notifier_cb(9)cdns_i2c_detect_transfer_size(9)cdns_i2c_probe(9)cdns_i2c_remove(9)cdns_i2c_shutdown(9)
mwah ๐ this page came from ./drivers/i2c/busses, dated October 2026, and it's the struct cdns_i2c(9) manpage from the Kernel API Manual โ byeee, go read some kernel source for me ๐โจ
๐ฆ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms