Message ID | 20250417142513.312939-11-ulf.hansson@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | pmdomain: Add generic ->sync_state() support to genpd | expand |
On Thu, Apr 17, 2025 at 7:25 AM Ulf Hansson <ulf.hansson@linaro.org> wrote: > > Unless the typical platform driver that act as genpd provider, has its own > ->sync_state() callback implemented let's default to use > of_genpd_sync_state(). > > More precisely, while adding a genpd OF provider let's assign the > ->sync_state() callback, in case the fwnode has a device and its driver/bus > doesn't have the ->sync_state() set already. In this way the typical > platform driver doesn't need to assign ->sync_state(), unless it has some > additional things to manage beyond genpds. > > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> > --- > drivers/pmdomain/core.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c > index 9c5a77bf59d2..695d7d9e5582 100644 > --- a/drivers/pmdomain/core.c > +++ b/drivers/pmdomain/core.c > @@ -2671,6 +2671,8 @@ int of_genpd_add_provider_simple(struct device_node *np, > > if (!dev) > genpd->sync_state = GENPD_SYNC_STATE_SIMPLE; > + else if (!dev_has_sync_state(dev)) > + dev_set_drv_sync_state(dev, of_genpd_sync_state); Do you need the dev_has_sync_state() check? dev_set_drv_sync_state() already check for everything under dev and drv. The only think it doesn't check is "bus", but if the bus has a sync_state() it should call the drv->sync_state() anyway. -Saravana > device_set_node(&genpd->dev, fwnode); > > @@ -2740,6 +2742,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, > > if (!dev) > sync_state = true; > + else if (!dev_has_sync_state(dev)) > + dev_set_drv_sync_state(dev, of_genpd_sync_state); > > for (i = 0; i < data->num_domains; i++) { > genpd = data->domains[i]; > -- > 2.43.0 >
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 9c5a77bf59d2..695d7d9e5582 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -2671,6 +2671,8 @@ int of_genpd_add_provider_simple(struct device_node *np, if (!dev) genpd->sync_state = GENPD_SYNC_STATE_SIMPLE; + else if (!dev_has_sync_state(dev)) + dev_set_drv_sync_state(dev, of_genpd_sync_state); device_set_node(&genpd->dev, fwnode); @@ -2740,6 +2742,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, if (!dev) sync_state = true; + else if (!dev_has_sync_state(dev)) + dev_set_drv_sync_state(dev, of_genpd_sync_state); for (i = 0; i < data->num_domains; i++) { genpd = data->domains[i];
Unless the typical platform driver that act as genpd provider, has its own ->sync_state() callback implemented let's default to use of_genpd_sync_state(). More precisely, while adding a genpd OF provider let's assign the ->sync_state() callback, in case the fwnode has a device and its driver/bus doesn't have the ->sync_state() set already. In this way the typical platform driver doesn't need to assign ->sync_state(), unless it has some additional things to manage beyond genpds. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- drivers/pmdomain/core.c | 4 ++++ 1 file changed, 4 insertions(+)