Suspend and Resume traces

Sean McNeil sean at mcneil.com
Thu Jun 12 23:12:57 CEST 2008


Am I missing something in pcf50633.c as I can't see where the interrupt 
mask is restored on resume. I only see the resumers gettting set in suspend:

    __reg_write(pcf, PCF50633_REG_INT1M, ~pcf->pdata->resumers[0]);
    __reg_write(pcf, PCF50633_REG_INT2M, ~pcf->pdata->resumers[1]);
    __reg_write(pcf, PCF50633_REG_INT3M, ~pcf->pdata->resumers[2]);
    __reg_write(pcf, PCF50633_REG_INT4M, ~pcf->pdata->resumers[3]);
    __reg_write(pcf, PCF50633_REG_INT5M, ~pcf->pdata->resumers[4]);


Andy Green wrote:
> Somebody in the thread at some point said:
> | How about this:
> |
> | diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
> | index 90edce0..fa39463 100644
> | --- a/drivers/i2c/chips/pcf50633.c
> | +++ b/drivers/i2c/chips/pcf50633.c
> | @@ -687,7 +687,7 @@ static void pcf50633_work(struct work_struct *work)
> |
> |        /* hey did we just resume? */
> |
> | -       if (pcf->have_been_suspended) {
> | +       if (pcf->have_been_suspended == 2) {
> |                pcf->have_been_suspended = 0;
> |                /*
> |                 * grab a copy of resume interrupt reasons
> |
> |
>
> Huh.  This gave me the "crashing on resume" disease when I tried to
> amend it to require an == 3 "resume completion" concept in the work
> function, and likewise it continued to crash with any such qualification
> in it, which makes no actual sense unless some hidden tiger-dragon is in
> there (no doubt same as causes apparent double execution of suspends and
> so on).  That's the first time in a long while I have seen this kind of
> behaviour and there is no normal explanation for it.
>
> So it's the same as the "printk's make me crash" reports.
>
> -Andy





More information about the openmoko-kernel mailing list