STRUCT TI_CLK_LL_OPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct ti_clk_ll_ops(9) β€” lowkey the plug for all your clock ops πŸ’…

okay so before we even start, bestie: this is a page from the Kernel API Manual, and it's about struct ti_clk_ll_ops. yes that's a mouthful. no we're not skimping on it. buckle up πŸŽ€


🌸 NAME 🌸

struct ti_clk_ll_ops β€” low-level ops for clocks. that's it, that's the name, and honestly it ate πŸ’–


πŸ”₯ SYNOPSIS πŸ”₯

here's the struct, in all its glory, exactly as it lives in the wild. no cap, don't touch the characters:

       struct ti_clk_ll_ops {
           u32 (*clk_readl)(const struct clk_omap_reg *reg);
           void (*clk_writel)(u32 val, const struct clk_omap_reg *reg);
           void (*clk_rmw)(u32 val, u32 mask, const struct clk_omap_reg *reg);
           int (*clkdm_clk_enable)(struct clockdomain *clkdm, struct clk *clk);
           int (*clkdm_clk_disable)(struct clockdomain *clkdm, struct clk
       *clk);
           struct clockdomain * (*clkdm_lookup)(const char *name);
           int (*cm_wait_module_ready)(u8 part, s16 prcm_mod, u16 idlest_reg,
       u8 idlest_shift);
           int (*cm_split_idlest_reg)(struct clk_omap_reg *idlest_reg, s16
       *prcm_inst, u8 *idlest_reg_id);
        };

(those two broken-up lines? yeah that's just the terminal wrapping, she's fine, she's just dramatic 😭)


πŸ¦‹ Members πŸ¦‹

every member, every vibe, zero skips:

  • clk_readl β€” pointer to register read function. she reads. that's the whole personality 🫢
  • clk_writel β€” pointer to register write function. she writes. iconic duo honestly.
  • clk_rmw β€” pointer to register read-modify-write function. read, glow up, write. periodt πŸ’…
  • clkdm_clk_enable β€” pointer to clockdomain enable function. turning things ON, main character energy ⭐
  • clkdm_clk_disable β€” pointer to clockdomain disable function. turning things OFF. someone has to do it πŸ™ˆ
  • clkdm_lookup β€” pointer to clockdomain lookup function. she's the friend who knows where everything is πŸ’œ
  • cm_wait_module_ready β€” pointer to CM module wait ready function. literally just waiting for the module to be ready. relatable content, ngl 😭
  • cm_split_idlest_reg β€” pointer to CM module function to split idlest reg. yes, the idlest reg. no I will not be explaining that word further, it's in the name and I don't make the rules πŸ“

🌈 Description 🌈

so, what are these low-level ops actually doing? bestie, gather round:

Low-level ops are generally used by the basic clock types (that's clk-gate, clk-mux, clk-divider etc. β€” the OGs) to provide support for various low-level hardware interfaces (direct MMIO, regmap etc.), and this whole thing is initialized by board code.

and that's not all β€” low-level ops also contain some other platform specific operations that aren't provided directly by clock drivers. so she does a little extra, as a treat ✨

(also yes, the original page says "hadrware" with a typo. I'm choosing to leave that energy in the universe. πŸ’€)


πŸ‘‘ SEE ALSO πŸ‘‘

  • Kernel file ./include/linux/clk/ti.h
  • struct clk_omap_reg(9)
  • struct dpll_data(9)
  • struct clk_hw_omap_ops(9)
  • struct clk_hw_omap(9)

go read those too, iykyk πŸ“š


anyway that's the whole page, hope it slayed a little πŸ’– this one's sourced from ./include/linux/clk, dated October 2026, and yes the footer literally says struct ti_clk_ll_ops(9) again because she's nothing if not consistent. mwah, go read your kernel headers πŸ§šβ€β™€οΈπŸŒΈ

πŸ“¦ where this page comes from