Re: [PATCH 0/4]-V3 TPS6507x MFD driver

Previous thread: Re: [patch v2] acpi_pad: "processor_aggregator" name too long by Shaohua Li on Monday, April 5, 2010 - 6:21 pm. (1 message)

Next thread: [PATCH] IPVS: replace sprintf to snprintf to avoid stack buffer overflow by wzt.wzt on Monday, April 5, 2010 - 7:50 pm. (7 messages)
From: Todd Fischer
Date: Monday, April 5, 2010 - 7:23 pm

This is the third posting of the TPS6507x driver set.  I have
resolved the concurrent access issue identified by Mark Brown.
Instead of using a mutex, I used the i2c_transfer() as done in
the similar routine in the wm8400-core.c file.

The TPS6507x family of Texas Instruments power management ICs (pmic) are
multi-function chips that include voltage regulation and touch screen
controller capabilities.  This patch set adds a TPS6507x multi-function
device driver and change the TPS6507x regulator driver to use the
TPS6507x MFD driver instead of interacting with the chip directly.  The
changes are needed before a touch screen driver can be added.

The patch set applies cleanly to the MFD repository:
git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6.git  If the
MFD and voltage regulator maintainer would prefer I post patches for a
different repository, please let me know.
--

From: Todd Fischer
Date: Monday, April 5, 2010 - 7:23 pm

Move from using tps or tsp6507x to tps6057x_pmic in a consistent manner.

Signed-off-by: Todd Fischer <todd.fischer@ridgerun.com>
---
 drivers/regulator/tps6507x-regulator.c |  172 ++++++++++++++++----------------
 1 files changed, 87 insertions(+), 85 deletions(-)

diff --git a/drivers/regulator/tps6507x-regulator.c b/drivers/regulator/tps6507x-regulator.c
index becf652..86f2e05 100644
--- a/drivers/regulator/tps6507x-regulator.c
+++ b/drivers/regulator/tps6507x-regulator.c
@@ -103,7 +103,7 @@ struct tps_info {
 	const u16 *table;
 };
 
