[PATCH 30/133] [Jaunty SRU] ARM.imx51 Freescale:ENGR00110536-4 mc13892: Added pmic_alloc_data function
Brad Figg
brad.figg at canonical.com
Thu Jul 9 16:48:20 UTC 2009
From: Ann Thornton <Ann.Thornton at freescale.com>
pmic_alloc_data function was added to allow the pmic code
to be regulator independent.
It appears the SW regulators need enable/disable functions.
Signed-off-by: Ann Thornton <Ann.Thornton at freescale.com>
Signed-off-by: Brad Figg <brad.figg at canonical.com>
---
drivers/mxc/pmic/core/mc13892.c | 14 +++++
drivers/regulator/reg-mc13892.c | 103 +--------------------------------------
2 files changed, 16 insertions(+), 101 deletions(-)
diff --git a/drivers/mxc/pmic/core/mc13892.c b/drivers/mxc/pmic/core/mc13892.c
index 63015cf..34ceec5 100644
--- a/drivers/mxc/pmic/core/mc13892.c
+++ b/drivers/mxc/pmic/core/mc13892.c
@@ -32,6 +32,7 @@
#include <linux/delay.h>
#include <linux/pmic_external.h>
#include <linux/pmic_status.h>
+#include <linux/mfd/mc13892/core.h>
#include <asm/mach-types.h>
#include <asm/uaccess.h>
@@ -150,6 +151,19 @@ int pmic_write(int reg_num, const unsigned int reg_val)
}
}
+void *pmic_alloc_data(struct device *dev)
+{
+ struct mc13892 *mc13892;
+
+ mc13892 = kzalloc(sizeof(struct mc13892), GFP_KERNEL);
+ if (mc13892 == NULL)
+ return NULL;
+
+ mc13892->dev = dev;
+
+ return (void *)mc13892;
+}
+
/*!
* This function initializes the SPI device parameters for this PMIC.
*
diff --git a/drivers/regulator/reg-mc13892.c b/drivers/regulator/reg-mc13892.c
index f60b6c0..acec917 100644
--- a/drivers/regulator/reg-mc13892.c
+++ b/drivers/regulator/reg-mc13892.c
@@ -461,102 +461,6 @@ static int mc13892_sw_stby_set_voltage(struct regulator_dev *reg, int uV)
return pmic_write_reg(register1, register_val, register_mask);
}
-static int mc13892_sw_stby_get_voltage(struct regulator_dev *reg)
-{
- unsigned int register_val = 0;
- int voltage = 0, mV = 0, hi;
- int sw = rdev_get_id(reg);
-
- switch (sw) {
- case MC13892_SW1:
- CHECK_ERROR(pmic_read_reg(REG_SW_0,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW1_STDBY);
- break;
- case MC13892_SW2:
- CHECK_ERROR(pmic_read_reg(REG_SW_1,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW2_STDBY);
- break;
- case MC13892_SW3:
- CHECK_ERROR(pmic_read_reg(REG_SW_2,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW3_STDBY);
- break;
- case MC13892_SW4:
- CHECK_ERROR(pmic_read_reg(REG_SW_3,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW4_STDBY);
- break;
- default:
- return -EINVAL;
- }
-
- hi = mc13892_get_sw_hi_bit(sw);
- mV = mc13892_get_voltage_mV(hi, voltage);
-
- return mV;
-}
-
-static int mc13892_sw_dvs_set_voltage(struct regulator_dev *reg,
- int minuV, int uV)
-{
- unsigned int register_val = 0, register_mask = 0;
- unsigned int register1 = 0;
- int voltage, mV = uV / 1000, hi;
- int sw = rdev_get_id(reg);
-
- hi = mc13892_get_sw_hi_bit(sw);
- voltage = mc13892_get_voltage_value(&hi, mV);
-
- switch (sw) {
- case MC13892_SW1:
- register1 = REG_SW_0;
- register_val = BITFVAL(SW1_DVS, voltage);
- register_mask = BITFMASK(SW1_DVS);
- break;
- case MC13892_SW2:
- register1 = REG_SW_1;
- register_val = BITFVAL(SW2_DVS, voltage);
- register_mask = BITFMASK(SW2_DVS);
- break;
- default:
- return -EINVAL;
- }
-
- register_val |= (hi << SWXHI_LSH);
- register_mask |= (1 << SWXHI_LSH);
-
- return pmic_write_reg(register1, register_val, register_mask);
-}
-
-static int mc13892_sw_dvs_get_voltage(struct regulator_dev *reg)
-{
- unsigned int register_val = 0;
- int voltage = 0, mV = 0, hi;
- int sw = rdev_get_id(reg);
-
- switch (sw) {
- case MC13892_SW1:
- CHECK_ERROR(pmic_read_reg(REG_SW_0,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW1_DVS);
- break;
- case MC13892_SW2:
- CHECK_ERROR(pmic_read_reg(REG_SW_1,
- ®ister_val, PMIC_ALL_BITS));
- voltage = BITFEXT(register_val, SW2_DVS);
- break;
- default:
- return -EINVAL;
- }
-
- hi = mc13892_get_sw_hi_bit(sw);
- mV = mc13892_get_voltage_mV(hi, voltage);
-
- return mV;
-}
-
static int mc13892_swbst_enable(struct regulator_dev *reg)
{
unsigned int register_val = 0, register_mask = 0;
@@ -1565,6 +1469,8 @@ static int mc13892_power_gating_disable(struct regulator_dev *reg)
}
static struct regulator_ops mc13892_sw_ops = {
+ .enable = mc13892_sw_stby_enable,
+ .disable = mc13892_sw_stby_disable,
.set_voltage = mc13892_sw_set_voltage,
.get_voltage = mc13892_sw_get_voltage,
.set_suspend_voltage = mc13892_sw_stby_set_voltage,
@@ -1573,11 +1479,6 @@ static struct regulator_ops mc13892_sw_ops = {
.set_suspend_mode = mc13892_sw_stby_set_mode,
};
-static struct regulator_ops mc13892_sw_dvs_ops = {
- .set_voltage = mc13892_sw_dvs_set_voltage,
- .get_voltage = mc13892_sw_dvs_get_voltage,
-};
-
static struct regulator_ops mc13892_swbst_ops = {
.enable = mc13892_swbst_enable,
.disable = mc13892_swbst_disable,
--
1.6.0.4
More information about the kernel-team
mailing list