STRUCT I3C_DEVICE(9)
π struct i3c_device β the I3C device object, bestie π
okay so this is a page straight out of the Kernel API Manual, and it's about struct i3c_device. no cap, it's a short one, but it's lowkey important if you're poking at I3C drivers. let's get into it π¦
β¨ NAME β¨
struct i3c_device β the I3C device object. that's it, that's the whole vibe. it's the thing that represents an I3C device π
πΈ SYNOPSIS πΈ
here's the shape of her, exactly as she is:
struct i3c_device {
struct device dev;
struct i3c_dev_desc *desc;
struct i3c_bus *bus;
struct list_head node;
};
she's giving very "small struct, big responsibilities" energy π
π§ Members π§
let's meet the girlies inside the struct, one by one:
devβ the device object that registers this I3C dev with the device model. she's the one doing the official paperwork πdescβ a pointer to ani3cdevice descriptor object. heads up bestie, this link gets updated every single time the I3C device is rediscovered with a different dynamic address assigned. so don't go caching it and expecting it to stay put, okay? πbusβ the I3C bus this device is attached to. where she lives πnodeβ an unregistered device list node. and listen: it's only for use byi3c_master_register_new_i3c_devs, and it is not protected by a lock. i'm literally begging you, don't go grabbing at this one π«Ά
β οΈ thatnodefield is a warning-grade vibe.i3c_master_register_new_i3c_devsonly, no lock, no exceptions. periodt.
π Description π
so what is this thing? struct i3c_device is the I3C device object exposed to I3C device drivers. it takes care of linking this object to the relevant struct_i3c_dev_desc one π
and the scope? all I3C devs on the I3C bus are represented β including I3C masters, yes ma'am π for each of them, we have an instance of struct i3c_device. every. single. one. it's giving main character energy for the whole bus ngl π
β SEE ALSO β
go read these next, i promise they're worth it π the kernel file is ./include/linux/i3c/master.h, and the whole friend group is:
struct i3c_i2c_dev_desc(9)struct i2c_dev_boardinfo(9)struct i2c_dev_desc(9)struct i3c_ibi_slot(9)struct i3c_device_ibi_info(9)struct i3c_dev_boardinfo(9)struct i3c_dev_desc(9)enum i3c_bus_mode(9)enum i3c_open_drain_speed(9)enum i3c_addr_slot_status(9)struct i3c_bus(9)struct i3c_master_controller_ops(9)struct i3c_master_controller(9)i3c_bus_for_each_i2cdev(9)i3c_bus_for_each_i3cdev(9)struct i3c_dma(9)i3c_dev_get_master_data(9)i3c_dev_set_master_data(9)i2c_dev_get_master_data(9)i2c_dev_set_master_data(9)i3c_dev_get_master(9)i2c_dev_get_master(9)i3c_master_get_bus(9)
and that's the whole page, bestie!! π ok one last cute sign-off: this little icon lives over in ./include/linux/i3c, dated October 2026 β¨ like, she's from the future and she still ate. mwah π
π
π¦ 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