devm_clk_get_optional(9)
π devm_clk_get_optional β kernel API manual, but make it make sense
okay bestie, so this is a page from the Kernel API Manual, and it's about devm_clk_get_optional. It's the girlie that looks up an optional clock producer and hands you a managed reference to it. Very "you don't have to commit, but if you're there, slay" energy. β¨
πΈ NAME πΈ
devm_clk_get_optional β lookup and obtain a managed reference to an optional clock producer.
β¨ SYNOPSIS β¨
struct clk * devm_clk_get_optional (struct device *dev , const char *id );
π ARGUMENTS π
devβ the device that's acting as the clock "consumer" π«Άidβ the clock consumer ID
π€ CONTEXT π€
May sleep. Yeah, she naps. Do not call her in atomic context, bestie, that's not her vibe.
π₯ RETURN π₯
You get back a struct clk corresponding to the clock producer π β or a valid IS_ERR condition containing errno. (Iconic either way.)
The implementation uses dev and id to figure out the clock consumer, and through that the clock producer. If no such clk is found, it returns NULL, which serves as a dummy clk π«₯.
That's the only difference compared to devm_clk_get. Literally the one (1) difference. Everything else is the same, no cap.
π¦ DESCRIPTION π¦
Drivers must assume that the clock source is neither prepared nor enabled. So don't assume she's ready β she is not. π
The clock will automatically be freed when the device is unbound from the bus. Built-in cleanup, main character energy, we love to see it. π
π SEE ALSO π
Kernel file ./include/linux/clk.h β the whole clock crew, gathered here for your convenience:
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_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_get_sys(9)clk_drop_range(9)clk_get_optional(9)
and that's the whole page, bestie π§π« β brought to you by the fine people at ./include/linux, dated October 2026. go get your optional clock, she's waiting π
π
π¦ 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