diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/chips/pcf50633.c | 29 | ||||
-rw-r--r-- | drivers/mfd/glamo/glamo-core.c | 2 | ||||
-rw-r--r-- | drivers/video/display/jbt6k74.c | 1 |
3 files changed, 18 insertions, 14 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c index 4002c03aca3..37dfca68797 100644 --- a/drivers/i2c/chips/pcf50633.c +++ b/drivers/i2c/chips/pcf50633.c @@ -750,9 +750,6 @@ static void pcf50633_work(struct work_struct *work) mutex_lock(&pcf->working_lock); pcf->working = 1; - dev_info(&pcf->client.dev, "pcf50633_work called with suspended = %d\n", - pcf->have_been_suspended); - /* * If we are inside suspend -> resume completion time we don't attempt * service until we have fully resumed. Although we could talk to the @@ -763,11 +760,8 @@ static void pcf50633_work(struct work_struct *work) * completed. */ - if (pcf->have_been_suspended && (pcf->have_been_suspended < 3)) { - dev_info(&pcf->client.dev, "rescheduling, suspended = %d\n", - pcf->have_been_suspended); + if (pcf->have_been_suspended && (pcf->have_been_suspended < 3)) goto reschedule; - } /* * datasheet says we have to read the five IRQ @@ -1157,9 +1151,13 @@ static void pcf50633_work(struct work_struct *work) reschedule: /* don't spew, delaying whatever else is happening */ - msleep(100); - - dev_info(&pcf->client.dev, "rescheduling interrupt service\n"); + /* EXCEPTION: if we are in the middle of suspending, we don't have + * time to hang around since we may be turned off core 1V3 already + */ + if (pcf->have_been_suspended != 1) { + msleep(50); + dev_info(&pcf->client.dev, "rescheduling interrupt service\n"); + } if (!schedule_work(&pcf->work)) dev_err(&pcf->client.dev, "int service reschedule failed\n"); @@ -2333,7 +2331,7 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) PCF50633_REG_AUTOOUT, sizeof(pcf->standby_regs.misc), &pcf->standby_regs.misc[0]); - if (ret != 18) + if (ret != sizeof(pcf->standby_regs.misc)) dev_err(dev, "Failed to save misc levels and enables :-(\n"); /* regulator voltages and enable states */ @@ -2341,7 +2339,7 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) PCF50633_REG_LDO1OUT, sizeof(pcf->standby_regs.ldo), &pcf->standby_regs.ldo[0]); - if (ret != 14) + if (ret != sizeof(pcf->standby_regs.ldo)) dev_err(dev, "Failed to save LDO levels and enables :-(\n"); /* switch off power supplies that are not needed during suspend */ @@ -2349,8 +2347,6 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) if ((pcf->pdata->rails[i].flags & PMU_VRAIL_F_SUSPEND_ON)) continue; - dev_dbg(dev, "disabling regulator %u\n", i); - /* we can save ourselves the read part of a read-modify-write * here because we captured all these already */ @@ -2359,6 +2355,11 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) else tmp = pcf->standby_regs.ldo[(i - 4) * 2 + 1]; + dev_info(dev, "disabling reg %s by setting ENA %d to 0x%02X\n", + pcf->pdata->rails[i].name, + regulator_registers[i] + 1, tmp & 0xfe); + + /* associated enable is always +1 from OUT reg */ __reg_write(pcf, regulator_registers[i] + 1, tmp & 0xfe); } diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c index 3edbfa820d2..d4b526d41fa 100644 --- a/drivers/mfd/glamo/glamo-core.c +++ b/drivers/mfd/glamo/glamo-core.c @@ -848,6 +848,7 @@ static void glamo_power(struct glamo_core *glamo, ARRAY_SIZE(glamo_resume_script), 0); break; + case GLAMO_POWER_STANDBY: /* enable memory self-refresh */ __reg_set_bit_mask(glamo, GLAMO_REG_MEM_DRAM1, @@ -859,6 +860,7 @@ static void glamo_power(struct glamo_core *glamo, __reg_set_bit_mask(glamo, GLAMO_REG_PLL_GEN3, 0x2000, 0xffff); __reg_set_bit_mask(glamo, GLAMO_REG_DFT_GEN5, 0x0001, 0xffff); break; + case GLAMO_POWER_SUSPEND: __reg_set_bit_mask(glamo, GLAMO_REG_MEM_DRAM2, GLAMO_MEM_DRAM2_DEEP_PWRDOWN, 0xffff); diff --git a/drivers/video/display/jbt6k74.c b/drivers/video/display/jbt6k74.c index 6fa1fe7ee51..b40629839fc 100644 --- a/drivers/video/display/jbt6k74.c +++ b/drivers/video/display/jbt6k74.c @@ -634,6 +634,7 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state) /* Save mode for resume */ jbt->last_state = jbt->state; + jbt6k74_enter_state(jbt, JBT_STATE_DEEP_STANDBY); jbt->have_resumed = 0; |