[PATCH v3] regulators: add support max8952 regulator

Kukjin Kim kgene.kim at samsung.com
Tue Sep 7 19:26:16 EDT 2010


From: Changhwan Youn <chaos.youn at samsung.com>

The operation of max8952 is almost similar to max8649 except the output
voltage range. This patch adds support the max8952 regulator using
current max8649 implementation. And removes separate max8952.[ch] files
since the functionality is now merged into this driver.

Signed-off-by: Changhwan Youn <chaos.youn at samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim at samsung.com>
Cc: MyungJoo Ham <myungjoo.ham at samsung.com>
Cc: Kyungmin Park <kyungmin.park at samsung.com>
Acked-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
---
Following is as per Mark Brown's suggestion.
Changes since v2:
- Removed separate max8952.[ch] files

Changes since v1:
- Added returning fail when detected wrong ID
- Added matching the ID from the chip in case the user got things wrong
- Added enum chip ID instead of 0, 1

 drivers/regulator/Kconfig         |   12 +-
 drivers/regulator/Makefile        |    1 -
 drivers/regulator/max8649.c       |   55 +++++-
 drivers/regulator/max8952.c       |  360 -------------------------------------
 include/linux/regulator/max8952.h |  135 --------------
 5 files changed, 50 insertions(+), 513 deletions(-)
 delete mode 100644 drivers/regulator/max8952.c
 delete mode 100644 include/linux/regulator/max8952.h

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 4889caa..fab9a90 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -81,10 +81,10 @@ config REGULATOR_MAX1586
 	  for PXA27x chips to control VCC_CORE and VCC_USIM voltages.
 
 config REGULATOR_MAX8649
-	tristate "Maxim 8649 voltage regulator"
+	tristate "Maxim 8649/8952 voltage regulator"
 	depends on I2C
 	help
-	  This driver controls a Maxim 8649 voltage output regulator via
+	  This driver controls a Maxim 8649/8952 voltage output regulator via
 	  I2C bus.
 
 config REGULATOR_MAX8660
@@ -100,14 +100,6 @@ config REGULATOR_MAX8925
 	help
 	  Say y here to support the voltage regulaltor of Maxim MAX8925 PMIC.
 
-config REGULATOR_MAX8952
-	tristate "Maxim MAX8952 Power Management IC"
-	depends on I2C
-	help
-	  This driver controls a Maxim 8952 voltage output regulator
-	  via I2C bus. Maxim 8952 has one voltage output and supports 4 DVS
-	  modes ranging from 0.77V to 1.40V by 0.01V steps.
-
 config REGULATOR_MAX8998
 	tristate "Maxim 8998 voltage regulator"
 	depends on MFD_MAX8998
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index beff6da..8285fd8 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -17,7 +17,6 @@ obj-$(CONFIG_REGULATOR_TWL4030) += twl-regulator.o
 obj-$(CONFIG_REGULATOR_MAX8649)	+= max8649.o
 obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o
 obj-$(CONFIG_REGULATOR_MAX8925) += max8925-regulator.o
-obj-$(CONFIG_REGULATOR_MAX8952) += max8952.o
 obj-$(CONFIG_REGULATOR_MAX8998) += max8998.o
 obj-$(CONFIG_REGULATOR_WM831X) += wm831x-dcdc.o
 obj-$(CONFIG_REGULATOR_WM831X) += wm831x-isink.o
diff --git a/drivers/regulator/max8649.c b/drivers/regulator/max8649.c
index 4520ace..7f61a3a 100644
--- a/drivers/regulator/max8649.c
+++ b/drivers/regulator/max8649.c
@@ -22,6 +22,9 @@
 #define MAX8649_DCDC_STEP	10000		/* uV */
 #define MAX8649_VOL_MASK	0x3f
 
+/* difference between voltages of max8649 and max8952 */
+#define DIFF_MAX8952_DCDC_VOL	20000		/* uV */
+
 /* Registers */
 #define MAX8649_MODE0		0x00
 #define MAX8649_MODE1		0x01
@@ -47,6 +50,11 @@
 #define MAX8649_RAMP_MASK	(7 << 5)
 #define MAX8649_RAMP_DOWN	(1 << 1)
 