-struct tps_pmic {
+struct tps6507x_pmic {
 	struct regulator_desc desc[TPS6507X_NUM_REGULATOR];
 	struct i2c_client *client;
 	struct regulator_dev *rdev[TPS6507X_NUM_REGULATOR];
@@ -111,23 +111,23 @@ struct tps_pmic {
 	struct mutex io_lock;
 };
 
-static inline int tps_6507x_read(struct tps_pmic *tps, u8 reg)
+static inline int tps6507x_pmic_read(struct tps6507x_pmic *tps, u8 reg)
 {
 	return i2c_smbus_read_byte_data(tps->client, reg);
 }
 
-static inline int tps_6507x_write(struct tps_pmic *tps, u8 reg, u8 val)
+static inline int tps6507x_pmic_write(struct tps6507x_pmic *tps, u8 reg, u8 val)
 {
 	return i2c_smbus_write_byte_data(tps->client, reg, val);
 }
 
-static int tps_6507x_set_bits(struct tps_pmic *tps, u8 reg, u8 mask)
+static int tps6507x_pmic_set_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask)
 {
 	int err, data;
 
 	mutex_lock(&tps->io_lock);
 
-	data = tps_6507x_read(tps, reg);
+	data = tps6507x_pmic_read(tps, reg);
 	if (data < 0) {
 		dev_err(&tps->client->dev, "Read from reg 0x%x failed\n", reg);
 		err = data;
@@ -135,7 +135,7 @@ static int tps_6507x_set_bits(struct tps_pmic *tps, u8 reg, u8 mask)
 	}
 
 	data |= mask;
-	err = tps_6507x_write(tps, reg, data);
+	err = tps6507x_pmic_write(tps, reg, data);
 	if (err)
 		dev_err(&tps->client->dev, "Write for reg 0x%x failed\n", reg);
 
@@ -144,13 +144,13 @@ out:
 	return err;
 }
 
-static int tps_6507x_clear_bits(struct tps_pmic *tps, u8 reg, u8 ...

Add MFD driver for TPS6507x family of multi-function chips.  Move TPS6507x 
regulator driver from being stand-alone driver to using the MFD TPS6507x driver.

Signed-off-by: Todd Fischer <todd.fischer@ridgerun.com>
---
 drivers/mfd/Kconfig                    |   12 +++
 drivers/mfd/Makefile                   |    3 +-
 drivers/mfd/tps6507x.c                 |  155 ++++++++++++++++++++++++++++++++
 drivers/regulator/tps6507x-regulator.c |  153 +++++++++++++++----------------
 include/linux/mfd/tps6507x.h           |   22 +++++
 5 files changed, 265 insertions(+), 80 deletions(-)
 create mode 100644 drivers/mfd/tps6507x.c

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 2a5a0b7..1e301ad 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -111,6 +111,18 @@ config TPS65010
 	  This driver can also be built as a module.  If so, the module
 	  will be called tps65010.
 
+config TPS6507X
+	tristate "TPS6507x Power Management / Touch Screen chips"
+	select MFD_CORE
+	depends on I2C
+	help
+	  If you say yes here you get support for the TPS6507x series of
+	  Power Management / Touch Screen chips.  These include voltage
+	  regulators, lithium ion/polymer battery charging, touch screen
+	  and other features that are often used in portable devices.
+	  This driver can also be built as a module.  If so, the module
+	  will be called tps6507x.
+
 config MENELAUS
 	bool "Texas Instruments TWL92330/Menelaus PM chip"
 	depends on I2C=y && ARCH_OMAP2
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 22715ad..2bebc95 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_MFD_WM8350_I2C)	+= wm8350-i2c.o
 obj-$(CONFIG_MFD_WM8994)	+= wm8994-core.o
 
 obj-$(CONFIG_TPS65010)		+= tps65010.o
+obj-$(CONFIG_TPS6507X)		+= tps6507x.o
 obj-$(CONFIG_MENELAUS)		+= menelaus.o
 
 obj-$(CONFIG_TWL4030_CORE)	+= twl-core.o twl4030-irq.o twl6030-irq.o
@@ -62,4 +63,4 @@ obj-$(CONFIG_AB3100_OTP)	+= ab3100-otp.o
 ...

[...]

Not sure whose tree this is queued in currently, but testing with

Need an #include <linux/slab.h> here for kfree and kzalloc

Kevin
--


Hi Kevin,

This is fixed in the MFD tree.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--

From: Todd Fischer
Date: Monday, April 5, 2010 - 7:23 pm

Other sub-drivers for the TPS6507x chip will need to use register 
definition so move it out of the source file and into a header file.

Signed-off-by: Todd Fischer <todd.fischer@ridgerun.com>
---
 drivers/regulator/tps6507x-regulator.c |   60 +--------------
 include/linux/mfd/tps6507x.h           |  134 ++++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+), 59 deletions(-)
 create mode 100644 include/linux/mfd/tps6507x.h

diff --git a/drivers/regulator/tps6507x-regulator.c b/drivers/regulator/tps6507x-regulator.c
index c2a9539..91172e3 100644
--- a/drivers/regulator/tps6507x-regulator.c
+++ b/drivers/regulator/tps6507x-regulator.c
@@ -24,65 +24,7 @@
 #include <linux/regulator/machine.h>
 #include <linux/i2c.h>
 #include <linux/delay.h>
