clk_register(9)
π clk_register β a Kernel API Manual moment (section 9, bestie)
okay so real talk, this one's from the Kernel API Manual, and it's the page for clk_register. She's a little vintage, a little deprecated, but she still serves β¨
π NAME π
clk_register β allocate a new clock, register it, and hand you back an opaque cookie πͺ (yes, literally what it says, no cap)
β¨ SYNOPSIS β¨
struct clk * clk_register (struct device *dev , struct clk_hw *hw );
that's the whole vibe: two args, one struct clk * coming back at you π«Ά
πΈ ARGUMENTS πΈ
devβ the device that's registering this clock, iykyk. it's the one claiming the clock as its own.hwβ the link to your hardware-specific clock data. like, the actual tea about how the clock works π
π¦ DESCRIPTION π¦
okay so listen. clk_register is the deprecated interface for populating the clock tree with new clock nodes. like, it still works, it's still here, but it's giving "we don't do that anymore."
use clk_hw_register instead. periodt. that's the glow-up π
β οΈ deprecated alert!! not me telling you twice β the manpage says deprecated in italics with asterisks around it, so you KNOW it's serious π
β RETURN β
on success (slay), you get back a pointer to the newly allocated struct clk β but here's the catch, bestie: driver code cannot dereference it. nope. not allowed. instead you use it in conjunction with the rest of the clock API. it's like a claim ticket ποΈ, not the luggage itself.
in the event of an error, clk_register will return an error code. and drivers must test for an error code after calling clk_register β like, do not skip the vibe check, fr fr. π₯
π SEE ALSO π
the whole group chat, in order, no one left out π
- Kernel file
./drivers/clk/clk.c struct clk_core(9)clk_pm_runtime_get_all(9)clk_pm_runtime_put_all(9)clk_core_get(9)clk_determine_rate_noop(9)clk_rate_exclusive_put(9)clk_rate_exclusive_get(9)clk_unprepare(9)clk_prepare(9)clk_disable(9)clk_gate_restore_context(9)clk_save_context(9)clk_restore_context(9)clk_enable(9)clk_is_enabled_when_prepared(9)clk_hw_init_rate_request(9)clk_hw_forward_rate_request(9)__clk_determine_rate(9)clk_hw_round_rate(9)clk_round_rate(9)__clk_notify(9)__clk_recalc_accuracies(9)clk_get_accuracy(9)__clk_recalc_rates(9)clk_get_rate(9)clk_hw_get_parent_index(9)__clk_speculate_rates(9)clk_set_rate(9)clk_set_rate_exclusive(9)clk_set_rate_range(9)clk_set_min_rate(9)clk_set_max_rate(9)clk_get_parent(9)clk_has_parent(9)clk_set_parent(9)clk_set_phase(9)clk_get_phase(9)clk_set_duty_cycle(9)clk_get_scaled_duty_cycle(9)clk_is_match(9)clk_debug_register(9)clk_debug_init(9)__clk_core_init(9)clk_core_link_consumer(9)clk_core_unlink_consumer(9)alloc_clk(9)free_clk(9)clk_hw_create_clk(9)clk_hw_get_clk(9)dev_or_parent_of_node(9)clk_hw_register(9)clk_unregister(9)clk_hw_unregister(9)devm_clk_register(9)devm_clk_hw_register(9)devm_clk_hw_get_clk(9)clk_notifier_register(9)clk_notifier_unregister(9)struct of_clk_provider(9)of_clk_add_provider(9)of_clk_add_hw_provider(9)devm_of_clk_add_hw_provider(9)of_clk_del_provider(9)of_parse_clkspec(9)of_clk_get_from_provider(9)of_clk_get_by_name(9)of_clk_get_parent_count(9)of_clk_parent_fill(9)of_clk_detect_critical(9)of_clk_init(9)
π§ sign-off π§
this page lives in ./drivers/clk, it's dated October 2026, and it's forever filed under clk_register(9). she ate and left no crumbs πππ
π¦ 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