Re: [PATCH] pxa: save/restore PGSR on suspend/resume.

2009-05-05 Thread Eric Miao
On Tue, May 5, 2009 at 6:36 AM, Eric Miao eric.y.m...@gmail.com wrote:
 On Tue, May 5, 2009 at 6:30 AM, Daniel Ribeiro drw...@gmail.com wrote:
 Eric, can you please take a look at this?

 Sure, I seem to remember PGSRx will be preserved across
 low power and run modes, but looks I'm wrong and I'll double
 check with the spec.


Yeah, double checked with the spec, that the content of these registers
will be reset upon exit from sleep or deep-sleep mode. So this patch is
very helpful, thanks.

Applied to 'fix'.

-- 
Cheers
- eric



Re: [PATCH] pxa: save/restore PGSR on suspend/resume.

2009-05-04 Thread Daniel Ribeiro
Eric, can you please take a look at this?

The current code only setups the LPM on pxa2xx_mfp_config() or
pxa2xx_set_lpm(), if we dont save PGSR the board code needs to call
mfp_set_lpm for each pin it wants LPM on the suspend() function,
otherwise the LPM configuration will only be valid on the first suspend.

This is a regression introduced by commit
5a3d96519040f9736b9f8089e2a1e33a81a6eafe, and it is broken since
september.

My board uses GPIO4 falling edge to ask the PMIC to poweroff, without
this patch i can only suspend/resume once, the second attempt results on
a poweroff because GPIO4 goes low on suspend.

Em Sáb, 2009-05-02 às 15:05 -0300, Daniel Ribeiro escreveu:
 Signed-off-by: Daniel Ribeiro drw...@gmail.com
 
 diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c
 b/arch/arm/mach-pxa/mfp-pxa2xx.c
 index 7ffb91d..6ae5060 100644
 --- a/arch/arm/mach-pxa/mfp-pxa2xx.c
 +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c
 @@ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {}
  #ifdef CONFIG_PM
  static unsigned long saved_gafr[2][4];
  static unsigned long saved_gpdr[4];
 +static unsigned long saved_pgsr[4];
  
  static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
  {
 @@ -332,6 +333,7 @@ static int pxa2xx_mfp_suspend(struct sys_device *d,
 pm_message_t state)
   saved_gafr[0][i] = GAFR_L(i);
   saved_gafr[1][i] = GAFR_U(i);
   saved_gpdr[i] = GPDR(i * 32);
 + saved_pgsr[i] = PGSR(i);
  
   GPDR(i * 32) = gpdr_lpm[i];
   }
 @@ -346,6 +348,7 @@ static int pxa2xx_mfp_resume(struct sys_device *d)
   GAFR_L(i) = saved_gafr[0][i];
   GAFR_U(i) = saved_gafr[1][i];
   GPDR(i * 32) = saved_gpdr[i];
 + PGSR(i) = saved_pgsr[i];
   }
   PSSR = PSSR_RDH | PSSR_PH;
   return 0;
 
-- 
Daniel Ribeiro




Re: [PATCH] pxa: save/restore PGSR on suspend/resume.

2009-05-04 Thread Eric Miao
On Tue, May 5, 2009 at 6:30 AM, Daniel Ribeiro drw...@gmail.com wrote:
 Eric, can you please take a look at this?

Sure, I seem to remember PGSRx will be preserved across
low power and run modes, but looks I'm wrong and I'll double
check with the spec.