STRUCT CM_LL_DATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay so struct cm_ll_data is literally just a lil bag of fn ptrs to per-SoC CM function implementations β€” that's it, that's the whole vibe, and honestly? iconic. πŸ’…βœ¨

this page lives in the Kernel API Manual btw, in case the header wasn't enough of a giveaway 🫢


✨ SYNOPSIS ✨

bestie. look at this struct. it's giving "table of function pointers" main character energy πŸ”₯

struct cm_ll_data {
    int (*split_idlest_reg)(struct clk_omap_reg *idlest_reg, s16 *prcm_inst, u8 *idlest_reg_id);
    int (*wait_module_ready)(u8 part, s16 prcm_mod, u16 idlest_reg, u8 idlest_shift);
    int (*wait_module_idle)(u8 part, s16 prcm_mod, u16 idlest_reg, u8 idlest_shift);
    void (*module_enable)(u8 mode, u8 part, u16 inst, u16 clkctrl_offs);
    void (*module_disable)(u8 part, u16 inst, u16 clkctrl_offs);
    u32 (*xlate_clkctrl)(u8 part, u16 inst, u16 clkctrl_offs);
};

like, every single field is a pointer to a function, no cap. so the SoC-specific implementation can slide in and do its thing 🌈


πŸ’… MEMBERS πŸ’…

okay bestie, here's the member-by-member breakdown, and yes we're going through all of them β€” the way that I would never skip one πŸ™ˆ

  • split_idlest_reg β€” ptr to the SoC CM-specific split_idlest_reg impl. it's the one that handles splitting up that idlest reg situation, and that's literally its whole job πŸŽ€
  • wait_module_ready β€” ptr to the SoC CM-specific wait_module_ready impl. waiting for the module to be ready? yeah. that one. ✨
  • wait_module_idle β€” ptr to the SoC CM-specific wait_module_idle impl. same energy as the last one but for idle instead of ready β€” subtle difference, big consequences, iykyk πŸ’€
  • module_enable β€” ptr to the SoC CM-specific module_enable impl. turning the module on, SoC-specific flavour πŸ¦‹
  • module_disable β€” ptr to the SoC CM-specific module_disable impl. the reverse, obviously. turning it off. balance restored ⭐
  • xlate_clkctrl β€” ptr to the SoC CM-specific clkctrl xlate addr impl. it's the u32-returning one, it translates the clkctrl addr, and it ate πŸ”₯
lowkey the pattern here is just: six function pointers, six per-SoC implementations, and every single one of them is doing the CM-specific version of a thing. no invented lore, that's fr fr what the page says πŸ’–

πŸ” SEE ALSO πŸ”

if you wanna go deeper (and you do, bestie, i know you), the Kernel file to go look at is:

./arch/arm/mach-omap2/cm.h

like, that's the reference the page gives you. go read it. it's giving required reading for the group chat πŸ“šβœ¨


🧚 and that's the whole page! every member, every pointer, every single signature β€” nothing skipped, nothing summarised, we ate and left no crumbs πŸ‘‘

mwah πŸ’œ this little rewrite was brought to you by the ./arch/arm/mach-omap2 gang, dated October 2026, and yes that date is real, don't come for me 😭

πŸ“¦ where this page comes from