i3c_master_e...disec_locked(9)
๐ฆ i3c_master_enec_disec_locked(9) โ kernel API manual, bestie edition โจ
okay so real quick, the manual name is i3c_master_e...disec_locked(9) and this is the kernel API manual, and we're about to talk about the most "enable/disable the vibes" function in the whole I3C subsystem ๐
๐ NAME ๐
i3c_master_enec_disec_locked โ send an ENEC or DISEC CCC command ๐
like, literally the function that tells your slaves "hey bestie turn your events on" or "bestie turn your events off", no cap.
โจ SYNOPSIS โจ
int i3c_master_enec_disec_locked (struct i3c_master_controller *master ,
u8 addr , bool enable , u8 evts , bool suppress_m2 );
she takes five arguments and returns an int, periodt. ๐ซถ
๐ธ ARGUMENTS ๐ธ
masterโ the master used to send frames on the bus ๐ like, this is the main character doing the sending, iykykaddrโ a valid I3C slave address orI3C_BROADCAST_ADDR๐ฎ so either you're sliding into one specific slave's DMs, or you're doing a full group-chat blast to everybodyenableโtrueto send ENEC,falseto send DISEC โก ENEC = on era, DISEC = off era, that's the whole vibe checkevtsโ events to enable or disable ๐ฏ the actual event bits you want to flip, choose wisely bestiesuppress_m2โ iftrue, treat an M2 (NACK) error from the CCC as success ๐ like, we're gonna pretend that rejection didn't happen
๐ DESCRIPTION ๐
Send an ENEC or DISEC CCC command to enable or disable some or all events coming from a specific slave, or all devices if addr is I3C_BROADCAST_ADDR. ๐ฆ
So basically: pick your target (one slave or everybody), pick your direction (enable or disable), pick your events, and she handles the CCC command for you. iconic behaviour honestly.
When suppress_m2 is true, a NACK of the broadcast (which can happen when no devices are present on the bus) is not reported as an error. ๐ like when the group chat is empty and nobody replies, you don't want that to count as a whole crisis. This is useful for callers that want to configure event reporting unconditionally, regardless of whether any devices are currently on the bus. ๐ so you can just... set it and forget it, no "wait is anyone even there" energy required.
๐จ okay but fr fr, listen: This function must be called with the bus lock held in write mode. Not read mode, not "eh whatever mode", write mode. do not skip this, it's not a suggestion, it's the rule ๐
๐ RETURN ๐
0 in case of success, or a negative error code otherwise. โญ like she either gives you the clean zero (slay) or a negative number (not slay, go read the error).
๐ SEE ALSO ๐
okay so the source file for all this is the kernel file ./drivers/i3c/master.c ๐ and here's the whole friend group, everyone she hangs out with, no gatekeeping:
i3c_bus_maintenance_lock(9)i3c_bus_maintenance_unlock(9)i3c_bus_normaluse_lock(9)i3c_bus_normaluse_unlock(9)i3c_master_queue_hotjoin(9)i3c_master_send_ccc_cmd_locked(9)i3c_master_get_free_addr(9)i3c_master_setaasa_locked(9)i3c_master_entdaa_locked(9)i3c_master_disec_locked(9)i3c_master_enec_locked(9)i3c_master_defslvs_locked(9)i3c_master_reattach_i3c_dev_locked(9)i3c_master_has_wakeup_enabled_devs(9)i3c_master_dma_map_single(9)i3c_master_dma_unmap_single(9)i3c_master_set_info(9)i3c_master_bus_init(9)__i3c_master_add_i3c_dev_locked(9)i3c_master_add_i3c_dev_locked(9)i3c_master_do_daa_ext(9)i3c_master_do_daa(9)i3c_master_queue_ibi(9)i3c_generic_ibi_free_pool(9)i3c_generic_ibi_alloc_pool(9)i3c_generic_ibi_get_free_slot(9)i3c_generic_ibi_recycle_slot(9)i3c_master_register(9)i3c_master_unregister(9)i3c_dev_disable_ibi_locked(9)i3c_dev_enable_ibi_locked(9)i3c_dev_request_ibi_locked(9)i3c_dev_free_ibi_locked(9)
and that's the whole page bestie!! ๐โจ๐ฆ
cute little sign-off: this one lives in ./drivers/i3c (the <purple>i3c</purple> part, you already knew), dated October 2026, and it's the i3c_master_e...disec_locked(9) kernel API manual page ๐ go enable some events, ily, bye!! ๐ซถ
๐ฆ 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