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


Reply via email to