Skip to content
  • Ulf Hansson's avatar
    PM / Domains: Add support for multi PM domains per device to genpd · 3c095f32
    Ulf Hansson authored
    To support devices being partitioned across multiple PM domains, let's
    begin with extending genpd to cope with these kind of configurations.
    Therefore, add a new exported function genpd_dev_pm_attach_by_id(), which
    is similar to the existing genpd_dev_pm_attach(), but with the difference
    that it allows its callers to provide an index to the PM domain that it
    wants to attach.
    Note that, genpd_dev_pm_attach_by_id() shall only be called by the driver
    core / PM core, similar to how the existing dev_pm_domain_attach() makes
    use of genpd_dev_pm_attach(). However, this is implemented by following
    changes on top.
    Because, only one PM domain can be attached per device, genpd needs to
    create a virtual device that it can attach/detach instead. More precisely,
    let the new function genpd_dev_pm_attach_by_id() register a virtual struct
    device via calling device_register(). Then let it attach this device to the
    corresponding PM domain, rather than the one that is provided by the
    caller. The actual attaching is done via re-using the existing genpd OF
    At successful attachment, genpd_dev_pm_attach_by_id() returns the created
    virtual device, which allows the caller to operate on it to deal with power
    management. Following changes on top, provides more details in this
    To deal with detaching of a PM domain for the multiple PM domains case,
    let's also extend the existing genpd_dev_pm_detach() function, to cover the
    cleanup of the created virtual device, via make it call device_unregister()
    on it. In this way, there is no need to introduce a new function to deal
    with detach for the multiple PM domain case, but instead the existing one
    is re-used.
    Signed-off-by: default avatarUlf Hansson <>
    Acked-by: default avatarJon Hunter <>
    Tested-by: default avatarJon Hunter <>
    Reviewed-by: default avatarViresh Kumar <>
    Signed-off-by: default avatarRafael J. Wysocki <>