+enum chips {
+	MAX8649 = 0x200a,
+	MAX8952 = 0x201a,
+};
+
 struct max8649_regulator_info {
 	struct regulator_dev	*regulator;
 	struct i2c_client	*i2c;
@@ -54,6 +62,7 @@ struct max8649_regulator_info {
 	struct mutex		io_lock;
 
 	int		vol_reg;
+	int		type;
 	unsigned	mode:2;	/* bit[1:0] = VID1, VID0 */
 	unsigned	extclk_freq:2;
 	unsigned	extclk:1;
@@ -138,7 +147,12 @@ static inline int check_range(int min_uV, int max_uV)
 
 static int max8649_list_voltage(struct regulator_dev *rdev, unsigned index)
 {
-	return (MAX8649_DCDC_VMIN + index * MAX8649_DCDC_STEP);
+	struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
+	int ret = MAX8649_DCDC_VMIN + index * MAX8649_DCDC_STEP;
+
+	if (info->type == MAX8952)
+		ret += DIFF_MAX8952_DCDC_VOL;
+	return ret;
 }
 
 static int max8649_get_voltage(struct regulator_dev *rdev)
@@ -160,6 +174,11 @@ static int max8649_set_voltage(struct regulator_dev *rdev,
 	struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
 	unsigned char data, mask;
 
+	if (info->type == MAX8952) {
+		min_uV -= DIFF_MAX8952_DCDC_VOL;
+		max_uV -= DIFF_MAX8952_DCDC_VOL;
+	}
+
 	if (check_range(min_uV, max_uV)) {
 		dev_err(info->dev, "invalid voltage range (%d, %d) uV\n",
 			min_uV, max_uV);
@@ -263,7 +282,6 @@ static struct regulator_ops max8649_dcdc_ops = {
 	.enable_time	= max8649_enable_time,
 	.set_mode	= max8649_set_mode,
 	.get_mode	= max8649_get_mode,
-
 };
 
 static struct regulator_desc dcdc_desc = {
@@ -281,6 +299,7 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
 	struct max8649_regulator_info *info = NULL;
 	unsigned char data;
 	int ret;
+	int chip_id;
 
 	info = kzalloc(sizeof(struct max8649_regulator_info), GFP_KERNEL);
 	if (!info) {
@@ -313,11 +332,32 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
 
 	ret = max8649_reg_read(info->i2c, MAX8649_CHIP_ID1);
 	if (ret < 0) {
-		dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n",
-			ret);
+		dev_err(info->dev, "Failed to detect ID1 of %s:%d\n",
+			id->name, ret);
 		goto out;
 	}
-	dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", ret);
+	chip_id = ret;
+
+	ret = max8649_reg_read(info->i2c, MAX8649_CHIP_ID2);
+	if (ret < 0) {
+		dev_err(info->dev, "Failed to detect ID2 of %s:%d\n",
+			id->name, ret);
+		goto out;
+	}
+
+	chip_id = (chip_id << 8) | ret;
+
+	if (id->driver_data != chip_id) {
+		dev_err(info->dev, "Failed to detect the device\n"
+				   "requested : 0x%x, detected 0x%x\n",
+				   id->driver_data, chip_id);
+		ret = -ENODEV;
+		goto out;
+	}
+
+	dev_info(info->dev, "Detected %s (ID: 0x%x)\n", id->name, chip_id);
+
+	info->type = id->driver_data;
 
 	/* enable VID0 & VID1 */
 	max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_VID_MASK, 0);
@@ -354,7 +394,7 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
 		goto out;
 	}
 
-	dev_info(info->dev, "Max8649 regulator device is detected.\n");
+	dev_info(info->dev, "%s regulator device is detected.\n", id->name);
 	return 0;
 out:
 	kfree(info);
@@ -375,7 +415,8 @@ static int __devexit max8649_regulator_remove(struct i2c_client *client)
 }
 
 static const struct i2c_device_id max8649_id[] = {
-	{ "max8649", 0 },
+	{ "max8649", MAX8649 },
+	{ "max8952", MAX8952 },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, max8649_id);
diff --git a/drivers/regulator/max8952.c b/drivers/regulator/max8952.c
deleted file mode 100644
index f2af0b1..0000000
--- a/drivers/regulator/max8952.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * max8952.c - Voltage and current regulation for the Maxim 8952
- *
- * Copyright (C) 2010 Samsung Electronics
- * MyungJoo Ham <myungjoo.ham at samsung.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/i2c.h>
-#include <linux/err.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/driver.h>
-#include <linux/regulator/max8952.h>
-#include <linux/mutex.h>
-#include <linux/gpio.h>
-#include <linux/io.h>
-#include <linux/slab.h>
-
-/* Registers */
-enum {
-	MAX8952_REG_MODE0,
-	MAX8952_REG_MODE1,
-	MAX8952_REG_MODE2,
-	MAX8952_REG_MODE3,
-	MAX8952_REG_CONTROL,
-	MAX8952_REG_SYNC,
-	MAX8952_REG_RAMP,
-	MAX8952_REG_CHIP_ID1,
-	MAX8952_REG_CHIP_ID2,
-};
-
-struct max8952_data {
-	struct i2c_client	*client;
-	struct device		*dev;
-	struct mutex		mutex;
-	struct max8952_platform_data *pdata;
-	struct regulator_dev	*rdev;
-
-	bool vid0;
-	bool vid1;
-	bool en;
-};
-
-static int max8952_read_reg(struct max8952_data *max8952, u8 reg)
-{
-	int ret = i2c_smbus_read_byte_data(max8952->client, reg);
-	if (ret > 0)
-		ret &= 0xff;
-
-	return ret;
-}
-
-static int max8952_write_reg(struct max8952_data *max8952,
-		u8 reg, u8 value)
-{
-	return i2c_smbus_write_byte_data(max8952->client, reg, value);
-}
-
-static int max8952_voltage(struct max8952_data *max8952, u8 mode)
-{
-	return (max8952->pdata->dvs_mode[mode] * 10 + 770) * 1000;
-}
-
-static int max8952_list_voltage(struct regulator_dev *rdev,
-		unsigned int selector)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-
-	if (rdev_get_id(rdev) != 0)
-		return -EINVAL;
-
-	return max8952_voltage(max8952, selector);
-}
-
-static int max8952_is_enabled(struct regulator_dev *rdev)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-	return max8952->en;
-}
-
-static int max8952_enable(struct regulator_dev *rdev)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-
-	/* If not valid, assume "ALWAYS_HIGH" */
-	if (gpio_is_valid(max8952->pdata->gpio_en))
-		gpio_set_value(max8952->pdata->gpio_en, 1);
-
-	max8952->en = true;
-	return 0;
-}
-
-static int max8952_disable(struct regulator_dev *rdev)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-
-	/* If not valid, assume "ALWAYS_HIGH" -> not permitted */
-	if (gpio_is_valid(max8952->pdata->gpio_en))
-		gpio_set_value(max8952->pdata->gpio_en, 0);
-	else
-		return -EPERM;
-
-	max8952->en = false;
-	return 0;
-}
-
-static int max8952_get_voltage(struct regulator_dev *rdev)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-	u8 vid = 0;
-
-	if (max8952->vid0)
-		vid += 1;
-	if (max8952->vid1)
-		vid += 2;
-
-	return max8952_voltage(max8952, vid);
-}
-
-static int max8952_set_voltage(struct regulator_dev *rdev,
-				int min_uV, int max_uV)
-{
-	struct max8952_data *max8952 = rdev_get_drvdata(rdev);
-	u8 vid = -1, i;
-
-	if (!gpio_is_valid(max8952->pdata->gpio_vid0) ||
-			!gpio_is_valid(max8952->pdata->gpio_vid0)) {
-		/* DVS not supported */
-		return -EPERM;
-	}
-
-	for (i = 0; i < MAX8952_NUM_DVS_MODE; i++) {
-		int volt = max8952_voltage(max8952, i);
-
-		/* Set the voltage as low as possible within the range */
-		if (volt <= max_uV && volt >= min_uV)
-			if (vid == -1 || max8952_voltage(max8952, vid) > volt)
-				vid = i;
-	}
-
-	if (vid >= 0 && vid < MAX8952_NUM_DVS_MODE) {
-		max8952->vid0 = (vid % 2 == 1);
-		max8952->vid1 = (((vid >> 1) % 2) == 1);
-		gpio_set_value(max8952->pdata->gpio_vid0, max8952->vid0);
-		gpio_set_value(max8952->pdata->gpio_vid1, max8952->vid1);
-	} else
-		return -EINVAL;
-
-	return 0;
-}
-
-static struct regulator_ops max8952_ops = {
-	.list_voltage		= max8952_list_voltage,
-	.is_enabled		= max8952_is_enabled,
-	.enable			= max8952_enable,
-	.disable		= max8952_disable,
-	.get_voltage		= max8952_get_voltage,
-	.set_voltage		= max8952_set_voltage,
-	.set_suspend_disable	= max8952_disable,
-};
-
-static struct regulator_desc regulator = {
-	.name		= "MAX8952_VOUT",
-	.id		= 0,
-	.n_voltages	= MAX8952_NUM_DVS_MODE,
-	.ops		= &max8952_ops,
-	.type		= REGULATOR_VOLTAGE,
-	.owner		= THIS_MODULE,
-};
-
-static int __devinit max8952_pmic_probe(struct i2c_client *client,
-		const struct i2c_device_id *i2c_id)
-{
-	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
-	struct max8952_platform_data *pdata = client->dev.platform_data;
-	struct max8952_data *max8952;
-
-	int ret = 0, err = 0;
-
-	if (!pdata) {
-		dev_err(&client->dev, "Require the platform data\n");
-		return -EINVAL;
-	}
-
-	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
-		return -EIO;
-
-	max8952 = kzalloc(sizeof(struct max8952_data), GFP_KERNEL);
-	if (!max8952)
-		return -ENOMEM;
-
-	max8952->client = client;
-	max8952->dev = &client->dev;
-	max8952->pdata = pdata;
-	mutex_init(&max8952->mutex);
-
-	max8952->rdev = regulator_register(&regulator, max8952->dev,
-			&pdata->reg_data, max8952);
-
-	ret = IS_ERR(max8952->rdev);
-	if (ret)
-		dev_err(max8952->dev, "regulator init failed (%d)\n", ret);
-
-	max8952->en = !!(pdata->reg_data.constraints.boot_on);
-	max8952->vid0 = (pdata->default_mode % 2) == 1;
-	max8952->vid1 = ((pdata->default_mode >> 1) % 2) == 1;
-
-	if (gpio_is_valid(pdata->gpio_en)) {
-		if (!gpio_request(pdata->gpio_en, "MAX8952 EN"))
-			gpio_direction_output(pdata->gpio_en, max8952->en);
-		else
-			err = 1;
-	} else
-		err = 2;
-
-	if (err) {
-		dev_info(max8952->dev, "EN gpio invalid: assume that EN"
-				"is always High\n");
-		max8952->en = 1;
-		pdata->gpio_en = -1; /* Mark invalid */
-	}
-
-	err = 0;
-
-	if (gpio_is_valid(pdata->gpio_vid0) &&
-			gpio_is_valid(pdata->gpio_vid1)) {
-		if (!gpio_request(pdata->gpio_vid0, "MAX8952 VID0"))
-			gpio_direction_output(pdata->gpio_vid0,
-					(pdata->default_mode) % 2);
-		else
-			err = 1;
-
-		if (!gpio_request(pdata->gpio_vid1, "MAX8952 VID1"))
-			gpio_direction_output(pdata->gpio_vid1,
-				(pdata->default_mode >> 1) % 2);
-		else {
-			if (!err)
-				gpio_free(pdata->gpio_vid0);
-			err = 2;
-		}
-
-	} else
-		err = 3;
-
-	if (err) {
-		dev_warn(max8952->dev, "VID0/1 gpio invalid: "
-				"DVS not avilable.\n");
-		max8952->vid0 = 0;
-		max8952->vid1 = 0;
-		/* Mark invalid */
-		pdata->gpio_vid0 = -1;
-		pdata->gpio_vid1 = -1;
-
-		/* Disable Pulldown of EN only */
-		max8952_write_reg(max8952, MAX8952_REG_CONTROL, 0x60);
-
-		dev_err(max8952->dev, "DVS modes disabled because VID0 and VID1"
-				" do not have proper controls.\n");
-	} else {
-		/*
-		 * Disable Pulldown on EN, VID0, VID1 to reduce
-		 * leakage current of MAX8952 assuming that MAX8952
-		 * is turned on (EN==1). Note that without having VID0/1
-		 * properly connected, turning pulldown off can be
-		 * problematic. Thus, turn this off only when they are
-		 * controllable by GPIO.
-		 */
-		max8952_write_reg(max8952, MAX8952_REG_CONTROL, 0x0);
-	}
-
-	max8952_write_reg(max8952, MAX8952_REG_MODE0,
-			(max8952_read_reg(max8952,
-					  MAX8952_REG_MODE0) & 0xC0) |
-			(pdata->dvs_mode[0] & 0x3F));
-	max8952_write_reg(max8952, MAX8952_REG_MODE1,
-			(max8952_read_reg(max8952,
-					  MAX8952_REG_MODE1) & 0xC0) |
-			(pdata->dvs_mode[1] & 0x3F));
-	max8952_write_reg(max8952, MAX8952_REG_MODE2,
-			(max8952_read_reg(max8952,
-					  MAX8952_REG_MODE2) & 0xC0) |
-			(pdata->dvs_mode[2] & 0x3F));
-	max8952_write_reg(max8952, MAX8952_REG_MODE3,
-			(max8952_read_reg(max8952,
-					  MAX8952_REG_MODE3) & 0xC0) |
-			(pdata->dvs_mode[3] & 0x3F));
-
-	max8952_write_reg(max8952, MAX8952_REG_SYNC,
-			(max8952_read_reg(max8952, MAX8952_REG_SYNC) & 0x3F) |
-			((pdata->sync_freq & 0x3) << 6));
-	max8952_write_reg(max8952, MAX8952_REG_RAMP,
-			(max8952_read_reg(max8952, MAX8952_REG_RAMP) & 0x1F) |
-			((pdata->ramp_speed & 0x7) << 5));
-
-	i2c_set_clientdata(client, max8952);
-
-	return ret;
-}
-
-static int __devexit max8952_pmic_remove(struct i2c_client *client)
-{
-	struct max8952_data *max8952 = i2c_get_clientdata(client);
-	struct max8952_platform_data *pdata = max8952->pdata;
-	struct regulator_dev *rdev = max8952->rdev;
-
-	regulator_unregister(rdev);
-
-	gpio_free(pdata->gpio_vid0);
-	gpio_free(pdata->gpio_vid1);
-	gpio_free(pdata->gpio_en);
-
-	kfree(max8952);
-	return 0;
-}
-
-static const struct i2c_device_id max8952_ids[] = {
-	{ "max8952", 0 },
-	{ },
-};
-MODULE_DEVICE_TABLE(i2c, max8952_ids);
-
-static struct i2c_driver max8952_pmic_driver = {
-	.probe		= max8952_pmic_probe,
-	.remove		= __devexit_p(max8952_pmic_remove),
-	.driver		= {
-		.name	= "max8952",
-	},
-	.id_table	= max8952_ids,
-};
-
-static int __init max8952_pmic_init(void)
-{
-	return i2c_add_driver(&max8952_pmic_driver);
-}
-subsys_initcall(max8952_pmic_init);
-
-static void __exit max8952_pmic_exit(void)
-{
-	i2c_del_driver(&max8952_pmic_driver);
-}
-module_exit(max8952_pmic_exit);
-
-MODULE_DESCRIPTION("MAXIM 8952 voltage regulator driver");
-MODULE_AUTHOR("MyungJoo Ham <myungjoo.ham at samsung.com>");
-MODULE_LICENSE("GPL");
diff --git a/include/linux/regulator/max8952.h b/include/linux/regulator/max8952.h
deleted file mode 100644
index 45e4285..0000000
--- a/include/linux/regulator/max8952.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * max8952.h - Voltage regulation for the Maxim 8952
- *
- *  Copyright (C) 2010 Samsung Electrnoics
- *  MyungJoo Ham <myungjoo.ham at samsung.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef REGULATOR_MAX8952
-#define REGULATOR_MAX8952
-
-#include <linux/regulator/machine.h>
-
-enum {
-	MAX8952_DVS_MODE0,
-	MAX8952_DVS_MODE1,
-	MAX8952_DVS_MODE2,
-	MAX8952_DVS_MODE3,
-};
-
-enum {
-	MAX8952_DVS_770mV = 0,
-	MAX8952_DVS_780mV,
-	MAX8952_DVS_790mV,
-	MAX8952_DVS_800mV,
-	MAX8952_DVS_810mV,
-	MAX8952_DVS_820mV,
-	MAX8952_DVS_830mV,
-	MAX8952_DVS_840mV,
-	MAX8952_DVS_850mV,
-	MAX8952_DVS_860mV,
-	MAX8952_DVS_870mV,
-	MAX8952_DVS_880mV,
-	MAX8952_DVS_890mV,
-	MAX8952_DVS_900mV,
-	MAX8952_DVS_910mV,
-	MAX8952_DVS_920mV,
-	MAX8952_DVS_930mV,
-	MAX8952_DVS_940mV,
-	MAX8952_DVS_950mV,
-	MAX8952_DVS_960mV,
-	MAX8952_DVS_970mV,
-	MAX8952_DVS_980mV,
-	MAX8952_DVS_990mV,
-	MAX8952_DVS_1000mV,
-	MAX8952_DVS_1010mV,
-	MAX8952_DVS_1020mV,
-	MAX8952_DVS_1030mV,
-	MAX8952_DVS_1040mV,
-	MAX8952_DVS_1050mV,
-	MAX8952_DVS_1060mV,
-	MAX8952_DVS_1070mV,
-	MAX8952_DVS_1080mV,
-	MAX8952_DVS_1090mV,
-	MAX8952_DVS_1100mV,
-	MAX8952_DVS_1110mV,
-	MAX8952_DVS_1120mV,
-	MAX8952_DVS_1130mV,
-	MAX8952_DVS_1140mV,
-	MAX8952_DVS_1150mV,
-	MAX8952_DVS_1160mV,
-	MAX8952_DVS_1170mV,
-	MAX8952_DVS_1180mV,
-	MAX8952_DVS_1190mV,
-	MAX8952_DVS_1200mV,
-	MAX8952_DVS_1210mV,
-	MAX8952_DVS_1220mV,
-	MAX8952_DVS_1230mV,
-	MAX8952_DVS_1240mV,
-	MAX8952_DVS_1250mV,
-	MAX8952_DVS_1260mV,
-	MAX8952_DVS_1270mV,
-	MAX8952_DVS_1280mV,
-	MAX8952_DVS_1290mV,
-	MAX8952_DVS_1300mV,
-	MAX8952_DVS_1310mV,
-	MAX8952_DVS_1320mV,
-	MAX8952_DVS_1330mV,
-	MAX8952_DVS_1340mV,
-	MAX8952_DVS_1350mV,
-	MAX8952_DVS_1360mV,
-	MAX8952_DVS_1370mV,
-	MAX8952_DVS_1380mV,
-	MAX8952_DVS_1390mV,
-	MAX8952_DVS_1400mV,
-};
-
-enum {
-	MAX8952_SYNC_FREQ_26MHZ, /* Default */
-	MAX8952_SYNC_FREQ_13MHZ,
-	MAX8952_SYNC_FREQ_19_2MHZ,
-};
-
-enum {
-	MAX8952_RAMP_32mV_us = 0, /* Default */
-	MAX8952_RAMP_16mV_us,
-	MAX8952_RAMP_8mV_us,
-	MAX8952_RAMP_4mV_us,
-	MAX8952_RAMP_2mV_us,
-	MAX8952_RAMP_1mV_us,
-	MAX8952_RAMP_0_5mV_us,
-	MAX8952_RAMP_0_25mV_us,
-};
-
-#define MAX8952_NUM_DVS_MODE	4
-
-struct max8952_platform_data {
-	int gpio_vid0;
-	int gpio_vid1;
-	int gpio_en;
-
-	u8 default_mode;
-	u8 dvs_mode[MAX8952_NUM_DVS_MODE]; /* MAX8952_DVS_MODEx_XXXXmV */
-
-	u8 sync_freq;
-	u8 ramp_speed;
-
-	struct regulator_init_data reg_data;
-};
-
-
-#endif /* REGULATOR_MAX8952 */
-- 
1.6.2.5




More information about the linux-arm-kernel mailing list