On Tue, Mar 8, 2011 at 07:45, Paul Walmsley <paul@xxxxxxxxx> wrote: > Some drivers wish to know whether the device that they control can > ever lose context, for example, when the device's enclosing > powerdomain loses power. They can use this information to determine > whether it is necessary to save and restore device context, or whether > it can be skipped. Implement the powerdomain portion of this by > adding the function pwrdm_can_ever_lose_context(). This is not for > use directly from driver code, but instead is intended to be called > from driver-subarch integration code (i.e., arch/arm/*omap* code). > > Currently, the result from this function should be passed into the > driver code via struct platform_data, but at some point this should > be part of some common or OMAP-specific device code. > > While here, update file copyrights. > > Signed-off-by: Paul Walmsley <paul@xxxxxxxxx> > --- > arch/arm/mach-omap2/powerdomain.c | 43 ++++++++++++++++++++++++++++++++++++- > arch/arm/mach-omap2/powerdomain.h | 18 +++++++-------- > 2 files changed, 50 insertions(+), 11 deletions(-) > > diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c > index eaed0df..a11be81 100644 > --- a/arch/arm/mach-omap2/powerdomain.c > +++ b/arch/arm/mach-omap2/powerdomain.c > @@ -2,7 +2,7 @@ > * OMAP powerdomain control > * > * Copyright (C) 2007-2008 Texas Instruments, Inc. > - * Copyright (C) 2007-2009 Nokia Corporation > + * Copyright (C) 2007-2011 Nokia Corporation > * > * Written by Paul Walmsley > * Added OMAP4 specific support by Abhijit Pagare <abhijitpagare@xxxxxx> > @@ -938,3 +938,44 @@ u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm) > > return count; > } > + > +/** > + * pwrdm_can_ever_lose_context - can this powerdomain ever lose context? > + * @pwrdm: struct powerdomain * > + * > + * Given a struct powerdomain * @pwrdm, returns 1 if the powerdomain > + * can lose either memory or logic context or if @pwrdm is invalid, or > + * returns 0 otherwise. This function is not concerned with how the > + * powerdomain registers are programmed (i.e., to go off or not); it's > + * concerned with whether it's ever possible for this powerdomain to > + * go off while some other part of the chip is active. This function > + * assumes that every powerdomain can go to either ON or INACTIVE. > + */ > +bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm) > +{ > + int i; > + > + if (IS_ERR_OR_NULL(pwrdm)) { > + pr_debug("powerdomain: %s: invalid powerdomain pointer\n", > + __func__); > + return 1; Do you really want to return 1 in case of invalid powerdomain pointer? -V Charulatha > + } > + > + if (pwrdm->pwrsts & PWRSTS_OFF) > + return 1; > + > + if (pwrdm->pwrsts & PWRSTS_RET) { > + if (pwrdm->pwrsts_logic_ret & PWRSTS_OFF) > + return 1; > + > + for (i = 0; i < pwrdm->banks; i++) > + if (pwrdm->pwrsts_mem_ret[i] & PWRSTS_OFF) > + return 1; > + } > + > + for (i = 0; i < pwrdm->banks; i++) > + if (pwrdm->pwrsts_mem_on[i] & PWRSTS_OFF) > + return 1; > + > + return 0; > +} <<snip>> -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html