Messages in this thread | | | Date | Tue, 8 Nov 2011 10:30:38 +0100 (CET) | From | Guennadi Liakhovetski <> | Subject | Re: [PATCH 1/7] PM / Domains: Make it possible to use per-device start/stop routines |
| |
Hi Rafael
On Mon, 7 Nov 2011, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rjw@sisk.pl> > > The current generic PM domains code requires that the same .stop() > and .start() device callback routines be used for all devices in the > given domain, which is inflexible and may not cover some specific use > cases. For this reason, make it possible to use device specific > .start() and .stop() callback routines by adding corresponding > callback pointers to struct generic_pm_domain_data. Add a new helper > routine, pm_genpd_register_callbacks(), that can be used to populate > the new per-device callback pointers. > > Modify the shmobile's power domains code to allow drivers to add > their own code to be run during the device stop and start operations > with the help of the new callback pointers. > > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> > ---
[snip]
> Index: linux/drivers/base/power/domain.c > =================================================================== > --- linux.orig/drivers/base/power/domain.c > +++ linux/drivers/base/power/domain.c > @@ -29,6 +29,36 @@ static struct generic_pm_domain *dev_to_ > return pd_to_genpd(dev->pm_domain); > } > > +static int genpd_stop_dev(struct generic_pm_domain *genpd, struct device *dev) > +{ > + int (*stop)(struct device *dev); > + > + stop = genpd->stop_device; > + if (stop) > + return stop(dev); > + > + stop = dev_gpd_data(dev)->ops.stop; > + if (stop) > + return stop(dev);
With this implementation your approach is: in your genpd_stop_dev() and genpd_start_dev() you first check for the pm-domain _common_ .start() and .stop(), and if they exist, the specific ones will not be called. Then in your sh7372 pm domain implementation you do the domain-common part - switch the PM clock on or off, and you _again_ check for device-specific domains, and this time you call both of them.
Do you have specific reasons to think, that calling both of them from genpd_stop_dev() / genpd_start_dev() might not fit some PM-domain implementations?
Thanks Guennadi --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer http://www.open-technology.de/
| |