STRUCT TI_CLK_LL_OPS(9)
β¨ 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
- 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