aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAmit Kucheria <amit.kucheria@verdurent.com>2009-08-17 10:01:56 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2009-09-17 03:47:22 -0400
commit75a7456539224c5c5c254130afdb18bd7eb2286f (patch)
tree5aa70e1b0731e6c90a1bcb53eef57c126bec0c0e /drivers
parentebf0bd366ed8161e6fbc919705d878ccbfd51624 (diff)
mfd: Print warning for twl4030 out-of-order script loading
When the sleep script is loaded before the wakeup script, there is a chance that the system might go to sleep before the wakeup script loading is completed. This will lead to a system that does not wakeup and has been observed to cause non-booting boards. Various options were considered to solve this problem, including modification of the core twl4030 power code to be smart enough to reorder the loading of the scripts. But it felt too over-engineered. Hence this patch just warns the DPS script developer so that they may be reordered in the board-code itself. Signed-off-by: Amit Kucheria <amit.kucheria@verdurent.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mfd/twl4030-power.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index e7688b041264..5284c7c169a5 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -379,6 +379,7 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
379 u8 address) 379 u8 address)
380{ 380{
381 int err; 381 int err;
382 static int order;
382 383
383 /* Make sure the script isn't going beyond last valid address (0x3f) */ 384 /* Make sure the script isn't going beyond last valid address (0x3f) */
384 if ((address + tscript->size) > END_OF_SCRIPT) { 385 if ((address + tscript->size) > END_OF_SCRIPT) {
@@ -399,6 +400,7 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
399 err = twl4030_config_wakeup12_sequence(address); 400 err = twl4030_config_wakeup12_sequence(address);
400 if (err) 401 if (err)
401 goto out; 402 goto out;
403 order = 1;
402 } 404 }
403 if (tscript->flags & TWL4030_WAKEUP3_SCRIPT) { 405 if (tscript->flags & TWL4030_WAKEUP3_SCRIPT) {
404 err = twl4030_config_wakeup3_sequence(address); 406 err = twl4030_config_wakeup3_sequence(address);
@@ -406,6 +408,10 @@ static int __init load_twl4030_script(struct twl4030_script *tscript,
406 goto out; 408 goto out;
407 } 409 }
408 if (tscript->flags & TWL4030_SLEEP_SCRIPT) 410 if (tscript->flags & TWL4030_SLEEP_SCRIPT)
411 if (order)
412 pr_warning("TWL4030: Bad order of scripts (sleep "\
413 "script before wakeup) Leads to boot"\
414 "failure on some boards\n");
409 err = twl4030_config_sleep_sequence(address); 415 err = twl4030_config_sleep_sequence(address);
410out: 416out:
411 return err; 417 return err;