diff options
author | Amit Kucheria <amit.kucheria@verdurent.com> | 2009-08-17 10:01:56 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2009-09-17 03:47:22 -0400 |
commit | 75a7456539224c5c5c254130afdb18bd7eb2286f (patch) | |
tree | 5aa70e1b0731e6c90a1bcb53eef57c126bec0c0e /drivers/mfd | |
parent | ebf0bd366ed8161e6fbc919705d878ccbfd51624 (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/mfd')
-rw-r--r-- | drivers/mfd/twl4030-power.c | 6 |
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); |
410 | out: | 416 | out: |
411 | return err; | 417 | return err; |