On 10-03-17, 12:38, Kevin Hilman wrote:
Why limit it to just voltage levels.
As I suggested earlier, I think this should use OPPs. Remember that a PM domain is not limited to a hardware power domain, but is just a grouping mechanism for devices that share some PM properties. As mentioned by Geert, this can also be a clock domain, where frequencies would make sense as well. One can imagine using this type of PM domain to manage an interconnect/bus which has scalable voltage/frequencies as well.
Okay, I tried to do that change today and am blocked a bit right now.
The OPP core and all of its APIs/interfaces have dependency on the "struct device" for their working. It gets the of_node from it, stores the device pointer to manage cases where multiple devices share OPP table, uses it to get clk and regulators.
But the "genpd" structure doesn't have a 'struct device' associated with it. How should I make both of them work together?
I tried to create separate helpers that don't accept 'dev', but that is also not good. Just too much redundant code everywhere.
Would creating a 'dev' structure within 'generic_pm_domain' be acceptable? Or should we ask the domain-drivers to call something like of_genpd_parse_idle_states(), with a fake 'dev' structure which has its of_node initialized? Or maybe move that hack within the OPP-core API, which can create a dev structure at runtime for the genpd passed to it and get the OPP table out?