Просмотр исходного кода

Implement voltage listing for pc50633.

SVN-Revision: 16858
Lars-Peter Clausen 16 лет назад
Родитель
Сommit
16ed97de1f
1 измененных файлов с 106 добавлено и 0 удалено
  1. 106 0
      target/linux/s3c24xx/patches-2.6.30/056-pcf50633.patch

+ 106 - 0
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 <linux/mfd/pcf50633/core.h>
+ #include <linux/mfd/pcf50633/pmic.h>
+ 
+-#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)