genpd_dev_pm_attach(9)
π genpd_dev_pm_attach(9) π
okay so bestie, we're in the Kernel API Manual today and this page is literally about genpd_dev_pm_attach β the little matchmaker that hooks your device up to its PM domain using DT π
β¨ NAME β¨
genpd_dev_pm_attach β attach a device to its PM domain using DT π
π¦ SYNOPSIS π¦
int genpd_dev_pm_attach (struct device *dev );
πΈ ARGUMENTS πΈ
devβ the device to attach. that's it, that's the whole vibe, it's the one you're introducing to its power domain π«Ά
π DESCRIPTION π
So what it does is: it parses the device's OF node to find a PM domain specifier β¨ if such a specifier is found, it attaches the device to the retrieved pm_domain ops. no cap, that's the whole job π
Now the return values, because this is where people get confused, and i refuse to let you be one of them:
- Returns 1 on successfully attached PM domain π
- Returns 0 when the device don't need a PM domain, or when multiple power-domains exist for it π
- else a negative error code π
β οΈ big heads up: if a power-domain does exist for the device, but it cannot be found or turned on, then it returns -EPROBE_DEFER β and that's on purpose, so the device doesn't get probed and we re-try again later π§ not a bug, it's giving patience.
π₯ SEE ALSO π₯
Kernel file: ./drivers/pmdomain/core.c
and literally the entire extended genpd friend group, fr fr:
dev_pm_genpd_set_performance_state(9), dev_pm_genpd_set_next_wakeup(9), dev_pm_genpd_get_next_hrtimer(9), dev_pm_genpd_set_hwmode(9), dev_pm_genpd_get_hwmode(9), dev_pm_genpd_rpm_always_on(9), dev_pm_genpd_is_on(9), pm_genpd_inc_rejected(9), genpd_queue_power_off_work(9), genpd_power_off(9), genpd_power_on(9), genpd_power_off_work_fn(9), __genpd_runtime_suspend(9), __genpd_runtime_resume(9), genpd_runtime_suspend(9), genpd_runtime_resume(9), genpd_power_off_unused(9), genpd_sync_power_off(9), genpd_sync_power_on(9), genpd_prepare(9), genpd_finish_suspend(9), genpd_suspend_noirq(9), genpd_finish_resume(9), genpd_resume_noirq(9), genpd_freeze_noirq(9), genpd_thaw_noirq(9), genpd_poweroff_noirq(9), genpd_restore_noirq(9), genpd_complete(9), dev_pm_genpd_suspend(9), dev_pm_genpd_resume(9), pm_genpd_add_device(9), pm_genpd_remove_device(9), dev_pm_genpd_add_notifier(9), dev_pm_genpd_remove_notifier(9), pm_genpd_add_subdomain(9), pm_genpd_remove_subdomain(9), pm_genpd_init(9), pm_genpd_remove(9), struct of_genpd_provider(9), genpd_xlate_simple(9), genpd_xlate_onecell(9), genpd_add_provider(9), of_genpd_add_provider_simple(9), of_genpd_add_provider_onecell(9), of_genpd_del_provider(9), genpd_get_from_provider(9), of_genpd_add_child_ids(9), of_genpd_remove_child_ids(9), of_genpd_add_device(9), of_genpd_add_subdomain(9), of_genpd_remove_subdomain(9), of_genpd_remove_last(9), genpd_dev_pm_detach(9), genpd_dev_pm_attach_by_id(9), genpd_dev_pm_attach_by_name(9), of_genpd_parse_idle_states(9), of_genpd_sync_state(9)
and that's the page, bestie π this one lives in ./drivers/pmdomain and it's dated October 2026 β go forth and attach your devices, ilysm πβ¨
π¦ 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