diff options
| author | Sangbeom Kim <sbkim73@samsung.com> | 2012-06-17 20:49:20 -0400 |
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-06-19 07:06:32 -0400 |
| commit | c848bc8538cd29e92223d5e72e8fb60e6f2e176e (patch) | |
| tree | a7a40e51dc2efafc2a25959cb05f7bf9cf71732e /include/linux | |
| parent | 852abad238da723efac29f3e78dd768c18d6a062 (diff) | |
regulator: s5m8767a: Support AP watchdog reset operation
The S5M8767A can't know status of ap reset.
So, After AP watchdog reset, AP can't boot normally.
Problem can be happened like below condition.
- AP Bootable lowest voltage(vdd_arm): 0.9v
- AP DVFS voltage table: 0.8v, 0.9v, 1.0v
- During AP works on lowest voltage(0.8V), watchdog reset is asserted
- AP can't boot, because vdd arm is still 0.8v
Solution
- Basic concept:
After ap watchdog reset, GPIO configuration is changed by default value
- S5M8767A has function of voltage control with gpio (8 levels with 3 gpios)
- Set bootable voltage on level 0 -> can work with default gpio configuration
- In the probing, Change voltage control level from level 0 to level 1
- Execute normal dvfs operation on level 1
- After watchdog reset, ap gpio is set by default value
- PMIC operation mode is changed by ap reset (level1 -> level0)
- Regardless of previous vdd_arm voltage, AP always can be booted.
Signed-off-by: Sangbeom Kim <sbkim73@samsung.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mfd/s5m87xx/s5m-core.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/mfd/s5m87xx/s5m-core.h b/include/linux/mfd/s5m87xx/s5m-core.h index 21603b42f22f..0b2e0ed309f5 100644 --- a/include/linux/mfd/s5m87xx/s5m-core.h +++ b/include/linux/mfd/s5m87xx/s5m-core.h | |||
| @@ -347,6 +347,7 @@ struct s5m_platform_data { | |||
| 347 | bool buck_voltage_lock; | 347 | bool buck_voltage_lock; |
| 348 | 348 | ||
| 349 | int buck_gpios[3]; | 349 | int buck_gpios[3]; |
| 350 | int buck_ds[3]; | ||
| 350 | int buck2_voltage[8]; | 351 | int buck2_voltage[8]; |
| 351 | bool buck2_gpiodvs; | 352 | bool buck2_gpiodvs; |
| 352 | int buck3_voltage[8]; | 353 | int buck3_voltage[8]; |
| @@ -369,6 +370,10 @@ struct s5m_platform_data { | |||
| 369 | bool buck2_ramp_enable; | 370 | bool buck2_ramp_enable; |
| 370 | bool buck3_ramp_enable; | 371 | bool buck3_ramp_enable; |
| 371 | bool buck4_ramp_enable; | 372 | bool buck4_ramp_enable; |
| 373 | |||
| 374 | int buck2_init; | ||
| 375 | int buck3_init; | ||
| 376 | int buck4_init; | ||
| 372 | }; | 377 | }; |
| 373 | 378 | ||
| 374 | #endif /* __LINUX_MFD_S5M_CORE_H */ | 379 | #endif /* __LINUX_MFD_S5M_CORE_H */ |
