summaryrefslogtreecommitdiff
path: root/drivers/regulator
diff options
context:
space:
mode:
authorPhilippe Langlais <philippe.langlais@linaro.org>2011-07-07 13:39:47 +0200
committerUlf Hansson <ulf.hansson@stericsson.com>2011-09-19 15:15:43 +0200
commit31470a483d96caf4d439fe41e8144bde728cf286 (patch)
tree05d860463de00efee669d4630c2bf0d7150f8303 /drivers/regulator
parentf39ddd4052704c60a950c055b6f18f5aeed0c40e (diff)
ux500: align u5500 PRCMU & CPUFREQ management with u8500 (multiple commits in one)
Signed-off-by: Philippe Langlais <philippe.langlais@linaro.org> Merge of following commits too: u5500: add support for sysclk basic sysclk support added in PRCMU driver and clock framework driver updated. Signed-off-by: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com> U5500: Support for ESRAM12 EPOD in PRCMU driver Signed-off-by: Vijaya Kumar Kilari <vijay.kilari@stericsson.com> ux500: regulator: handle different base offset of ePOD ID 5500 ePOD ids are offseted for some reason in the PRCMU driver. Adjust the ids to index the local arrays to avoid memory corruption. Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> ux500: pm: support PRCMU status check on 5500 This also removes unused 8500v1 code. Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> arm: ux500: prcmu_ac_wake_req workaround This patch adds a check in prcmu_ac_wake_req that the modem is awake (in terms of the value in the PRCM_MOD_AWAKE_STATUS register) after the AC_WAKE_ACK has been received from the PRCMU FW. If the check fails, a retry is made. This seems to be necessary, since the modem can generate an AC_WAKE_ACK, and then still go to sleep. Signed-off-by: Mattias Nilsson <mattias.i.nilsson@stericsson.com> U5500: Add support for PRCMU Mailbox0 Add PRCMU mailbox 0 support for irq wakeup enable and disable Signed-off-by: Vijaya Kumar K <vijay.kilari@stericsson.com> U5500: Add support for power state transition PRCMU driver is updated to provide API for system power state transition Signed-off-by: Vijaya Kumar K <vijay.kilari@stericsson.com> ARM: ux500: prcmu: Add A9 watchdog interface Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com> U5500 : ab5500 core interrupt hander update AB5500 interrupts will be now handled by PRCMU and then routed to AB5500 core driver.AB5500 irq handler will no more read the latch registers to find the interrupt reason.Instead PRCMU will read the latch registers and provide the values to core driver. Signed-off-by: Bibek Basu <bibek.basu@stericsson.com> ARM: ux500: prcmu-dbg: Tiny code clean-up Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com> u5500: add mailbox1 and related function support Add cpufreq-db5500.c file for db5500 CPUfreq support. PRCMU mailbox1 and related functions' support is added. List of functions implemented: - prcmu_get/set_arm_opp - read_mailbox_1 Signed-off-by: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com> Fix for PRCMU u5500: PRCMU IRQ should be NO_SUSPEND As on 8500. Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> ARM: u5500: PRCMU reset API Added API for rebooting the board and for getting the last reboot code. Signed-off-by: Pawel Szyszuk <pawel.szyszuk@stericsson.com>
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/db5500-prcmu.c43
-rw-r--r--drivers/regulator/dbx500-prcmu.c1
2 files changed, 26 insertions, 18 deletions
diff --git a/drivers/regulator/db5500-prcmu.c b/drivers/regulator/db5500-prcmu.c
index a6884ca8942..d52f459fc3c 100644
--- a/drivers/regulator/db5500-prcmu.c
+++ b/drivers/regulator/db5500-prcmu.c
@@ -102,22 +102,28 @@ static struct regulator_ops db5500_regulator_ops = {
static bool epod_on[NUM_EPOD_ID];
static bool epod_ramret[NUM_EPOD_ID];
+static inline int epod_id_to_index(u16 epod_id)
+{
+ return epod_id - DB5500_EPOD_ID_BASE;
+}
+
static int enable_epod(u16 epod_id, bool ramret)
{
+ int idx = epod_id_to_index(epod_id);
int ret;
if (ramret) {
- if (!epod_on[epod_id]) {
+ if (!epod_on[idx]) {
ret = prcmu_set_epod(epod_id, EPOD_STATE_RAMRET);
if (ret < 0)
return ret;
}
- epod_ramret[epod_id] = true;
+ epod_ramret[idx] = true;
} else {
ret = prcmu_set_epod(epod_id, EPOD_STATE_ON);
if (ret < 0)
return ret;
- epod_on[epod_id] = true;
+ epod_on[idx] = true;
}
return 0;
@@ -125,17 +131,18 @@ static int enable_epod(u16 epod_id, bool ramret)
static int disable_epod(u16 epod_id, bool ramret)
{
+ int idx = epod_id_to_index(epod_id);
int ret;
if (ramret) {
- if (!epod_on[epod_id]) {
+ if (!epod_on[idx]) {
ret = prcmu_set_epod(epod_id, EPOD_STATE_OFF);
if (ret < 0)
return ret;
}
- epod_ramret[epod_id] = false;
+ epod_ramret[idx] = false;
} else {
- if (epod_ramret[epod_id]) {
+ if (epod_ramret[idx]) {
ret = prcmu_set_epod(epod_id, EPOD_STATE_RAMRET);
if (ret < 0)
return ret;
@@ -144,7 +151,7 @@ static int disable_epod(u16 epod_id, bool ramret)
if (ret < 0)
return ret;
}
- epod_on[epod_id] = false;
+ epod_on[idx] = false;
}
return 0;
@@ -224,11 +231,11 @@ static struct regulator_ops db5500_regulator_switch_ops = {
/*
* Regulator information
*/
-#define U5500_REGULATOR_SWITCH(_name, reg) \
- [U5500_REGULATOR_SWITCH_##reg] = { \
+#define DB5500_REGULATOR_SWITCH(_name, reg) \
+ [DB5500_REGULATOR_SWITCH_##reg] = { \
.desc = { \
.name = _name, \
- .id = U5500_REGULATOR_SWITCH_##reg, \
+ .id = DB5500_REGULATOR_SWITCH_##reg, \
.ops = &db5500_regulator_switch_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -237,21 +244,21 @@ static struct regulator_ops db5500_regulator_switch_ops = {
}
static struct db5500_regulator_info
- db5500_regulator_info[U5500_NUM_REGULATORS] = {
- [U5500_REGULATOR_VAPE] = {
+ db5500_regulator_info[DB5500_NUM_REGULATORS] = {
+ [DB5500_REGULATOR_VAPE] = {
.desc = {
.name = "db5500-vape",
- .id = U5500_REGULATOR_VAPE,
+ .id = DB5500_REGULATOR_VAPE,
.ops = &db5500_regulator_ops,
.type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE,
},
},
- U5500_REGULATOR_SWITCH("u5500-sga", SGA),
- U5500_REGULATOR_SWITCH("u5500-hva", HVA),
- U5500_REGULATOR_SWITCH("u5500-sia", SIA),
- U5500_REGULATOR_SWITCH("u5500-disp", DISP),
- U5500_REGULATOR_SWITCH("u5500-esram12", ESRAM12),
+ DB5500_REGULATOR_SWITCH("db5500-sga", SGA),
+ DB5500_REGULATOR_SWITCH("db5500-hva", HVA),
+ DB5500_REGULATOR_SWITCH("db5500-sia", SIA),
+ DB5500_REGULATOR_SWITCH("db5500-disp", DISP),
+ DB5500_REGULATOR_SWITCH("db5500-esram12", ESRAM12),
};
static int __devinit db5500_regulator_probe(struct platform_device *pdev)
diff --git a/drivers/regulator/dbx500-prcmu.c b/drivers/regulator/dbx500-prcmu.c
index 3df5fcd454a..1ee6f6a7c4a 100644
--- a/drivers/regulator/dbx500-prcmu.c
+++ b/drivers/regulator/dbx500-prcmu.c
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <linux/err.h>
#include <linux/regulator/driver.h>
+#include <linux/regulator/dbx500-prcmu.h>
/*
* power state reference count