-
-/* Register definitions */
-#define	TPS6507X_REG_PPATH1				0X01
-#define	TPS6507X_REG_INT				0X02
-#define	TPS6507X_REG_CHGCONFIG0				0X03
-#define	TPS6507X_REG_CHGCONFIG1				0X04
-#define	TPS6507X_REG_CHGCONFIG2				0X05
-#define	TPS6507X_REG_CHGCONFIG3				0X06
-#define	TPS6507X_REG_REG_ADCONFIG			0X07
-#define	TPS6507X_REG_TSCMODE				0X08
-#define	TPS6507X_REG_ADRESULT_1				0X09
-#define	TPS6507X_REG_ADRESULT_2				0X0A
-#define	TPS6507X_REG_PGOOD				0X0B
-#define	TPS6507X_REG_PGOODMASK				0X0C
-#define	TPS6507X_REG_CON_CTRL1				0X0D
-#define	TPS6507X_REG_CON_CTRL2				0X0E
-#define	TPS6507X_REG_CON_CTRL3				0X0F
-#define	TPS6507X_REG_DEFDCDC1				0X10
-#define	TPS6507X_REG_DEFDCDC2_LOW			0X11
-#define	TPS6507X_REG_DEFDCDC2_HIGH			0X12
-#define	TPS6507X_REG_DEFDCDC3_LOW			0X13
-#define	TPS6507X_REG_DEFDCDC3_HIGH			0X14
-#define	TPS6507X_REG_DEFSLEW				0X15
-#define	TPS6507X_REG_LDO_CTRL1				0X16
-#define	TPS6507X_REG_DEFLDO2				0X17
-#define	TPS6507X_REG_WLED_CTRL1				0X18
-#define	TPS6507X_REG_WLED_CTRL2				0X19
-
-/* CON_CTRL1 bitfields ...
From: Todd Fischer
Date: Monday, April 5, 2010 - 7:23 pm

Add mfd structure which refrences sub-driver initialization data. For example,
for a giving hardware implementation, the voltage regulator sub-driver
initialization data provides the mapping betten a voltage regulator and what
the output voltage is being used for.

Signed-off-by: Todd Fischer <todd.fischer@ridgerun.com>
---
 arch/arm/mach-davinci/board-da850-evm.c |    7 ++++++-
 drivers/regulator/tps6507x-regulator.c  |   14 ++++++++++++--
 include/linux/mfd/tps6507x.h            |   11 +++++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 411284d..d059924 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -17,6 +17,7 @@
 #include <linux/i2c.h>
 #include <linux/i2c/at24.h>
 #include <linux/i2c/pca953x.h>
+#include <linux/mfd/tps6507x.h>
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
 #include <linux/mtd/mtd.h>
@@ -533,10 +534,14 @@ struct regulator_init_data tps65070_regulator_data[] = {
 	},
 };
 
+static struct tps6507x_board tps_board = {
+	.tps6507x_pmic_init_data = &tps65070_regulator_data[0],
+};
+
 static struct i2c_board_info __initdata da850evm_tps65070_info[] = {
 	{
 		I2C_BOARD_INFO("tps6507x", 0x48),
-		.platform_data = &tps65070_regulator_data[0],
+		.platform_data = &tps_board,
 	},
 };
 
diff --git a/drivers/regulator/tps6507x-regulator.c b/drivers/regulator/tps6507x-regulator.c
index 91172e3..becf652 100644
--- a/drivers/regulator/tps6507x-regulator.c
+++ b/drivers/regulator/tps6507x-regulator.c
@@ -488,6 +488,7 @@ static int __devinit tps_6507x_probe(struct i2c_client *client,
 	struct regulator_init_data *init_data;
 	struct regulator_dev *rdev;
 	struct tps_pmic *tps;
+	struct tps6507x_board *tps_board;
 	int i;
 	int error;
 
@@ -496,12 +497,21 @@ static int __devinit tps_6507x_probe(struct i2c_client *client,
 		return -EIO;
 
 	/**
+	 * tps_board points to ...
From: Mark Brown
Date: Tuesday, April 6, 2010 - 3:51 am

All

Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

When reposting a patch series that has previously been reviewed it's
useful to record any acks and similar that were given for patches that
have been reposted unmodified - this makes life easier for reviewers
since it saves having to re-review previously posted patches.
--

From: Liam Girdwood
Date: Tuesday, April 6, 2010 - 4:05 am

Hi Samuel,

Please feel free to upstream via MFD.


Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>

-- 
Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.
http://www.slimlogic.co.uk

--

From: Samuel Ortiz
Date: Wednesday, April 7, 2010 - 1:43 am

Hi Todd,

All 4 patches applied to my for-next branch.
Some nit picking advices for your future patches:
- Include the Signed-off-by and Acked-by you collect along the review cycles.
- Have shorter patch subject, they typically are less than 80 chars.
- Describe the changes when moving from patchset vN to patchset vN+1. Also we
prefer "[PATCH vN]" to "[PATCH]-vN", it makes our life easier when applying
your patches.

Thanks a lot for your work.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
--

Previous thread: Re: [patch v2] acpi_pad: "processor_aggregator" name too long by Shaohua Li on Monday, April 5, 2010 - 6:21 pm. (1 message)

Next thread: [PATCH] IPVS: replace sprintf to snprintf to avoid stack buffer overflow by wzt.wzt on Monday, April 5, 2010 - 7:50 pm. (7 messages)