From 16ed97de1f76398e222745aa47b03f643b71b014 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Thu, 16 Jul 2009 09:35:15 +0000 Subject: [PATCH] Implement voltage listing for pc50633. SVN-Revision: 16858 --- .../s3c24xx/patches-2.6.30/056-pcf50633.patch | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/target/linux/s3c24xx/patches-2.6.30/056-pcf50633.patch b/target/linux/s3c24xx/patches-2.6.30/056-pcf50633.patch index b1274f993c..84083b4f32 100644 --- a/target/linux/s3c24xx/patches-2.6.30/056-pcf50633.patch +++ b/target/linux/s3c24xx/patches-2.6.30/056-pcf50633.patch @@ -355,3 +355,109 @@ /* LED registers */ #define PCF50633_REG_LEDOUT 0x28 +diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c +index 8e14900..4809789 100644 +--- a/drivers/regulator/pcf50633-regulator.c ++++ b/drivers/regulator/pcf50633-regulator.c +@@ -24,11 +24,12 @@ + #include + #include + +-#define PCF50633_REGULATOR(_name, _id) \ ++#define PCF50633_REGULATOR(_name, _id, _n) \ + { \ + .name = _name, \ + .id = _id, \ + .ops = &pcf50633_regulator_ops, \ ++ .n_voltages = _n, \ + .type = REGULATOR_VOLTAGE, \ + .owner = THIS_MODULE, \ + } +@@ -193,6 +194,40 @@ static int pcf50633_regulator_get_voltage(struct regulator_dev *rdev) + return millivolts * 1000; + } + ++static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev, ++ unsigned int index) ++{ ++ struct pcf50633 *pcf; ++ int regulator_id, millivolts; ++ ++ pcf = rdev_get_drvdata(rdev);; ++ ++ regulator_id = rdev_get_id(rdev); ++ ++ switch (regulator_id) { ++ case PCF50633_REGULATOR_AUTO: ++ millivolts = auto_voltage_value(index + 0x2f); ++ break; ++ case PCF50633_REGULATOR_DOWN1: ++ case PCF50633_REGULATOR_DOWN2: ++ millivolts = down_voltage_value(index); ++ break; ++ case PCF50633_REGULATOR_LDO1: ++ case PCF50633_REGULATOR_LDO2: ++ case PCF50633_REGULATOR_LDO3: ++ case PCF50633_REGULATOR_LDO4: ++ case PCF50633_REGULATOR_LDO5: ++ case PCF50633_REGULATOR_LDO6: ++ case PCF50633_REGULATOR_HCLDO: ++ millivolts = ldo_voltage_value(index); ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return millivolts * 1000; ++} ++ + static int pcf50633_regulator_enable(struct regulator_dev *rdev) + { + struct pcf50633 *pcf = rdev_get_drvdata(rdev); +@@ -246,6 +281,7 @@ static int pcf50633_regulator_is_enabled(struct regulator_dev *rdev) + static struct regulator_ops pcf50633_regulator_ops = { + .set_voltage = pcf50633_regulator_set_voltage, + .get_voltage = pcf50633_regulator_get_voltage, ++ .list_voltage = pcf50633_regulator_list_voltage, + .enable = pcf50633_regulator_enable, + .disable = pcf50633_regulator_disable, + .is_enabled = pcf50633_regulator_is_enabled, +@@ -253,27 +289,27 @@ static struct regulator_ops pcf50633_regulator_ops = { + + static struct regulator_desc regulators[] = { + [PCF50633_REGULATOR_AUTO] = +- PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO), ++ PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO, 80), + [PCF50633_REGULATOR_DOWN1] = +- PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1), ++ PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1, 95), + [PCF50633_REGULATOR_DOWN2] = +- PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2), ++ PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2, 95), + [PCF50633_REGULATOR_LDO1] = +- PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1), ++ PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1, 27), + [PCF50633_REGULATOR_LDO2] = +- PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2), ++ PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2, 27), + [PCF50633_REGULATOR_LDO3] = +- PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3), ++ PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3, 27), + [PCF50633_REGULATOR_LDO4] = +- PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4), ++ PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4, 27), + [PCF50633_REGULATOR_LDO5] = +- PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5), ++ PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5, 27), + [PCF50633_REGULATOR_LDO6] = +- PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6), ++ PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6, 27), + [PCF50633_REGULATOR_HCLDO] = +- PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO), ++ PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO, 26), + [PCF50633_REGULATOR_MEMLDO] = +- PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO), ++ PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO, 27), + }; + + static int __devinit pcf50633_regulator_probe(struct platform_device *pdev)