clk_get_sys(9)
π clk_get_sys(9) β Kernel API Manual β¨
okay so bestie, welcome to clk_get_sys β it's a Linux kernel API manual page and it's literally about grabbing a clock by name instead of by pointer, which is kind of iconic of it honestly π°οΈπ
πΈ NAME πΈ
clk_get_sys β get a clock based upon the device name
π SYNOPSIS π
struct clk * clk_get_sys (const char *dev_id , const char *con_id );
β¨ ARGUMENTS β¨
dev_idβ the device name, like literally just the name string π«Άcon_idβ the connection ID
π DESCRIPTION π
So it returns a struct clk that corresponds to the clock producer β or a valid IS_ERR condition carrying an errno if things went sideways π. The way this works is the implementation uses dev_id and con_id to figure out the clock consumer, and through that, the clock producer. Slay.
Here's the tea though, in contrast to clk_get this function takes the device name instead of the device itself for identification. Different vibe, same goal π
.
β οΈ Drivers must assume that the clock source is not enabled. No cap, just assume it's off.
π¨ And lowkey important: clk_get_sys should not be called from within interrupt context. Periodt.
π¦ SEE ALSO π¦
Kernel file ./include/linux/clk.h plus the whole friend group π:
clk notifier callback types(9)struct clk_notifier(9)struct clk_notifier_data(9)struct clk_bulk_data(9)clk_notifier_register(9)clk_notifier_unregister(9)devm_clk_notifier_register(9)clk_get_accuracy(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_rate_exclusive_get(9)devm_clk_rate_exclusive_get(9)clk_rate_exclusive_put(9)clk_save_context(9)clk_restore_context(9)clk_prepare(9)clk_unprepare(9)clk_is_enabled_when_prepared(9)clk_get(9)clk_bulk_get(9)clk_bulk_get_all(9)clk_bulk_get_optional(9)devm_clk_bulk_get(9)devm_clk_bulk_get_optional(9)devm_clk_bulk_get_enable(9)devm_clk_bulk_get_optional_enable(9)devm_clk_bulk_get_all(9)devm_clk_bulk_get_all_enabled(9)devm_clk_get(9)devm_clk_get_prepared(9)devm_clk_get_enabled(9)devm_clk_get_optional(9)devm_clk_get_optional_prepared(9)devm_clk_get_optional_enabled(9)devm_clk_get_optional_enabled_with_rate(9)devm_get_clk_from_child(9)clk_enable(9)clk_bulk_enable(9)clk_disable(9)clk_bulk_disable(9)clk_get_rate(9)clk_put(9)clk_bulk_put(9)clk_bulk_put_all(9)devm_clk_put(9)clk_round_rate(9)clk_set_rate(9)clk_set_rate_exclusive(9)clk_has_parent(9)clk_set_rate_range(9)clk_set_min_rate(9)clk_set_max_rate(9)clk_set_parent(9)clk_get_parent(9)clk_drop_range(9)clk_get_optional(9)
π and that's the whole page, bestie! this one's sourced from ./include/linux and dated October 2026 β go off, kernel docs ππβ¨
π¦ 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