All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <201102221423.45932.marc@cpdesign.com.au>

diff --git a/a/1.txt b/N1/1.txt
index c8ac7ab..3a1250a 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -31,3 +31,32 @@ Cheers
 Marc
 
 [1] https://patchwork.kernel.org/patch/449541/
+
+-------------- next part --------------
+A non-text attachment was scrubbed...
+Name: v4-1-4-mc13xxx-core-Prepare-for-separate-spi-and-i2c-backends..patch
+Type: text/x-patch
+Size: 11185 bytes
+Desc: not available
+URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0004.bin>
+-------------- next part --------------
+A non-text attachment was scrubbed...
+Name: v4-2-4-mc13xxx-core-Kconfig-Config-menu-driven-by-specific-IC-type.patch
+Type: text/x-patch
+Size: 2740 bytes
+Desc: not available
+URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0005.bin>
+-------------- next part --------------
+A non-text attachment was scrubbed...
+Name: v4-3-4-mc13xxx-core-Move-spi-specific-code-into-separate-module..patch
+Type: text/x-patch
+Size: 10876 bytes
+Desc: not available
+URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0006.bin>
+-------------- next part --------------
+A non-text attachment was scrubbed...
+Name: v4-4-4-mc13xxx-core-Add-i2c-driver.patch
+Type: text/x-patch
+Size: 5118 bytes
+Desc: not available
+URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0007.bin>
diff --git a/a/2.hdr b/a/2.hdr
deleted file mode 100644
index 839ea8a..0000000
--- a/a/2.hdr
+++ /dev/null
@@ -1,6 +0,0 @@
-Content-Type: text/x-patch;
-  charset="UTF-8";
-  name="v4-1-4-mc13xxx-core-Prepare-for-separate-spi-and-i2c-backends..patch"
-Content-Transfer-Encoding: quoted-printable
-Content-Disposition: attachment;
-	filename="v4-1-4-mc13xxx-core-Prepare-for-separate-spi-and-i2c-backends..patch"
diff --git a/a/2.txt b/a/2.txt
deleted file mode 100644
index fbe0bde..0000000
--- a/a/2.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-From patchwork Tue Jan  4 05:34:56 2011
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,1/4] mc13xxx-core: Prepare for separate spi and i2c backends.
-Date: Tue, 04 Jan 2011 05:34:56 -0000
-From: Marc Reilly <marc@cpdesign.com.au>
-X-Patchwork-Id: 449541
-Message-Id: <1294119299-18352-2-git-send-email-marc@cpdesign.com.au>
-To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de
-Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,
- Marc Reilly <marc@cpdesign.com.au>
-
-This patch abstracts the bus specific operations from the driver core.
-Read and write handlers are introduced and generic initialization is
-consolidated into mc13xxx_comon_init. The irq member is removed because
-it is unused.
-
-Signed-off-by: Marc Reilly <marc@cpdesign.com.au>
-
----
-drivers/mfd/mc13xxx-core.c  |  158 +++++++++++++++++++++++++-----------------
- include/linux/mfd/mc13xxx.h |    5 ++
- 2 files changed, 99 insertions(+), 64 deletions(-)
-
-diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
-index a2ac2ed..d1f1d7b 100644
---- a/drivers/mfd/mc13xxx-core.c
-+++ b/drivers/mfd/mc13xxx-core.c
-@@ -19,10 +19,22 @@
- #include <linux/mfd/core.h>
- #include <linux/mfd/mc13xxx.h>
- 
-+enum mc13xxx_id {
-+	MC13XXX_ID_MC13783,
-+	MC13XXX_ID_MC13892,
-+	MC13XXX_ID_INVALID,
-+};
-+
- struct mc13xxx {
- 	struct spi_device *spidev;
-+
-+	struct device *dev;
-+	enum mc13xxx_id ictype;
-+
- 	struct mutex lock;
--	int irq;
-+
-+	int (*read_dev)(struct mc13xxx *, unsigned int, u32 *);
-+	int (*write_dev)(struct mc13xxx *, unsigned int, u32);
- 
- 	irq_handler_t irqhandler[MC13XXX_NUM_IRQ];
- 	void *irqdata[MC13XXX_NUM_IRQ];
-@@ -150,36 +162,32 @@ EXPORT_SYMBOL(mc13783_to_mc13xxx);
- void mc13xxx_lock(struct mc13xxx *mc13xxx)
- {
- 	if (!mutex_trylock(&mc13xxx->lock)) {
--		dev_dbg(&mc13xxx->spidev->dev, "wait for %s from %pf\n",
-+		dev_dbg(mc13xxx->dev, "wait for %s from %pf\n",
- 				__func__, __builtin_return_address(0));
- 
- 		mutex_lock(&mc13xxx->lock);
- 	}
--	dev_dbg(&mc13xxx->spidev->dev, "%s from %pf\n",
-+	dev_dbg(mc13xxx->dev, "%s from %pf\n",
- 			__func__, __builtin_return_address(0));
- }
- EXPORT_SYMBOL(mc13xxx_lock);
- 
- void mc13xxx_unlock(struct mc13xxx *mc13xxx)
- {
--	dev_dbg(&mc13xxx->spidev->dev, "%s from %pf\n",
-+	dev_dbg(mc13xxx->dev, "%s from %pf\n",
- 			__func__, __builtin_return_address(0));
- 	mutex_unlock(&mc13xxx->lock);
- }
- EXPORT_SYMBOL(mc13xxx_unlock);
- 
- #define MC13XXX_REGOFFSET_SHIFT 25
--int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)
-+static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,
-+				unsigned int offset, u32 *val)
- {
- 	struct spi_transfer t;
- 	struct spi_message m;
- 	int ret;
- 
--	BUG_ON(!mutex_is_locked(&mc13xxx->lock));
--
--	if (offset > MC13XXX_NUMREGS)
--		return -EINVAL;
--
- 	*val = offset << MC13XXX_REGOFFSET_SHIFT;
- 
- 	memset(&t, 0, sizeof(t));
-@@ -201,26 +209,33 @@ int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)
- 
- 	*val &= 0xffffff;
- 
--	dev_vdbg(&mc13xxx->spidev->dev, "[0x%02x] -> 0x%06x\n", offset, *val);
--
- 	return 0;
- }
--EXPORT_SYMBOL(mc13xxx_reg_read);
- 
--int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)
-+int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)
- {
--	u32 buf;
--	struct spi_transfer t;
--	struct spi_message m;
- 	int ret;
- 
- 	BUG_ON(!mutex_is_locked(&mc13xxx->lock));
- 
--	dev_vdbg(&mc13xxx->spidev->dev, "[0x%02x] <- 0x%06x\n", offset, val);
--
--	if (offset > MC13XXX_NUMREGS || val > 0xffffff)
-+	if (offset > MC13XXX_NUMREGS)
- 		return -EINVAL;
- 
-+	ret = mc13xxx->read_dev(mc13xxx, offset, val);
-+	dev_vdbg(mc13xxx->dev, "[0x%02x] -> 0x%06x\n", offset, *val);
-+
-+	return ret;
-+}
-+EXPORT_SYMBOL(mc13xxx_reg_read);
-+
-+static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,
-+		u32 val)
-+{
-+	u32 buf;
-+	struct spi_transfer t;
-+	struct spi_message m;
-+	int ret;
-+
- 	buf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;
- 
- 	memset(&t, 0, sizeof(t));
-@@ -241,6 +256,18 @@ int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)
- 
- 	return 0;
- }
-+
-+int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)
-+{
-+	BUG_ON(!mutex_is_locked(&mc13xxx->lock));
-+
-+	dev_vdbg(mc13xxx->dev, "[0x%02x] <- 0x%06x\n", offset, val);
-+
-+	if (offset > MC13XXX_NUMREGS || val > 0xffffff)
-+		return -EINVAL;
-+
-+	return mc13xxx->write_dev(mc13xxx, offset, val);
-+}
- EXPORT_SYMBOL(mc13xxx_reg_write);
- 
- int mc13xxx_reg_rmw(struct mc13xxx *mc13xxx, unsigned int offset,
-@@ -445,7 +472,7 @@ static int mc13xxx_irq_handle(struct mc13xxx *mc13xxx,
- 			if (handled == IRQ_HANDLED)
- 				num_handled++;
- 		} else {
--			dev_err(&mc13xxx->spidev->dev,
-+			dev_err(mc13xxx->dev,
- 					"BUG: irq %u but no handler\n",
- 					baseirq + irq);
- 
-@@ -481,25 +508,23 @@ static irqreturn_t mc13xxx_irq_thread(int irq, void *data)
- 	return IRQ_RETVAL(handled);
- }
- 
--enum mc13xxx_id {
--	MC13XXX_ID_MC13783,
--	MC13XXX_ID_MC13892,
--	MC13XXX_ID_INVALID,
--};
--
- const char *mc13xxx_chipname[] = {
- 	[MC13XXX_ID_MC13783] = "mc13783",
- 	[MC13XXX_ID_MC13892] = "mc13892",
- };
- 
- #define maskval(reg, mask)	(((reg) & (mask)) >> __ffs(mask))
--static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)
-+static int mc13xxx_identify(struct mc13xxx *mc13xxx)
- {
- 	u32 icid;
- 	u32 revision;
--	const char *name;
- 	int ret;
- 
-+	/*
-+	 * Get the generation ID from register 46, as apparently some older
-+	 * IC revisions only have this info at this location. Newer ICs seem to
-+	 * have both.
-+	 */
- 	ret = mc13xxx_reg_read(mc13xxx, 46, &icid);
- 	if (ret)
- 		return ret;
-@@ -508,26 +533,23 @@ static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)
- 
- 	switch (icid) {
- 	case 2:
--		*id = MC13XXX_ID_MC13783;
--		name = "mc13783";
-+		mc13xxx->ictype = MC13XXX_ID_MC13783;
- 		break;
- 	case 7:
--		*id = MC13XXX_ID_MC13892;
--		name = "mc13892";
-+		mc13xxx->ictype = MC13XXX_ID_MC13892;
- 		break;
- 	default:
--		*id = MC13XXX_ID_INVALID;
-+		mc13xxx->ictype = MC13XXX_ID_INVALID;
- 		break;
- 	}
- 
--	if (*id == MC13XXX_ID_MC13783 || *id == MC13XXX_ID_MC13892) {
-+	if (mc13xxx->ictype == MC13XXX_ID_MC13783 ||
-+			mc13xxx->ictype == MC13XXX_ID_MC13892) {
- 		ret = mc13xxx_reg_read(mc13xxx, MC13XXX_REVISION, &revision);
--		if (ret)
--			return ret;
- 
--		dev_info(&mc13xxx->spidev->dev, "%s: rev: %d.%d, "
-+		dev_info(mc13xxx->dev, "%s: rev: %d.%d, "
- 				"fin: %d, fab: %d, icid: %d/%d\n",
--				mc13xxx_chipname[*id],
-+				mc13xxx_chipname[mc13xxx->ictype],
- 				maskval(revision, MC13XXX_REVISION_REVFULL),
- 				maskval(revision, MC13XXX_REVISION_REVMETAL),
- 				maskval(revision, MC13XXX_REVISION_FIN),
-@@ -536,26 +558,12 @@ static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)
- 				maskval(revision, MC13XXX_REVISION_ICIDCODE));
- 	}
- 
--	if (*id != MC13XXX_ID_INVALID) {
--		const struct spi_device_id *devid =
--			spi_get_device_id(mc13xxx->spidev);
--		if (!devid || devid->driver_data != *id)
--			dev_warn(&mc13xxx->spidev->dev, "device id doesn't "
--					"match auto detection!\n");
--	}
--
--	return 0;
-+	return (mc13xxx->ictype == MC13XXX_ID_INVALID) ? -ENODEV : 0;
- }
- 
- static const char *mc13xxx_get_chipname(struct mc13xxx *mc13xxx)
- {
--	const struct spi_device_id *devid =
--		spi_get_device_id(mc13xxx->spidev);
--
--	if (!devid)
--		return NULL;
--
--	return mc13xxx_chipname[devid->driver_data];
-+	return mc13xxx_chipname[mc13xxx->ictype];
- }
- 
- #include <linux/mfd/mc13783.h>
-@@ -563,7 +571,7 @@ static const char *mc13xxx_get_chipname(struct mc13xxx *mc13xxx)
- int mc13xxx_get_flags(struct mc13xxx *mc13xxx)
- {
- 	struct mc13xxx_platform_data *pdata =
--		dev_get_platdata(&mc13xxx->spidev->dev);
-+		dev_get_platdata(mc13xxx->dev);
- 
- 	return pdata->flags;
- }
-@@ -601,7 +609,7 @@ int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,
- 	};
- 	init_completion(&adcdone_data.done);
- 
--	dev_dbg(&mc13xxx->spidev->dev, "%s\n", __func__);
-+	dev_dbg(mc13xxx->dev, "%s\n", __func__);
- 
- 	mc13xxx_lock(mc13xxx);
- 
-@@ -643,7 +651,7 @@ int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,
- 		return -EINVAL;
- 	}
- 
--	dev_dbg(&mc13783->mc13xxx.spidev->dev, "%s: request irq\n", __func__);
-+	dev_dbg(mc13783->mc13xxx.dev, "%s: request irq\n", __func__);
- 	mc13xxx_irq_request(mc13xxx, MC13783_IRQ_ADCDONE,
- 			mc13783_handler_adcdone, __func__, &adcdone_data);
- 	mc13xxx_irq_ack(mc13xxx, MC13783_IRQ_ADCDONE);
-@@ -701,7 +709,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx,
- 	if (!cell.name)
- 		return -ENOMEM;
- 
--	return mfd_add_devices(&mc13xxx->spidev->dev, -1, &cell, 1, NULL, 0);
-+	return mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0);
- }
- 
- static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *format)
-@@ -713,7 +721,6 @@ static int mc13xxx_probe(struct spi_device *spi)
- {
- 	struct mc13xxx *mc13xxx;
- 	struct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);
--	enum mc13xxx_id id;
- 	int ret;
- 
- 	mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
-@@ -725,13 +732,36 @@ static int mc13xxx_probe(struct spi_device *spi)
- 	spi->bits_per_word = 32;
- 	spi_setup(spi);
- 
-+	mc13xxx->dev = &spi->dev;
- 	mc13xxx->spidev = spi;
-+	mc13xxx->read_dev = mc13xxx_spi_reg_read;
-+	mc13xxx->write_dev = mc13xxx_spi_reg_write;
-+
-+	ret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);
-+
-+	if (ret) {
-+		dev_set_drvdata(&spi->dev, NULL);
-+	} else {
-+		const struct spi_device_id *devid =
-+			spi_get_device_id(mc13xxx->spidev);
-+		if (!devid || devid->driver_data != mc13xxx->ictype)
-+			dev_warn(mc13xxx->dev,
-+				"device id doesn't match auto detection!\n");
-+	}
-+
-+	return ret;
-+}
-+
-+int mc13xxx_common_init(struct mc13xxx *mc13xxx,
-+		struct mc13xxx_platform_data *pdata, int irq)
-+{
-+	int ret;
- 
- 	mutex_init(&mc13xxx->lock);
- 	mc13xxx_lock(mc13xxx);
- 
--	ret = mc13xxx_identify(mc13xxx, &id);
--	if (ret || id == MC13XXX_ID_INVALID)
-+	ret = mc13xxx_identify(mc13xxx);
-+	if (ret)
- 		goto err_revision;
- 
- 	/* mask all irqs */
-@@ -743,14 +773,13 @@ static int mc13xxx_probe(struct spi_device *spi)
- 	if (ret)
- 		goto err_mask;
- 
--	ret = request_threaded_irq(spi->irq, NULL, mc13xxx_irq_thread,
-+	ret = request_threaded_irq(irq, NULL, mc13xxx_irq_thread,
- 			IRQF_ONESHOT | IRQF_TRIGGER_HIGH, "mc13xxx", mc13xxx);
- 
- 	if (ret) {
- err_mask:
- err_revision:
- 		mutex_unlock(&mc13xxx->lock);
--		dev_set_drvdata(&spi->dev, NULL);
- 		kfree(mc13xxx);
- 		return ret;
- 	}
-@@ -786,6 +815,7 @@ err_revision:
- 
- 	return 0;
- }
-+EXPORT_SYMBOL_GPL(mc13xxx_common_init);
- 
- static int __devexit mc13xxx_remove(struct spi_device *spi)
- {
-diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h
-index a1d391b..f5d277d 100644
---- a/include/linux/mfd/mc13xxx.h
-+++ b/include/linux/mfd/mc13xxx.h
-@@ -21,6 +21,11 @@ int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val);
- int mc13xxx_reg_rmw(struct mc13xxx *mc13xxx, unsigned int offset,
- 		u32 mask, u32 val);
- 
-+struct mc13xxx_platform_data;
-+
-+int mc13xxx_common_init(struct mc13xxx *mc13xxx,
-+		struct mc13xxx_platform_data *pdata, int irq);
-+
- int mc13xxx_get_flags(struct mc13xxx *mc13xxx);
- 
- int mc13xxx_irq_request(struct mc13xxx *mc13xxx, int irq,
diff --git a/a/3.hdr b/a/3.hdr
deleted file mode 100644
index 8a504e8..0000000
--- a/a/3.hdr
+++ /dev/null
@@ -1,6 +0,0 @@
-Content-Type: text/x-patch;
-  charset="UTF-8";
-  name="v4-2-4-mc13xxx-core-Kconfig-Config-menu-driven-by-specific-IC-type.patch"
-Content-Transfer-Encoding: quoted-printable
-Content-Disposition: attachment;
-	filename="v4-2-4-mc13xxx-core-Kconfig-Config-menu-driven-by-specific-IC-type.patch"
diff --git a/a/3.txt b/a/3.txt
deleted file mode 100644
index 9985121..0000000
--- a/a/3.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-From patchwork Tue Jan  4 05:34:57 2011
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,
- 2/4] mc13xxx-core: Kconfig: Config menu driven by specific IC type
-Date: Tue, 04 Jan 2011 05:34:57 -0000
-From: Marc Reilly <marc@cpdesign.com.au>
-X-Patchwork-Id: 449531
-Message-Id: <1294119299-18352-3-git-send-email-marc@cpdesign.com.au>
-To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de
-Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,
- Marc Reilly <marc@cpdesign.com.au>
-
-This patch makes config items for the mc13892 and mc13783 distinct and
-splits introduces a separate config item for spi interface support in
-preparation for a separate i2c and spi backend.
-
-The mc13xxx generic core is therefore selected by the spi (or i2c) item:
-having it the other way around doesn't work for other drivers that will
-need to distinguish between mc13783 and mc13892 (at build time).
-
-Signed-off-by: Marc Reilly <marc@cpdesign.com.au>
-
----
-drivers/mfd/Kconfig |   34 +++++++++++++++++++++++++---------
- 1 files changed, 25 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
-index 3a1493b..9ce1d42 100644
---- a/drivers/mfd/Kconfig
-+++ b/drivers/mfd/Kconfig
-@@ -425,20 +425,36 @@ config MFD_PCF50633
- 	  so that function-specific drivers can bind to them.
- 
- config MFD_MC13783
--	tristate
--
--config MFD_MC13XXX
--	tristate "Support Freescale MC13783 and MC13892"
- 	depends on SPI_MASTER
--	select MFD_CORE
--	select MFD_MC13783
-+	select MFD_MC13XXX_SPI
-+	tristate "Support for Freescale MC13783 PMIC"
- 	help
--	  Support for the Freescale (Atlas) PMIC and audio CODECs
--	  MC13783 and MC13892.
--	  This driver provides common support for accessing  the device,
-+	  Support for the Freescale MC13783 PMIC and audio CODEC.
-+	  This driver provides common support for accessing the device,
- 	  additional drivers must be enabled in order to use the
- 	  functionality of the device.
- 
-+config MFD_MC13892
-+	depends on SPI_MASTER || I2C
-+	select MFD_MC13XXX
-+	tristate "Support for Freescale MC13892 PMIC"
-+	help
-+	  Enable support for the Freescale MC13892 PMIC.
-+	  As the MC13892 can connect by either I2C or SPI bus, you will
-+	  also need to select which of these you would like to support.
-+	  Additional drivers must be enabled in order to use the
-+	  functionality of the device.
-+
-+config MFD_MC13XXX
-+	tristate
-+	depends on SPI_MASTER || I2C
-+	select MFD_CORE
-+
-+config MFD_MC13XXX_SPI
-+	tristate "Support Freescale MC13783 and MC13892 via SPI interface"
-+	select MFD_MC13XXX
-+	depends on SPI_MASTER && (MFD_MC13783 || MFD_MC13892)
-+
- config PCF50633_ADC
- 	tristate "Support for NXP PCF50633 ADC"
- 	depends on MFD_PCF50633
diff --git a/a/4.hdr b/a/4.hdr
deleted file mode 100644
index 46dd2e2..0000000
--- a/a/4.hdr
+++ /dev/null
@@ -1,6 +0,0 @@
-Content-Type: text/x-patch;
-  charset="UTF-8";
-  name="v4-3-4-mc13xxx-core-Move-spi-specific-code-into-separate-module..patch"
-Content-Transfer-Encoding: quoted-printable
-Content-Disposition: attachment;
-	filename="v4-3-4-mc13xxx-core-Move-spi-specific-code-into-separate-module..patch"
diff --git a/a/4.txt b/a/4.txt
deleted file mode 100644
index 66f139d..0000000
--- a/a/4.txt
+++ /dev/null
@@ -1,452 +0,0 @@
-From patchwork Tue Jan  4 05:34:58 2011
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,3/4] mc13xxx-core: Move spi specific code into separate module.
-Date: Tue, 04 Jan 2011 05:34:58 -0000
-From: Marc Reilly <marc@cpdesign.com.au>
-X-Patchwork-Id: 449561
-Message-Id: <1294119299-18352-4-git-send-email-marc@cpdesign.com.au>
-To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de
-Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,
- Marc Reilly <marc@cpdesign.com.au>
-
-This patch moves all spi specific code into a new module. The mc13xxx
-struct moves to the include file by necessity.
-
-Signed-off-by: Marc Reilly <marc@cpdesign.com.au>
-
----
-drivers/mfd/Makefile        |    1 +
- drivers/mfd/mc13xxx-core.c  |  166 ------------------------------------------
- drivers/mfd/mc13xxx-spi.c   |  168 +++++++++++++++++++++++++++++++++++++++++++
- include/linux/mfd/mc13xxx.h |   21 ++++++
- 4 files changed, 190 insertions(+), 166 deletions(-)
- create mode 100644 drivers/mfd/mc13xxx-spi.c
-
-diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
-index f54b365..492e881 100644
---- a/drivers/mfd/Makefile
-+++ b/drivers/mfd/Makefile
-@@ -42,6 +42,7 @@ obj-$(CONFIG_TWL4030_CODEC)	+= twl4030-codec.o
- obj-$(CONFIG_TWL6030_PWM)	+= twl6030-pwm.o
- 
- obj-$(CONFIG_MFD_MC13XXX)	+= mc13xxx-core.o
-+obj-$(CONFIG_MFD_MC13XXX_SPI)	+= mc13xxx-spi.o
- 
- obj-$(CONFIG_MFD_CORE)		+= mfd-core.o
- 
-diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
-index d1f1d7b..3201041 100644
---- a/drivers/mfd/mc13xxx-core.c
-+++ b/drivers/mfd/mc13xxx-core.c
-@@ -15,31 +15,9 @@
- #include <linux/platform_device.h>
- #include <linux/mutex.h>
- #include <linux/interrupt.h>
--#include <linux/spi/spi.h>
- #include <linux/mfd/core.h>
- #include <linux/mfd/mc13xxx.h>
- 
--enum mc13xxx_id {
--	MC13XXX_ID_MC13783,
--	MC13XXX_ID_MC13892,
--	MC13XXX_ID_INVALID,
--};
--
--struct mc13xxx {
--	struct spi_device *spidev;
--
--	struct device *dev;
--	enum mc13xxx_id ictype;
--
--	struct mutex lock;
--
--	int (*read_dev)(struct mc13xxx *, unsigned int, u32 *);
--	int (*write_dev)(struct mc13xxx *, unsigned int, u32);
--
--	irq_handler_t irqhandler[MC13XXX_NUM_IRQ];
--	void *irqdata[MC13XXX_NUM_IRQ];
--};
--
- struct mc13783 {
- 	struct mc13xxx mc13xxx;
- 
-@@ -180,38 +158,6 @@ void mc13xxx_unlock(struct mc13xxx *mc13xxx)
- }
- EXPORT_SYMBOL(mc13xxx_unlock);
- 
--#define MC13XXX_REGOFFSET_SHIFT 25
--static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,
--				unsigned int offset, u32 *val)
--{
--	struct spi_transfer t;
--	struct spi_message m;
--	int ret;
--
--	*val = offset << MC13XXX_REGOFFSET_SHIFT;
--
--	memset(&t, 0, sizeof(t));
--
--	t.tx_buf = val;
--	t.rx_buf = val;
--	t.len = sizeof(u32);
--
--	spi_message_init(&m);
--	spi_message_add_tail(&t, &m);
--
--	ret = spi_sync(mc13xxx->spidev, &m);
--
--	/* error in message.status implies error return from spi_sync */
--	BUG_ON(!ret && m.status);
--
--	if (ret)
--		return ret;
--
--	*val &= 0xffffff;
--
--	return 0;
--}
--
- int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)
- {
- 	int ret;
-@@ -228,35 +174,6 @@ int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)
- }
- EXPORT_SYMBOL(mc13xxx_reg_read);
- 
--static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,
--		u32 val)
--{
--	u32 buf;
--	struct spi_transfer t;
--	struct spi_message m;
--	int ret;
--
--	buf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;
--
--	memset(&t, 0, sizeof(t));
--
--	t.tx_buf = &buf;
--	t.rx_buf = &buf;
--	t.len = sizeof(u32);
--
--	spi_message_init(&m);
--	spi_message_add_tail(&t, &m);
--
--	ret = spi_sync(mc13xxx->spidev, &m);
--
--	BUG_ON(!ret && m.status);
--
--	if (ret)
--		return ret;
--
--	return 0;
--}
--
- int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)
- {
- 	BUG_ON(!mutex_is_locked(&mc13xxx->lock));
-@@ -717,41 +634,6 @@ static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *format)
- 	return mc13xxx_add_subdevice_pdata(mc13xxx, format, NULL, 0);
- }
- 
--static int mc13xxx_probe(struct spi_device *spi)
--{
--	struct mc13xxx *mc13xxx;
--	struct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);
--	int ret;
--
--	mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
--	if (!mc13xxx)
--		return -ENOMEM;
--
--	dev_set_drvdata(&spi->dev, mc13xxx);
--	spi->mode = SPI_MODE_0 | SPI_CS_HIGH;
--	spi->bits_per_word = 32;
--	spi_setup(spi);
--
--	mc13xxx->dev = &spi->dev;
--	mc13xxx->spidev = spi;
--	mc13xxx->read_dev = mc13xxx_spi_reg_read;
--	mc13xxx->write_dev = mc13xxx_spi_reg_write;
--
--	ret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);
--
--	if (ret) {
--		dev_set_drvdata(&spi->dev, NULL);
--	} else {
--		const struct spi_device_id *devid =
--			spi_get_device_id(mc13xxx->spidev);
--		if (!devid || devid->driver_data != mc13xxx->ictype)
--			dev_warn(mc13xxx->dev,
--				"device id doesn't match auto detection!\n");
--	}
--
--	return ret;
--}
--
- int mc13xxx_common_init(struct mc13xxx *mc13xxx,
- 		struct mc13xxx_platform_data *pdata, int irq)
- {
-@@ -817,54 +699,6 @@ err_revision:
- }
- EXPORT_SYMBOL_GPL(mc13xxx_common_init);
- 
--static int __devexit mc13xxx_remove(struct spi_device *spi)
--{
--	struct mc13xxx *mc13xxx = dev_get_drvdata(&spi->dev);
--
--	free_irq(mc13xxx->spidev->irq, mc13xxx);
--
--	mfd_remove_devices(&spi->dev);
--
--	kfree(mc13xxx);
--
--	return 0;
--}
--
--static const struct spi_device_id mc13xxx_device_id[] = {
--	{
--		.name = "mc13783",
--		.driver_data = MC13XXX_ID_MC13783,
--	}, {
--		.name = "mc13892",
--		.driver_data = MC13XXX_ID_MC13892,
--	}, {
--		/* sentinel */
--	}
--};
--
--static struct spi_driver mc13xxx_driver = {
--	.id_table = mc13xxx_device_id,
--	.driver = {
--		.name = "mc13xxx",
--		.bus = &spi_bus_type,
--		.owner = THIS_MODULE,
--	},
--	.probe = mc13xxx_probe,
--	.remove = __devexit_p(mc13xxx_remove),
--};
--
--static int __init mc13xxx_init(void)
--{
--	return spi_register_driver(&mc13xxx_driver);
--}
--subsys_initcall(mc13xxx_init);
--
--static void __exit mc13xxx_exit(void)
--{
--	spi_unregister_driver(&mc13xxx_driver);
--}
--module_exit(mc13xxx_exit);
--
- MODULE_DESCRIPTION("Core driver for Freescale MC13XXX PMIC");
- MODULE_AUTHOR("Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>");
- MODULE_LICENSE("GPL v2");
-diff --git a/drivers/mfd/mc13xxx-spi.c b/drivers/mfd/mc13xxx-spi.c
-new file mode 100644
-index 0000000..d8ffff7
---- /dev/null
-+++ b/drivers/mfd/mc13xxx-spi.c
-@@ -0,0 +1,168 @@
-+/*
-+ * Copyright 2009-2010 Pengutronix
-+ * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
-+ *
-+ * loosely based on an earlier driver that has
-+ * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it under
-+ * the terms of the GNU General Public License version 2 as published by the
-+ * Free Software Foundation.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/interrupt.h>
-+#include <linux/spi/spi.h>
-+#include <linux/mfd/core.h>
-+#include <linux/mfd/mc13xxx.h>
-+
-+#define MC13XXX_REGOFFSET_SHIFT 25
-+static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,
-+				unsigned int offset, u32 *val)
-+{
-+	struct spi_transfer t;
-+	struct spi_message m;
-+	int ret;
-+
-+	*val = offset << MC13XXX_REGOFFSET_SHIFT;
-+
-+	memset(&t, 0, sizeof(t));
-+
-+	t.tx_buf = val;
-+	t.rx_buf = val;
-+	t.len = sizeof(u32);
-+
-+	spi_message_init(&m);
-+	spi_message_add_tail(&t, &m);
-+
-+	ret = spi_sync(mc13xxx->spidev, &m);
-+
-+	/* error in message.status implies error return from spi_sync */
-+	BUG_ON(!ret && m.status);
-+
-+	if (ret)
-+		return ret;
-+
-+	*val &= 0xffffff;
-+
-+	return 0;
-+}
-+
-+static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,
-+		u32 val)
-+{
-+	u32 buf;
-+	struct spi_transfer t;
-+	struct spi_message m;
-+	int ret;
-+
-+	buf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;
-+
-+	memset(&t, 0, sizeof(t));
-+
-+	t.tx_buf = &buf;
-+	t.rx_buf = &buf;
-+	t.len = sizeof(u32);
-+
-+	spi_message_init(&m);
-+	spi_message_add_tail(&t, &m);
-+
-+	ret = spi_sync(mc13xxx->spidev, &m);
-+
-+	BUG_ON(!ret && m.status);
-+
-+	if (ret)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+static int mc13xxx_spi_probe(struct spi_device *spi)
-+{
-+	struct mc13xxx *mc13xxx;
-+	struct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);
-+	int ret;
-+
-+	mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
-+	if (!mc13xxx)
-+		return -ENOMEM;
-+
-+	dev_set_drvdata(&spi->dev, mc13xxx);
-+	spi->mode = SPI_MODE_0 | SPI_CS_HIGH;
-+	spi->bits_per_word = 32;
-+	spi_setup(spi);
-+
-+	mc13xxx->dev = &spi->dev;
-+	mc13xxx->spidev = spi;
-+	mc13xxx->read_dev = mc13xxx_spi_reg_read;
-+	mc13xxx->write_dev = mc13xxx_spi_reg_write;
-+
-+	ret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);
-+
-+	if (ret) {
-+		dev_set_drvdata(&spi->dev, NULL);
-+	} else {
-+		const struct spi_device_id *devid =
-+			spi_get_device_id(mc13xxx->spidev);
-+		if (!devid || devid->driver_data != mc13xxx->ictype)
-+			dev_warn(mc13xxx->dev,
-+				"device id doesn't match auto detection!\n");
-+	}
-+
-+	return ret;
-+}
-+
-+static int __devexit mc13xxx_spi_remove(struct spi_device *spi)
-+{
-+	struct mc13xxx *mc13xxx = dev_get_drvdata(&spi->dev);
-+
-+	free_irq(mc13xxx->spidev->irq, mc13xxx);
-+
-+	mfd_remove_devices(&spi->dev);
-+
-+	kfree(mc13xxx);
-+
-+	return 0;
-+}
-+
-+static const struct spi_device_id mc13xxx_device_id[] = {
-+	{
-+		.name = "mc13783",
-+		.driver_data = MC13XXX_ID_MC13783,
-+	}, {
-+		.name = "mc13892",
-+		.driver_data = MC13XXX_ID_MC13892,
-+	}, {
-+		/* sentinel */
-+	}
-+};
-+
-+static struct spi_driver mc13xxx_spi_driver = {
-+	.id_table = mc13xxx_device_id,
-+	.driver = {
-+		.name = "mc13xxx",
-+		.bus = &spi_bus_type,
-+		.owner = THIS_MODULE,
-+	},
-+	.probe = mc13xxx_spi_probe,
-+	.remove = __devexit_p(mc13xxx_spi_remove),
-+};
-+
-+static int __init mc13xxx_spi_init(void)
-+{
-+	return spi_register_driver(&mc13xxx_spi_driver);
-+}
-+subsys_initcall(mc13xxx_spi_init);
-+
-+static void __exit mc13xxx_spi_exit(void)
-+{
-+	spi_unregister_driver(&mc13xxx_spi_driver);
-+}
-+module_exit(mc13xxx_spi_exit);
-+
-+MODULE_DESCRIPTION("Core driver for Freescale MC13XXX PMIC");
-+MODULE_AUTHOR("Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>");
-+MODULE_LICENSE("GPL v2");
-diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h
-index f5d277d..ab7deb3 100644
---- a/include/linux/mfd/mc13xxx.h
-+++ b/include/linux/mfd/mc13xxx.h
-@@ -66,6 +66,27 @@ int mc13xxx_get_flags(struct mc13xxx *mc13xxx);
- 
- #define MC13XXX_NUM_IRQ		46
- 
-+enum mc13xxx_id {
-+	MC13XXX_ID_MC13783,
-+	MC13XXX_ID_MC13892,
-+	MC13XXX_ID_INVALID,
-+};
-+
-+struct mc13xxx {
-+	struct spi_device *spidev;
-+
-+	struct device *dev;
-+	enum mc13xxx_id ictype;
-+
-+	struct mutex lock;
-+
-+	int (*read_dev)(struct mc13xxx *, unsigned int, u32 *);
-+	int (*write_dev)(struct mc13xxx *, unsigned int, u32);
-+
-+	irq_handler_t irqhandler[MC13XXX_NUM_IRQ];
-+	void *irqdata[MC13XXX_NUM_IRQ];
-+};
-+
- struct regulator_init_data;
- 
- struct mc13xxx_regulator_init_data {
diff --git a/a/5.hdr b/a/5.hdr
deleted file mode 100644
index 34efcfe..0000000
--- a/a/5.hdr
+++ /dev/null
@@ -1,6 +0,0 @@
-Content-Type: text/x-patch;
-  charset="UTF-8";
-  name="v4-4-4-mc13xxx-core-Add-i2c-driver.patch"
-Content-Transfer-Encoding: quoted-printable
-Content-Disposition: attachment;
-	filename="v4-4-4-mc13xxx-core-Add-i2c-driver.patch"
diff --git a/a/5.txt b/a/5.txt
deleted file mode 100644
index 6a2f4b2..0000000
--- a/a/5.txt
+++ /dev/null
@@ -1,188 +0,0 @@
-From patchwork Tue Jan  4 05:34:59 2011
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v4,4/4] mc13xxx-core: Add i2c driver
-Date: Tue, 04 Jan 2011 05:34:59 -0000
-From: Marc Reilly <marc@cpdesign.com.au>
-X-Patchwork-Id: 449551
-Message-Id: <1294119299-18352-5-git-send-email-marc@cpdesign.com.au>
-To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de
-Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,
- Marc Reilly <marc@cpdesign.com.au>
-
-Signed-off-by: Marc Reilly <marc@cpdesign.com.au>
-
----
-drivers/mfd/Kconfig         |    5 ++
- drivers/mfd/Makefile        |    1 +
- drivers/mfd/mc13xxx-i2c.c   |  115 +++++++++++++++++++++++++++++++++++++++++++
- include/linux/mfd/mc13xxx.h |    5 ++-
- 4 files changed, 125 insertions(+), 1 deletions(-)
- create mode 100644 drivers/mfd/mc13xxx-i2c.c
-
-diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
-index 9ce1d42..fbbbdaa 100644
---- a/drivers/mfd/Kconfig
-+++ b/drivers/mfd/Kconfig
-@@ -455,6 +455,11 @@ config MFD_MC13XXX_SPI
- 	select MFD_MC13XXX
- 	depends on SPI_MASTER && (MFD_MC13783 || MFD_MC13892)
- 
-+config MFD_MC13XXX_I2C
-+	tristate "Support Freescale MC13892 via I2C interface"
-+	select MFD_MC13XXX
-+	depends on I2C && MFD_MC13892
-+
- config PCF50633_ADC
- 	tristate "Support for NXP PCF50633 ADC"
- 	depends on MFD_PCF50633
-diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
-index 492e881..b7d774f 100644
---- a/drivers/mfd/Makefile
-+++ b/drivers/mfd/Makefile
-@@ -43,6 +43,7 @@ obj-$(CONFIG_TWL6030_PWM)	+= twl6030-pwm.o
- 
- obj-$(CONFIG_MFD_MC13XXX)	+= mc13xxx-core.o
- obj-$(CONFIG_MFD_MC13XXX_SPI)	+= mc13xxx-spi.o
-+obj-$(CONFIG_MFD_MC13XXX_I2C)	+= mc13xxx-i2c.o
- 
- obj-$(CONFIG_MFD_CORE)		+= mfd-core.o
- 
-diff --git a/drivers/mfd/mc13xxx-i2c.c b/drivers/mfd/mc13xxx-i2c.c
-new file mode 100644
-index 0000000..b3f2f2b
---- /dev/null
-+++ b/drivers/mfd/mc13xxx-i2c.c
-@@ -0,0 +1,115 @@
-+/*
-+ * Copyright 2009-2010 Creative Product Design
-+ * Marc Reilly marc@cpdesign.com.au
-+ *
-+ * This program is free software; you can redistribute it and/or modify it under
-+ * the terms of the GNU General Public License version 2 as published by the
-+ * Free Software Foundation.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/mfd/core.h>
-+#include <linux/mfd/mc13xxx.h>
-+#include <linux/i2c.h>
-+
-+static int mc13xxx_i2c_reg_read(struct mc13xxx *mc13xxx, unsigned int offset,
-+		u32 *val)
-+{
-+	int ret;
-+	unsigned char buf[3] = {0, 0, 0};
-+
-+	ret = i2c_smbus_read_i2c_block_data(mc13xxx->i2cclient,
-+			offset, 3, buf);
-+	*val = buf[0] << 16 | buf[1] << 8 | buf[2];
-+
-+	return ret == 3 ? 0 : ret;
-+}
-+
-+static int mc13xxx_i2c_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,
-+		u32 val)
-+{
-+	int ret;
-+	unsigned char buf[3];
-+
-+	buf[0] = (val >> 16) & 0xff;
-+	buf[1] = (val >> 8) & 0xff;
-+	buf[2] = val & 0xff;
-+
-+	ret = i2c_smbus_write_i2c_block_data(mc13xxx->i2cclient,
-+			offset, 3, buf);
-+
-+	return ret;
-+}
-+
-+static int mc13xxx_i2c_probe(struct i2c_client *client,
-+		const struct i2c_device_id *id)
-+{
-+	struct mc13xxx *mc13xxx;
-+	struct mc13xxx_platform_data *pdata = dev_get_platdata(&client->dev);
-+	int ret;
-+
-+	mc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);
-+	if (!mc13xxx)
-+		return -ENOMEM;
-+
-+	dev_set_drvdata(&client->dev, mc13xxx);
-+	mc13xxx->dev = &client->dev;
-+	mc13xxx->i2cclient = client;
-+	mc13xxx->read_dev = mc13xxx_i2c_reg_read;
-+	mc13xxx->write_dev = mc13xxx_i2c_reg_write;
-+
-+	ret = mc13xxx_common_init(mc13xxx, pdata, client->irq);
-+
-+	if (ret == 0 && (id->driver_data != mc13xxx->ictype))
-+		dev_warn(mc13xxx->dev,
-+				"device id doesn't match auto detection!\n");
-+
-+	return ret;
-+}
-+
-+static int __devexit mc13xxx_i2c_remove(struct i2c_client *client)
-+{
-+	struct mc13xxx *mc13xxx = dev_get_drvdata(&client->dev);
-+
-+	free_irq(client->irq, mc13xxx);
-+
-+	mfd_remove_devices(&client->dev);
-+
-+	kfree(mc13xxx);
-+
-+	return 0;
-+}
-+
-+static const struct i2c_device_id mc13xxx_i2c_idtable[] = {
-+	{"mc13892", MC13XXX_ID_MC13892},
-+	{ }
-+};
-+
-+static struct i2c_driver mc13xxx_i2c_driver = {
-+	.driver = {
-+		.owner = THIS_MODULE,
-+		.name = "mc13xxx-i2c"
-+	},
-+	.id_table = mc13xxx_i2c_idtable,
-+	.probe = mc13xxx_i2c_probe,
-+	.remove = __devexit_p(mc13xxx_i2c_remove),
-+};
-+
-+static int __init mc13xxx_i2c_init(void)
-+{
-+	return i2c_add_driver(&mc13xxx_i2c_driver);
-+}
-+subsys_initcall(mc13xxx_i2c_init);
-+
-+static void __exit mc13xxx_i2c_exit(void)
-+{
-+	i2c_del_driver(&mc13xxx_i2c_driver);
-+}
-+module_exit(mc13xxx_i2c_exit);
-+
-+MODULE_DESCRIPTION("i2c driver for Freescale MC13XXX PMIC");
-+MODULE_AUTHOR("Marc Reilly <marc@cpdesign.com.au");
-+MODULE_LICENSE("GPL v2");
-diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h
-index ab7deb3..c5ab08b 100644
---- a/include/linux/mfd/mc13xxx.h
-+++ b/include/linux/mfd/mc13xxx.h
-@@ -73,7 +73,10 @@ enum mc13xxx_id {
- };
- 
- struct mc13xxx {
--	struct spi_device *spidev;
-+	union {
-+		struct spi_device *spidev;
-+		struct i2c_client *i2cclient;
-+	};
- 
- 	struct device *dev;
- 	enum mc13xxx_id ictype;
diff --git a/a/6.hdr b/a/6.hdr
deleted file mode 100644
index 4b86001..0000000
--- a/a/6.hdr
+++ /dev/null
@@ -1,4 +0,0 @@
-Content-Type: text/plain; charset="us-ascii"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
diff --git a/a/6.txt b/a/6.txt
deleted file mode 100644
index 8133cf0..0000000
--- a/a/6.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-_______________________________________________
-linux-arm-kernel mailing list
-linux-arm-kernel@lists.infradead.org
-http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/a/content_digest b/N1/content_digest
index 50875ec..07994ca 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,16 +1,11 @@
  "ref\01294119299-18352-1-git-send-email-marc@cpdesign.com.au\0"
  "ref\0201102122111.30525.marc@cpdesign.com.au\0"
  "ref\020110221163347.GG10686@sortiz-mobl\0"
- "From\0Marc Reilly <marc@cpdesign.com.au>\0"
- "Subject\0Re: mc13xxx-core, support for i2c, V4\0"
+ "From\0marc@cpdesign.com.au (Marc Reilly)\0"
+ "Subject\0mc13xxx-core, support for i2c, V4\0"
  "Date\0Tue, 22 Feb 2011 14:23:45 +1100\0"
- "To\0Samuel Ortiz <sameo@linux.intel.com>\0"
- "Cc\0Grant Likely <grant.likely@secretlab.ca>"
-  spi-devel-general@lists.sourceforge.net
-  linux-i2c@vger.kernel.org
-  linux-arm-kernel@lists.infradead.org
- " u.kleine-koenig@pengutronix.de\0"
- "\01:1\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
+ "\00:1\0"
  "b\0"
  "Hi Samuel,\n"
  "\n"
@@ -44,1127 +39,35 @@
  "Cheers\n"
  "Marc\n"
  "\n"
- [1] https://patchwork.kernel.org/patch/449541/
- "\01:2\0"
- "fn\0v4-1-4-mc13xxx-core-Prepare-for-separate-spi-and-i2c-backends..patch\0"
- "b\0"
- "From patchwork Tue Jan  4 05:34:56 2011\n"
- "Content-Type: text/plain; charset=\"utf-8\"\n"
- "MIME-Version: 1.0\n"
- "Content-Transfer-Encoding: 7bit\n"
- "Subject: [v4,1/4] mc13xxx-core: Prepare for separate spi and i2c backends.\n"
- "Date: Tue, 04 Jan 2011 05:34:56 -0000\n"
- "From: Marc Reilly <marc@cpdesign.com.au>\n"
- "X-Patchwork-Id: 449541\n"
- "Message-Id: <1294119299-18352-2-git-send-email-marc@cpdesign.com.au>\n"
- "To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de\n"
- "Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,\n"
- " Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "This patch abstracts the bus specific operations from the driver core.\n"
- "Read and write handlers are introduced and generic initialization is\n"
- "consolidated into mc13xxx_comon_init. The irq member is removed because\n"
- "it is unused.\n"
- "\n"
- "Signed-off-by: Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "---\n"
- "drivers/mfd/mc13xxx-core.c  |  158 +++++++++++++++++++++++++-----------------\n"
- " include/linux/mfd/mc13xxx.h |    5 ++\n"
- " 2 files changed, 99 insertions(+), 64 deletions(-)\n"
- "\n"
- "diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c\n"
- "index a2ac2ed..d1f1d7b 100644\n"
- "--- a/drivers/mfd/mc13xxx-core.c\n"
- "+++ b/drivers/mfd/mc13xxx-core.c\n"
- "@@ -19,10 +19,22 @@\n"
- " #include <linux/mfd/core.h>\n"
- " #include <linux/mfd/mc13xxx.h>\n"
- " \n"
- "+enum mc13xxx_id {\n"
- "+\tMC13XXX_ID_MC13783,\n"
- "+\tMC13XXX_ID_MC13892,\n"
- "+\tMC13XXX_ID_INVALID,\n"
- "+};\n"
- "+\n"
- " struct mc13xxx {\n"
- " \tstruct spi_device *spidev;\n"
- "+\n"
- "+\tstruct device *dev;\n"
- "+\tenum mc13xxx_id ictype;\n"
- "+\n"
- " \tstruct mutex lock;\n"
- "-\tint irq;\n"
- "+\n"
- "+\tint (*read_dev)(struct mc13xxx *, unsigned int, u32 *);\n"
- "+\tint (*write_dev)(struct mc13xxx *, unsigned int, u32);\n"
- " \n"
- " \tirq_handler_t irqhandler[MC13XXX_NUM_IRQ];\n"
- " \tvoid *irqdata[MC13XXX_NUM_IRQ];\n"
- "@@ -150,36 +162,32 @@ EXPORT_SYMBOL(mc13783_to_mc13xxx);\n"
- " void mc13xxx_lock(struct mc13xxx *mc13xxx)\n"
- " {\n"
- " \tif (!mutex_trylock(&mc13xxx->lock)) {\n"
- "-\t\tdev_dbg(&mc13xxx->spidev->dev, \"wait for %s from %pf\\n\",\n"
- "+\t\tdev_dbg(mc13xxx->dev, \"wait for %s from %pf\\n\",\n"
- " \t\t\t\t__func__, __builtin_return_address(0));\n"
- " \n"
- " \t\tmutex_lock(&mc13xxx->lock);\n"
- " \t}\n"
- "-\tdev_dbg(&mc13xxx->spidev->dev, \"%s from %pf\\n\",\n"
- "+\tdev_dbg(mc13xxx->dev, \"%s from %pf\\n\",\n"
- " \t\t\t__func__, __builtin_return_address(0));\n"
- " }\n"
- " EXPORT_SYMBOL(mc13xxx_lock);\n"
- " \n"
- " void mc13xxx_unlock(struct mc13xxx *mc13xxx)\n"
- " {\n"
- "-\tdev_dbg(&mc13xxx->spidev->dev, \"%s from %pf\\n\",\n"
- "+\tdev_dbg(mc13xxx->dev, \"%s from %pf\\n\",\n"
- " \t\t\t__func__, __builtin_return_address(0));\n"
- " \tmutex_unlock(&mc13xxx->lock);\n"
- " }\n"
- " EXPORT_SYMBOL(mc13xxx_unlock);\n"
- " \n"
- " #define MC13XXX_REGOFFSET_SHIFT 25\n"
- "-int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)\n"
- "+static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,\n"
- "+\t\t\t\tunsigned int offset, u32 *val)\n"
- " {\n"
- " \tstruct spi_transfer t;\n"
- " \tstruct spi_message m;\n"
- " \tint ret;\n"
- " \n"
- "-\tBUG_ON(!mutex_is_locked(&mc13xxx->lock));\n"
- "-\n"
- "-\tif (offset > MC13XXX_NUMREGS)\n"
- "-\t\treturn -EINVAL;\n"
- "-\n"
- " \t*val = offset << MC13XXX_REGOFFSET_SHIFT;\n"
- " \n"
- " \tmemset(&t, 0, sizeof(t));\n"
- "@@ -201,26 +209,33 @@ int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)\n"
- " \n"
- " \t*val &= 0xffffff;\n"
- " \n"
- "-\tdev_vdbg(&mc13xxx->spidev->dev, \"[0x%02x] -> 0x%06x\\n\", offset, *val);\n"
- "-\n"
- " \treturn 0;\n"
- " }\n"
- "-EXPORT_SYMBOL(mc13xxx_reg_read);\n"
- " \n"
- "-int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)\n"
- "+int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)\n"
- " {\n"
- "-\tu32 buf;\n"
- "-\tstruct spi_transfer t;\n"
- "-\tstruct spi_message m;\n"
- " \tint ret;\n"
- " \n"
- " \tBUG_ON(!mutex_is_locked(&mc13xxx->lock));\n"
- " \n"
- "-\tdev_vdbg(&mc13xxx->spidev->dev, \"[0x%02x] <- 0x%06x\\n\", offset, val);\n"
- "-\n"
- "-\tif (offset > MC13XXX_NUMREGS || val > 0xffffff)\n"
- "+\tif (offset > MC13XXX_NUMREGS)\n"
- " \t\treturn -EINVAL;\n"
- " \n"
- "+\tret = mc13xxx->read_dev(mc13xxx, offset, val);\n"
- "+\tdev_vdbg(mc13xxx->dev, \"[0x%02x] -> 0x%06x\\n\", offset, *val);\n"
- "+\n"
- "+\treturn ret;\n"
- "+}\n"
- "+EXPORT_SYMBOL(mc13xxx_reg_read);\n"
- "+\n"
- "+static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "+\t\tu32 val)\n"
- "+{\n"
- "+\tu32 buf;\n"
- "+\tstruct spi_transfer t;\n"
- "+\tstruct spi_message m;\n"
- "+\tint ret;\n"
- "+\n"
- " \tbuf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;\n"
- " \n"
- " \tmemset(&t, 0, sizeof(t));\n"
- "@@ -241,6 +256,18 @@ int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)\n"
- " \n"
- " \treturn 0;\n"
- " }\n"
- "+\n"
- "+int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)\n"
- "+{\n"
- "+\tBUG_ON(!mutex_is_locked(&mc13xxx->lock));\n"
- "+\n"
- "+\tdev_vdbg(mc13xxx->dev, \"[0x%02x] <- 0x%06x\\n\", offset, val);\n"
- "+\n"
- "+\tif (offset > MC13XXX_NUMREGS || val > 0xffffff)\n"
- "+\t\treturn -EINVAL;\n"
- "+\n"
- "+\treturn mc13xxx->write_dev(mc13xxx, offset, val);\n"
- "+}\n"
- " EXPORT_SYMBOL(mc13xxx_reg_write);\n"
- " \n"
- " int mc13xxx_reg_rmw(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "@@ -445,7 +472,7 @@ static int mc13xxx_irq_handle(struct mc13xxx *mc13xxx,\n"
- " \t\t\tif (handled == IRQ_HANDLED)\n"
- " \t\t\t\tnum_handled++;\n"
- " \t\t} else {\n"
- "-\t\t\tdev_err(&mc13xxx->spidev->dev,\n"
- "+\t\t\tdev_err(mc13xxx->dev,\n"
- " \t\t\t\t\t\"BUG: irq %u but no handler\\n\",\n"
- " \t\t\t\t\tbaseirq + irq);\n"
- " \n"
- "@@ -481,25 +508,23 @@ static irqreturn_t mc13xxx_irq_thread(int irq, void *data)\n"
- " \treturn IRQ_RETVAL(handled);\n"
- " }\n"
- " \n"
- "-enum mc13xxx_id {\n"
- "-\tMC13XXX_ID_MC13783,\n"
- "-\tMC13XXX_ID_MC13892,\n"
- "-\tMC13XXX_ID_INVALID,\n"
- "-};\n"
- "-\n"
- " const char *mc13xxx_chipname[] = {\n"
- " \t[MC13XXX_ID_MC13783] = \"mc13783\",\n"
- " \t[MC13XXX_ID_MC13892] = \"mc13892\",\n"
- " };\n"
- " \n"
- " #define maskval(reg, mask)\t(((reg) & (mask)) >> __ffs(mask))\n"
- "-static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)\n"
- "+static int mc13xxx_identify(struct mc13xxx *mc13xxx)\n"
- " {\n"
- " \tu32 icid;\n"
- " \tu32 revision;\n"
- "-\tconst char *name;\n"
- " \tint ret;\n"
- " \n"
- "+\t/*\n"
- "+\t * Get the generation ID from register 46, as apparently some older\n"
- "+\t * IC revisions only have this info at this location. Newer ICs seem to\n"
- "+\t * have both.\n"
- "+\t */\n"
- " \tret = mc13xxx_reg_read(mc13xxx, 46, &icid);\n"
- " \tif (ret)\n"
- " \t\treturn ret;\n"
- "@@ -508,26 +533,23 @@ static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)\n"
- " \n"
- " \tswitch (icid) {\n"
- " \tcase 2:\n"
- "-\t\t*id = MC13XXX_ID_MC13783;\n"
- "-\t\tname = \"mc13783\";\n"
- "+\t\tmc13xxx->ictype = MC13XXX_ID_MC13783;\n"
- " \t\tbreak;\n"
- " \tcase 7:\n"
- "-\t\t*id = MC13XXX_ID_MC13892;\n"
- "-\t\tname = \"mc13892\";\n"
- "+\t\tmc13xxx->ictype = MC13XXX_ID_MC13892;\n"
- " \t\tbreak;\n"
- " \tdefault:\n"
- "-\t\t*id = MC13XXX_ID_INVALID;\n"
- "+\t\tmc13xxx->ictype = MC13XXX_ID_INVALID;\n"
- " \t\tbreak;\n"
- " \t}\n"
- " \n"
- "-\tif (*id == MC13XXX_ID_MC13783 || *id == MC13XXX_ID_MC13892) {\n"
- "+\tif (mc13xxx->ictype == MC13XXX_ID_MC13783 ||\n"
- "+\t\t\tmc13xxx->ictype == MC13XXX_ID_MC13892) {\n"
- " \t\tret = mc13xxx_reg_read(mc13xxx, MC13XXX_REVISION, &revision);\n"
- "-\t\tif (ret)\n"
- "-\t\t\treturn ret;\n"
- " \n"
- "-\t\tdev_info(&mc13xxx->spidev->dev, \"%s: rev: %d.%d, \"\n"
- "+\t\tdev_info(mc13xxx->dev, \"%s: rev: %d.%d, \"\n"
- " \t\t\t\t\"fin: %d, fab: %d, icid: %d/%d\\n\",\n"
- "-\t\t\t\tmc13xxx_chipname[*id],\n"
- "+\t\t\t\tmc13xxx_chipname[mc13xxx->ictype],\n"
- " \t\t\t\tmaskval(revision, MC13XXX_REVISION_REVFULL),\n"
- " \t\t\t\tmaskval(revision, MC13XXX_REVISION_REVMETAL),\n"
- " \t\t\t\tmaskval(revision, MC13XXX_REVISION_FIN),\n"
- "@@ -536,26 +558,12 @@ static int mc13xxx_identify(struct mc13xxx *mc13xxx, enum mc13xxx_id *id)\n"
- " \t\t\t\tmaskval(revision, MC13XXX_REVISION_ICIDCODE));\n"
- " \t}\n"
- " \n"
- "-\tif (*id != MC13XXX_ID_INVALID) {\n"
- "-\t\tconst struct spi_device_id *devid =\n"
- "-\t\t\tspi_get_device_id(mc13xxx->spidev);\n"
- "-\t\tif (!devid || devid->driver_data != *id)\n"
- "-\t\t\tdev_warn(&mc13xxx->spidev->dev, \"device id doesn't \"\n"
- "-\t\t\t\t\t\"match auto detection!\\n\");\n"
- "-\t}\n"
- "-\n"
- "-\treturn 0;\n"
- "+\treturn (mc13xxx->ictype == MC13XXX_ID_INVALID) ? -ENODEV : 0;\n"
- " }\n"
- " \n"
- " static const char *mc13xxx_get_chipname(struct mc13xxx *mc13xxx)\n"
- " {\n"
- "-\tconst struct spi_device_id *devid =\n"
- "-\t\tspi_get_device_id(mc13xxx->spidev);\n"
- "-\n"
- "-\tif (!devid)\n"
- "-\t\treturn NULL;\n"
- "-\n"
- "-\treturn mc13xxx_chipname[devid->driver_data];\n"
- "+\treturn mc13xxx_chipname[mc13xxx->ictype];\n"
- " }\n"
- " \n"
- " #include <linux/mfd/mc13783.h>\n"
- "@@ -563,7 +571,7 @@ static const char *mc13xxx_get_chipname(struct mc13xxx *mc13xxx)\n"
- " int mc13xxx_get_flags(struct mc13xxx *mc13xxx)\n"
- " {\n"
- " \tstruct mc13xxx_platform_data *pdata =\n"
- "-\t\tdev_get_platdata(&mc13xxx->spidev->dev);\n"
- "+\t\tdev_get_platdata(mc13xxx->dev);\n"
- " \n"
- " \treturn pdata->flags;\n"
- " }\n"
- "@@ -601,7 +609,7 @@ int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,\n"
- " \t};\n"
- " \tinit_completion(&adcdone_data.done);\n"
- " \n"
- "-\tdev_dbg(&mc13xxx->spidev->dev, \"%s\\n\", __func__);\n"
- "+\tdev_dbg(mc13xxx->dev, \"%s\\n\", __func__);\n"
- " \n"
- " \tmc13xxx_lock(mc13xxx);\n"
- " \n"
- "@@ -643,7 +651,7 @@ int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode,\n"
- " \t\treturn -EINVAL;\n"
- " \t}\n"
- " \n"
- "-\tdev_dbg(&mc13783->mc13xxx.spidev->dev, \"%s: request irq\\n\", __func__);\n"
- "+\tdev_dbg(mc13783->mc13xxx.dev, \"%s: request irq\\n\", __func__);\n"
- " \tmc13xxx_irq_request(mc13xxx, MC13783_IRQ_ADCDONE,\n"
- " \t\t\tmc13783_handler_adcdone, __func__, &adcdone_data);\n"
- " \tmc13xxx_irq_ack(mc13xxx, MC13783_IRQ_ADCDONE);\n"
- "@@ -701,7 +709,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx,\n"
- " \tif (!cell.name)\n"
- " \t\treturn -ENOMEM;\n"
- " \n"
- "-\treturn mfd_add_devices(&mc13xxx->spidev->dev, -1, &cell, 1, NULL, 0);\n"
- "+\treturn mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0);\n"
- " }\n"
- " \n"
- " static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *format)\n"
- "@@ -713,7 +721,6 @@ static int mc13xxx_probe(struct spi_device *spi)\n"
- " {\n"
- " \tstruct mc13xxx *mc13xxx;\n"
- " \tstruct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);\n"
- "-\tenum mc13xxx_id id;\n"
- " \tint ret;\n"
- " \n"
- " \tmc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);\n"
- "@@ -725,13 +732,36 @@ static int mc13xxx_probe(struct spi_device *spi)\n"
- " \tspi->bits_per_word = 32;\n"
- " \tspi_setup(spi);\n"
- " \n"
- "+\tmc13xxx->dev = &spi->dev;\n"
- " \tmc13xxx->spidev = spi;\n"
- "+\tmc13xxx->read_dev = mc13xxx_spi_reg_read;\n"
- "+\tmc13xxx->write_dev = mc13xxx_spi_reg_write;\n"
- "+\n"
- "+\tret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);\n"
- "+\n"
- "+\tif (ret) {\n"
- "+\t\tdev_set_drvdata(&spi->dev, NULL);\n"
- "+\t} else {\n"
- "+\t\tconst struct spi_device_id *devid =\n"
- "+\t\t\tspi_get_device_id(mc13xxx->spidev);\n"
- "+\t\tif (!devid || devid->driver_data != mc13xxx->ictype)\n"
- "+\t\t\tdev_warn(mc13xxx->dev,\n"
- "+\t\t\t\t\"device id doesn't match auto detection!\\n\");\n"
- "+\t}\n"
- "+\n"
- "+\treturn ret;\n"
- "+}\n"
- "+\n"
- "+int mc13xxx_common_init(struct mc13xxx *mc13xxx,\n"
- "+\t\tstruct mc13xxx_platform_data *pdata, int irq)\n"
- "+{\n"
- "+\tint ret;\n"
- " \n"
- " \tmutex_init(&mc13xxx->lock);\n"
- " \tmc13xxx_lock(mc13xxx);\n"
- " \n"
- "-\tret = mc13xxx_identify(mc13xxx, &id);\n"
- "-\tif (ret || id == MC13XXX_ID_INVALID)\n"
- "+\tret = mc13xxx_identify(mc13xxx);\n"
- "+\tif (ret)\n"
- " \t\tgoto err_revision;\n"
- " \n"
- " \t/* mask all irqs */\n"
- "@@ -743,14 +773,13 @@ static int mc13xxx_probe(struct spi_device *spi)\n"
- " \tif (ret)\n"
- " \t\tgoto err_mask;\n"
- " \n"
- "-\tret = request_threaded_irq(spi->irq, NULL, mc13xxx_irq_thread,\n"
- "+\tret = request_threaded_irq(irq, NULL, mc13xxx_irq_thread,\n"
- " \t\t\tIRQF_ONESHOT | IRQF_TRIGGER_HIGH, \"mc13xxx\", mc13xxx);\n"
- " \n"
- " \tif (ret) {\n"
- " err_mask:\n"
- " err_revision:\n"
- " \t\tmutex_unlock(&mc13xxx->lock);\n"
- "-\t\tdev_set_drvdata(&spi->dev, NULL);\n"
- " \t\tkfree(mc13xxx);\n"
- " \t\treturn ret;\n"
- " \t}\n"
- "@@ -786,6 +815,7 @@ err_revision:\n"
- " \n"
- " \treturn 0;\n"
- " }\n"
- "+EXPORT_SYMBOL_GPL(mc13xxx_common_init);\n"
- " \n"
- " static int __devexit mc13xxx_remove(struct spi_device *spi)\n"
- " {\n"
- "diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h\n"
- "index a1d391b..f5d277d 100644\n"
- "--- a/include/linux/mfd/mc13xxx.h\n"
- "+++ b/include/linux/mfd/mc13xxx.h\n"
- "@@ -21,6 +21,11 @@ int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val);\n"
- " int mc13xxx_reg_rmw(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- " \t\tu32 mask, u32 val);\n"
- " \n"
- "+struct mc13xxx_platform_data;\n"
- "+\n"
- "+int mc13xxx_common_init(struct mc13xxx *mc13xxx,\n"
- "+\t\tstruct mc13xxx_platform_data *pdata, int irq);\n"
- "+\n"
- " int mc13xxx_get_flags(struct mc13xxx *mc13xxx);\n"
- " \n"
-  int mc13xxx_irq_request(struct mc13xxx *mc13xxx, int irq,
- "\01:3\0"
- "fn\0v4-2-4-mc13xxx-core-Kconfig-Config-menu-driven-by-specific-IC-type.patch\0"
- "b\0"
- "From patchwork Tue Jan  4 05:34:57 2011\n"
- "Content-Type: text/plain; charset=\"utf-8\"\n"
- "MIME-Version: 1.0\n"
- "Content-Transfer-Encoding: 7bit\n"
- "Subject: [v4,\n"
- " 2/4] mc13xxx-core: Kconfig: Config menu driven by specific IC type\n"
- "Date: Tue, 04 Jan 2011 05:34:57 -0000\n"
- "From: Marc Reilly <marc@cpdesign.com.au>\n"
- "X-Patchwork-Id: 449531\n"
- "Message-Id: <1294119299-18352-3-git-send-email-marc@cpdesign.com.au>\n"
- "To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de\n"
- "Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,\n"
- " Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "This patch makes config items for the mc13892 and mc13783 distinct and\n"
- "splits introduces a separate config item for spi interface support in\n"
- "preparation for a separate i2c and spi backend.\n"
- "\n"
- "The mc13xxx generic core is therefore selected by the spi (or i2c) item:\n"
- "having it the other way around doesn't work for other drivers that will\n"
- "need to distinguish between mc13783 and mc13892 (at build time).\n"
- "\n"
- "Signed-off-by: Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "---\n"
- "drivers/mfd/Kconfig |   34 +++++++++++++++++++++++++---------\n"
- " 1 files changed, 25 insertions(+), 9 deletions(-)\n"
- "\n"
- "diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig\n"
- "index 3a1493b..9ce1d42 100644\n"
- "--- a/drivers/mfd/Kconfig\n"
- "+++ b/drivers/mfd/Kconfig\n"
- "@@ -425,20 +425,36 @@ config MFD_PCF50633\n"
- " \t  so that function-specific drivers can bind to them.\n"
- " \n"
- " config MFD_MC13783\n"
- "-\ttristate\n"
- "-\n"
- "-config MFD_MC13XXX\n"
- "-\ttristate \"Support Freescale MC13783 and MC13892\"\n"
- " \tdepends on SPI_MASTER\n"
- "-\tselect MFD_CORE\n"
- "-\tselect MFD_MC13783\n"
- "+\tselect MFD_MC13XXX_SPI\n"
- "+\ttristate \"Support for Freescale MC13783 PMIC\"\n"
- " \thelp\n"
- "-\t  Support for the Freescale (Atlas) PMIC and audio CODECs\n"
- "-\t  MC13783 and MC13892.\n"
- "-\t  This driver provides common support for accessing  the device,\n"
- "+\t  Support for the Freescale MC13783 PMIC and audio CODEC.\n"
- "+\t  This driver provides common support for accessing the device,\n"
- " \t  additional drivers must be enabled in order to use the\n"
- " \t  functionality of the device.\n"
- " \n"
- "+config MFD_MC13892\n"
- "+\tdepends on SPI_MASTER || I2C\n"
- "+\tselect MFD_MC13XXX\n"
- "+\ttristate \"Support for Freescale MC13892 PMIC\"\n"
- "+\thelp\n"
- "+\t  Enable support for the Freescale MC13892 PMIC.\n"
- "+\t  As the MC13892 can connect by either I2C or SPI bus, you will\n"
- "+\t  also need to select which of these you would like to support.\n"
- "+\t  Additional drivers must be enabled in order to use the\n"
- "+\t  functionality of the device.\n"
- "+\n"
- "+config MFD_MC13XXX\n"
- "+\ttristate\n"
- "+\tdepends on SPI_MASTER || I2C\n"
- "+\tselect MFD_CORE\n"
- "+\n"
- "+config MFD_MC13XXX_SPI\n"
- "+\ttristate \"Support Freescale MC13783 and MC13892 via SPI interface\"\n"
- "+\tselect MFD_MC13XXX\n"
- "+\tdepends on SPI_MASTER && (MFD_MC13783 || MFD_MC13892)\n"
- "+\n"
- " config PCF50633_ADC\n"
- " \ttristate \"Support for NXP PCF50633 ADC\"\n"
- " \tdepends on MFD_PCF50633"
- "\01:4\0"
- "fn\0v4-3-4-mc13xxx-core-Move-spi-specific-code-into-separate-module..patch\0"
- "b\0"
- "From patchwork Tue Jan  4 05:34:58 2011\n"
- "Content-Type: text/plain; charset=\"utf-8\"\n"
- "MIME-Version: 1.0\n"
- "Content-Transfer-Encoding: 7bit\n"
- "Subject: [v4,3/4] mc13xxx-core: Move spi specific code into separate module.\n"
- "Date: Tue, 04 Jan 2011 05:34:58 -0000\n"
- "From: Marc Reilly <marc@cpdesign.com.au>\n"
- "X-Patchwork-Id: 449561\n"
- "Message-Id: <1294119299-18352-4-git-send-email-marc@cpdesign.com.au>\n"
- "To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de\n"
- "Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,\n"
- " Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "This patch moves all spi specific code into a new module. The mc13xxx\n"
- "struct moves to the include file by necessity.\n"
- "\n"
- "Signed-off-by: Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "---\n"
- "drivers/mfd/Makefile        |    1 +\n"
- " drivers/mfd/mc13xxx-core.c  |  166 ------------------------------------------\n"
- " drivers/mfd/mc13xxx-spi.c   |  168 +++++++++++++++++++++++++++++++++++++++++++\n"
- " include/linux/mfd/mc13xxx.h |   21 ++++++\n"
- " 4 files changed, 190 insertions(+), 166 deletions(-)\n"
- " create mode 100644 drivers/mfd/mc13xxx-spi.c\n"
- "\n"
- "diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile\n"
- "index f54b365..492e881 100644\n"
- "--- a/drivers/mfd/Makefile\n"
- "+++ b/drivers/mfd/Makefile\n"
- "@@ -42,6 +42,7 @@ obj-$(CONFIG_TWL4030_CODEC)\t+= twl4030-codec.o\n"
- " obj-$(CONFIG_TWL6030_PWM)\t+= twl6030-pwm.o\n"
- " \n"
- " obj-$(CONFIG_MFD_MC13XXX)\t+= mc13xxx-core.o\n"
- "+obj-$(CONFIG_MFD_MC13XXX_SPI)\t+= mc13xxx-spi.o\n"
- " \n"
- " obj-$(CONFIG_MFD_CORE)\t\t+= mfd-core.o\n"
- " \n"
- "diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c\n"
- "index d1f1d7b..3201041 100644\n"
- "--- a/drivers/mfd/mc13xxx-core.c\n"
- "+++ b/drivers/mfd/mc13xxx-core.c\n"
- "@@ -15,31 +15,9 @@\n"
- " #include <linux/platform_device.h>\n"
- " #include <linux/mutex.h>\n"
- " #include <linux/interrupt.h>\n"
- "-#include <linux/spi/spi.h>\n"
- " #include <linux/mfd/core.h>\n"
- " #include <linux/mfd/mc13xxx.h>\n"
- " \n"
- "-enum mc13xxx_id {\n"
- "-\tMC13XXX_ID_MC13783,\n"
- "-\tMC13XXX_ID_MC13892,\n"
- "-\tMC13XXX_ID_INVALID,\n"
- "-};\n"
- "-\n"
- "-struct mc13xxx {\n"
- "-\tstruct spi_device *spidev;\n"
- "-\n"
- "-\tstruct device *dev;\n"
- "-\tenum mc13xxx_id ictype;\n"
- "-\n"
- "-\tstruct mutex lock;\n"
- "-\n"
- "-\tint (*read_dev)(struct mc13xxx *, unsigned int, u32 *);\n"
- "-\tint (*write_dev)(struct mc13xxx *, unsigned int, u32);\n"
- "-\n"
- "-\tirq_handler_t irqhandler[MC13XXX_NUM_IRQ];\n"
- "-\tvoid *irqdata[MC13XXX_NUM_IRQ];\n"
- "-};\n"
- "-\n"
- " struct mc13783 {\n"
- " \tstruct mc13xxx mc13xxx;\n"
- " \n"
- "@@ -180,38 +158,6 @@ void mc13xxx_unlock(struct mc13xxx *mc13xxx)\n"
- " }\n"
- " EXPORT_SYMBOL(mc13xxx_unlock);\n"
- " \n"
- "-#define MC13XXX_REGOFFSET_SHIFT 25\n"
- "-static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,\n"
- "-\t\t\t\tunsigned int offset, u32 *val)\n"
- "-{\n"
- "-\tstruct spi_transfer t;\n"
- "-\tstruct spi_message m;\n"
- "-\tint ret;\n"
- "-\n"
- "-\t*val = offset << MC13XXX_REGOFFSET_SHIFT;\n"
- "-\n"
- "-\tmemset(&t, 0, sizeof(t));\n"
- "-\n"
- "-\tt.tx_buf = val;\n"
- "-\tt.rx_buf = val;\n"
- "-\tt.len = sizeof(u32);\n"
- "-\n"
- "-\tspi_message_init(&m);\n"
- "-\tspi_message_add_tail(&t, &m);\n"
- "-\n"
- "-\tret = spi_sync(mc13xxx->spidev, &m);\n"
- "-\n"
- "-\t/* error in message.status implies error return from spi_sync */\n"
- "-\tBUG_ON(!ret && m.status);\n"
- "-\n"
- "-\tif (ret)\n"
- "-\t\treturn ret;\n"
- "-\n"
- "-\t*val &= 0xffffff;\n"
- "-\n"
- "-\treturn 0;\n"
- "-}\n"
- "-\n"
- " int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)\n"
- " {\n"
- " \tint ret;\n"
- "@@ -228,35 +174,6 @@ int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val)\n"
- " }\n"
- " EXPORT_SYMBOL(mc13xxx_reg_read);\n"
- " \n"
- "-static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "-\t\tu32 val)\n"
- "-{\n"
- "-\tu32 buf;\n"
- "-\tstruct spi_transfer t;\n"
- "-\tstruct spi_message m;\n"
- "-\tint ret;\n"
- "-\n"
- "-\tbuf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;\n"
- "-\n"
- "-\tmemset(&t, 0, sizeof(t));\n"
- "-\n"
- "-\tt.tx_buf = &buf;\n"
- "-\tt.rx_buf = &buf;\n"
- "-\tt.len = sizeof(u32);\n"
- "-\n"
- "-\tspi_message_init(&m);\n"
- "-\tspi_message_add_tail(&t, &m);\n"
- "-\n"
- "-\tret = spi_sync(mc13xxx->spidev, &m);\n"
- "-\n"
- "-\tBUG_ON(!ret && m.status);\n"
- "-\n"
- "-\tif (ret)\n"
- "-\t\treturn ret;\n"
- "-\n"
- "-\treturn 0;\n"
- "-}\n"
- "-\n"
- " int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val)\n"
- " {\n"
- " \tBUG_ON(!mutex_is_locked(&mc13xxx->lock));\n"
- "@@ -717,41 +634,6 @@ static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *format)\n"
- " \treturn mc13xxx_add_subdevice_pdata(mc13xxx, format, NULL, 0);\n"
- " }\n"
- " \n"
- "-static int mc13xxx_probe(struct spi_device *spi)\n"
- "-{\n"
- "-\tstruct mc13xxx *mc13xxx;\n"
- "-\tstruct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);\n"
- "-\tint ret;\n"
- "-\n"
- "-\tmc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);\n"
- "-\tif (!mc13xxx)\n"
- "-\t\treturn -ENOMEM;\n"
- "-\n"
- "-\tdev_set_drvdata(&spi->dev, mc13xxx);\n"
- "-\tspi->mode = SPI_MODE_0 | SPI_CS_HIGH;\n"
- "-\tspi->bits_per_word = 32;\n"
- "-\tspi_setup(spi);\n"
- "-\n"
- "-\tmc13xxx->dev = &spi->dev;\n"
- "-\tmc13xxx->spidev = spi;\n"
- "-\tmc13xxx->read_dev = mc13xxx_spi_reg_read;\n"
- "-\tmc13xxx->write_dev = mc13xxx_spi_reg_write;\n"
- "-\n"
- "-\tret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);\n"
- "-\n"
- "-\tif (ret) {\n"
- "-\t\tdev_set_drvdata(&spi->dev, NULL);\n"
- "-\t} else {\n"
- "-\t\tconst struct spi_device_id *devid =\n"
- "-\t\t\tspi_get_device_id(mc13xxx->spidev);\n"
- "-\t\tif (!devid || devid->driver_data != mc13xxx->ictype)\n"
- "-\t\t\tdev_warn(mc13xxx->dev,\n"
- "-\t\t\t\t\"device id doesn't match auto detection!\\n\");\n"
- "-\t}\n"
- "-\n"
- "-\treturn ret;\n"
- "-}\n"
- "-\n"
- " int mc13xxx_common_init(struct mc13xxx *mc13xxx,\n"
- " \t\tstruct mc13xxx_platform_data *pdata, int irq)\n"
- " {\n"
- "@@ -817,54 +699,6 @@ err_revision:\n"
- " }\n"
- " EXPORT_SYMBOL_GPL(mc13xxx_common_init);\n"
- " \n"
- "-static int __devexit mc13xxx_remove(struct spi_device *spi)\n"
- "-{\n"
- "-\tstruct mc13xxx *mc13xxx = dev_get_drvdata(&spi->dev);\n"
- "-\n"
- "-\tfree_irq(mc13xxx->spidev->irq, mc13xxx);\n"
- "-\n"
- "-\tmfd_remove_devices(&spi->dev);\n"
- "-\n"
- "-\tkfree(mc13xxx);\n"
- "-\n"
- "-\treturn 0;\n"
- "-}\n"
- "-\n"
- "-static const struct spi_device_id mc13xxx_device_id[] = {\n"
- "-\t{\n"
- "-\t\t.name = \"mc13783\",\n"
- "-\t\t.driver_data = MC13XXX_ID_MC13783,\n"
- "-\t}, {\n"
- "-\t\t.name = \"mc13892\",\n"
- "-\t\t.driver_data = MC13XXX_ID_MC13892,\n"
- "-\t}, {\n"
- "-\t\t/* sentinel */\n"
- "-\t}\n"
- "-};\n"
- "-\n"
- "-static struct spi_driver mc13xxx_driver = {\n"
- "-\t.id_table = mc13xxx_device_id,\n"
- "-\t.driver = {\n"
- "-\t\t.name = \"mc13xxx\",\n"
- "-\t\t.bus = &spi_bus_type,\n"
- "-\t\t.owner = THIS_MODULE,\n"
- "-\t},\n"
- "-\t.probe = mc13xxx_probe,\n"
- "-\t.remove = __devexit_p(mc13xxx_remove),\n"
- "-};\n"
- "-\n"
- "-static int __init mc13xxx_init(void)\n"
- "-{\n"
- "-\treturn spi_register_driver(&mc13xxx_driver);\n"
- "-}\n"
- "-subsys_initcall(mc13xxx_init);\n"
- "-\n"
- "-static void __exit mc13xxx_exit(void)\n"
- "-{\n"
- "-\tspi_unregister_driver(&mc13xxx_driver);\n"
- "-}\n"
- "-module_exit(mc13xxx_exit);\n"
- "-\n"
- " MODULE_DESCRIPTION(\"Core driver for Freescale MC13XXX PMIC\");\n"
- " MODULE_AUTHOR(\"Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>\");\n"
- " MODULE_LICENSE(\"GPL v2\");\n"
- "diff --git a/drivers/mfd/mc13xxx-spi.c b/drivers/mfd/mc13xxx-spi.c\n"
- "new file mode 100644\n"
- "index 0000000..d8ffff7\n"
- "--- /dev/null\n"
- "+++ b/drivers/mfd/mc13xxx-spi.c\n"
- "@@ -0,0 +1,168 @@\n"
- "+/*\n"
- "+ * Copyright 2009-2010 Pengutronix\n"
- "+ * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>\n"
- "+ *\n"
- "+ * loosely based on an earlier driver that has\n"
- "+ * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>\n"
- "+ *\n"
- "+ * This program is free software; you can redistribute it and/or modify it under\n"
- "+ * the terms of the GNU General Public License version 2 as published by the\n"
- "+ * Free Software Foundation.\n"
- "+ */\n"
- "+\n"
- "+#include <linux/slab.h>\n"
- "+#include <linux/module.h>\n"
- "+#include <linux/platform_device.h>\n"
- "+#include <linux/mutex.h>\n"
- "+#include <linux/interrupt.h>\n"
- "+#include <linux/spi/spi.h>\n"
- "+#include <linux/mfd/core.h>\n"
- "+#include <linux/mfd/mc13xxx.h>\n"
- "+\n"
- "+#define MC13XXX_REGOFFSET_SHIFT 25\n"
- "+static int mc13xxx_spi_reg_read(struct mc13xxx *mc13xxx,\n"
- "+\t\t\t\tunsigned int offset, u32 *val)\n"
- "+{\n"
- "+\tstruct spi_transfer t;\n"
- "+\tstruct spi_message m;\n"
- "+\tint ret;\n"
- "+\n"
- "+\t*val = offset << MC13XXX_REGOFFSET_SHIFT;\n"
- "+\n"
- "+\tmemset(&t, 0, sizeof(t));\n"
- "+\n"
- "+\tt.tx_buf = val;\n"
- "+\tt.rx_buf = val;\n"
- "+\tt.len = sizeof(u32);\n"
- "+\n"
- "+\tspi_message_init(&m);\n"
- "+\tspi_message_add_tail(&t, &m);\n"
- "+\n"
- "+\tret = spi_sync(mc13xxx->spidev, &m);\n"
- "+\n"
- "+\t/* error in message.status implies error return from spi_sync */\n"
- "+\tBUG_ON(!ret && m.status);\n"
- "+\n"
- "+\tif (ret)\n"
- "+\t\treturn ret;\n"
- "+\n"
- "+\t*val &= 0xffffff;\n"
- "+\n"
- "+\treturn 0;\n"
- "+}\n"
- "+\n"
- "+static int mc13xxx_spi_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "+\t\tu32 val)\n"
- "+{\n"
- "+\tu32 buf;\n"
- "+\tstruct spi_transfer t;\n"
- "+\tstruct spi_message m;\n"
- "+\tint ret;\n"
- "+\n"
- "+\tbuf = 1 << 31 | offset << MC13XXX_REGOFFSET_SHIFT | val;\n"
- "+\n"
- "+\tmemset(&t, 0, sizeof(t));\n"
- "+\n"
- "+\tt.tx_buf = &buf;\n"
- "+\tt.rx_buf = &buf;\n"
- "+\tt.len = sizeof(u32);\n"
- "+\n"
- "+\tspi_message_init(&m);\n"
- "+\tspi_message_add_tail(&t, &m);\n"
- "+\n"
- "+\tret = spi_sync(mc13xxx->spidev, &m);\n"
- "+\n"
- "+\tBUG_ON(!ret && m.status);\n"
- "+\n"
- "+\tif (ret)\n"
- "+\t\treturn ret;\n"
- "+\n"
- "+\treturn 0;\n"
- "+}\n"
- "+\n"
- "+static int mc13xxx_spi_probe(struct spi_device *spi)\n"
- "+{\n"
- "+\tstruct mc13xxx *mc13xxx;\n"
- "+\tstruct mc13xxx_platform_data *pdata = dev_get_platdata(&spi->dev);\n"
- "+\tint ret;\n"
- "+\n"
- "+\tmc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);\n"
- "+\tif (!mc13xxx)\n"
- "+\t\treturn -ENOMEM;\n"
- "+\n"
- "+\tdev_set_drvdata(&spi->dev, mc13xxx);\n"
- "+\tspi->mode = SPI_MODE_0 | SPI_CS_HIGH;\n"
- "+\tspi->bits_per_word = 32;\n"
- "+\tspi_setup(spi);\n"
- "+\n"
- "+\tmc13xxx->dev = &spi->dev;\n"
- "+\tmc13xxx->spidev = spi;\n"
- "+\tmc13xxx->read_dev = mc13xxx_spi_reg_read;\n"
- "+\tmc13xxx->write_dev = mc13xxx_spi_reg_write;\n"
- "+\n"
- "+\tret = mc13xxx_common_init(mc13xxx, pdata, spi->irq);\n"
- "+\n"
- "+\tif (ret) {\n"
- "+\t\tdev_set_drvdata(&spi->dev, NULL);\n"
- "+\t} else {\n"
- "+\t\tconst struct spi_device_id *devid =\n"
- "+\t\t\tspi_get_device_id(mc13xxx->spidev);\n"
- "+\t\tif (!devid || devid->driver_data != mc13xxx->ictype)\n"
- "+\t\t\tdev_warn(mc13xxx->dev,\n"
- "+\t\t\t\t\"device id doesn't match auto detection!\\n\");\n"
- "+\t}\n"
- "+\n"
- "+\treturn ret;\n"
- "+}\n"
- "+\n"
- "+static int __devexit mc13xxx_spi_remove(struct spi_device *spi)\n"
- "+{\n"
- "+\tstruct mc13xxx *mc13xxx = dev_get_drvdata(&spi->dev);\n"
- "+\n"
- "+\tfree_irq(mc13xxx->spidev->irq, mc13xxx);\n"
- "+\n"
- "+\tmfd_remove_devices(&spi->dev);\n"
- "+\n"
- "+\tkfree(mc13xxx);\n"
- "+\n"
- "+\treturn 0;\n"
- "+}\n"
- "+\n"
- "+static const struct spi_device_id mc13xxx_device_id[] = {\n"
- "+\t{\n"
- "+\t\t.name = \"mc13783\",\n"
- "+\t\t.driver_data = MC13XXX_ID_MC13783,\n"
- "+\t}, {\n"
- "+\t\t.name = \"mc13892\",\n"
- "+\t\t.driver_data = MC13XXX_ID_MC13892,\n"
- "+\t}, {\n"
- "+\t\t/* sentinel */\n"
- "+\t}\n"
- "+};\n"
- "+\n"
- "+static struct spi_driver mc13xxx_spi_driver = {\n"
- "+\t.id_table = mc13xxx_device_id,\n"
- "+\t.driver = {\n"
- "+\t\t.name = \"mc13xxx\",\n"
- "+\t\t.bus = &spi_bus_type,\n"
- "+\t\t.owner = THIS_MODULE,\n"
- "+\t},\n"
- "+\t.probe = mc13xxx_spi_probe,\n"
- "+\t.remove = __devexit_p(mc13xxx_spi_remove),\n"
- "+};\n"
- "+\n"
- "+static int __init mc13xxx_spi_init(void)\n"
- "+{\n"
- "+\treturn spi_register_driver(&mc13xxx_spi_driver);\n"
- "+}\n"
- "+subsys_initcall(mc13xxx_spi_init);\n"
- "+\n"
- "+static void __exit mc13xxx_spi_exit(void)\n"
- "+{\n"
- "+\tspi_unregister_driver(&mc13xxx_spi_driver);\n"
- "+}\n"
- "+module_exit(mc13xxx_spi_exit);\n"
- "+\n"
- "+MODULE_DESCRIPTION(\"Core driver for Freescale MC13XXX PMIC\");\n"
- "+MODULE_AUTHOR(\"Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>\");\n"
- "+MODULE_LICENSE(\"GPL v2\");\n"
- "diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h\n"
- "index f5d277d..ab7deb3 100644\n"
- "--- a/include/linux/mfd/mc13xxx.h\n"
- "+++ b/include/linux/mfd/mc13xxx.h\n"
- "@@ -66,6 +66,27 @@ int mc13xxx_get_flags(struct mc13xxx *mc13xxx);\n"
- " \n"
- " #define MC13XXX_NUM_IRQ\t\t46\n"
- " \n"
- "+enum mc13xxx_id {\n"
- "+\tMC13XXX_ID_MC13783,\n"
- "+\tMC13XXX_ID_MC13892,\n"
- "+\tMC13XXX_ID_INVALID,\n"
- "+};\n"
- "+\n"
- "+struct mc13xxx {\n"
- "+\tstruct spi_device *spidev;\n"
- "+\n"
- "+\tstruct device *dev;\n"
- "+\tenum mc13xxx_id ictype;\n"
- "+\n"
- "+\tstruct mutex lock;\n"
- "+\n"
- "+\tint (*read_dev)(struct mc13xxx *, unsigned int, u32 *);\n"
- "+\tint (*write_dev)(struct mc13xxx *, unsigned int, u32);\n"
- "+\n"
- "+\tirq_handler_t irqhandler[MC13XXX_NUM_IRQ];\n"
- "+\tvoid *irqdata[MC13XXX_NUM_IRQ];\n"
- "+};\n"
- "+\n"
- " struct regulator_init_data;\n"
- " \n"
-  struct mc13xxx_regulator_init_data {
- "\01:5\0"
- "fn\0v4-4-4-mc13xxx-core-Add-i2c-driver.patch\0"
- "b\0"
- "From patchwork Tue Jan  4 05:34:59 2011\n"
- "Content-Type: text/plain; charset=\"utf-8\"\n"
- "MIME-Version: 1.0\n"
- "Content-Transfer-Encoding: 7bit\n"
- "Subject: [v4,4/4] mc13xxx-core: Add i2c driver\n"
- "Date: Tue, 04 Jan 2011 05:34:59 -0000\n"
- "From: Marc Reilly <marc@cpdesign.com.au>\n"
- "X-Patchwork-Id: 449551\n"
- "Message-Id: <1294119299-18352-5-git-send-email-marc@cpdesign.com.au>\n"
- "To: linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de\n"
- "Cc: spi-devel-general@lists.sourceforge.net, linux-i2c@vger.kernel.org,\n"
- " Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "Signed-off-by: Marc Reilly <marc@cpdesign.com.au>\n"
- "\n"
- "---\n"
- "drivers/mfd/Kconfig         |    5 ++\n"
- " drivers/mfd/Makefile        |    1 +\n"
- " drivers/mfd/mc13xxx-i2c.c   |  115 +++++++++++++++++++++++++++++++++++++++++++\n"
- " include/linux/mfd/mc13xxx.h |    5 ++-\n"
- " 4 files changed, 125 insertions(+), 1 deletions(-)\n"
- " create mode 100644 drivers/mfd/mc13xxx-i2c.c\n"
- "\n"
- "diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig\n"
- "index 9ce1d42..fbbbdaa 100644\n"
- "--- a/drivers/mfd/Kconfig\n"
- "+++ b/drivers/mfd/Kconfig\n"
- "@@ -455,6 +455,11 @@ config MFD_MC13XXX_SPI\n"
- " \tselect MFD_MC13XXX\n"
- " \tdepends on SPI_MASTER && (MFD_MC13783 || MFD_MC13892)\n"
- " \n"
- "+config MFD_MC13XXX_I2C\n"
- "+\ttristate \"Support Freescale MC13892 via I2C interface\"\n"
- "+\tselect MFD_MC13XXX\n"
- "+\tdepends on I2C && MFD_MC13892\n"
- "+\n"
- " config PCF50633_ADC\n"
- " \ttristate \"Support for NXP PCF50633 ADC\"\n"
- " \tdepends on MFD_PCF50633\n"
- "diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile\n"
- "index 492e881..b7d774f 100644\n"
- "--- a/drivers/mfd/Makefile\n"
- "+++ b/drivers/mfd/Makefile\n"
- "@@ -43,6 +43,7 @@ obj-$(CONFIG_TWL6030_PWM)\t+= twl6030-pwm.o\n"
- " \n"
- " obj-$(CONFIG_MFD_MC13XXX)\t+= mc13xxx-core.o\n"
- " obj-$(CONFIG_MFD_MC13XXX_SPI)\t+= mc13xxx-spi.o\n"
- "+obj-$(CONFIG_MFD_MC13XXX_I2C)\t+= mc13xxx-i2c.o\n"
- " \n"
- " obj-$(CONFIG_MFD_CORE)\t\t+= mfd-core.o\n"
- " \n"
- "diff --git a/drivers/mfd/mc13xxx-i2c.c b/drivers/mfd/mc13xxx-i2c.c\n"
- "new file mode 100644\n"
- "index 0000000..b3f2f2b\n"
- "--- /dev/null\n"
- "+++ b/drivers/mfd/mc13xxx-i2c.c\n"
- "@@ -0,0 +1,115 @@\n"
- "+/*\n"
- "+ * Copyright 2009-2010 Creative Product Design\n"
- "+ * Marc Reilly marc@cpdesign.com.au\n"
- "+ *\n"
- "+ * This program is free software; you can redistribute it and/or modify it under\n"
- "+ * the terms of the GNU General Public License version 2 as published by the\n"
- "+ * Free Software Foundation.\n"
- "+ */\n"
- "+\n"
- "+#include <linux/slab.h>\n"
- "+#include <linux/module.h>\n"
- "+#include <linux/platform_device.h>\n"
- "+#include <linux/mutex.h>\n"
- "+#include <linux/mfd/core.h>\n"
- "+#include <linux/mfd/mc13xxx.h>\n"
- "+#include <linux/i2c.h>\n"
- "+\n"
- "+static int mc13xxx_i2c_reg_read(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "+\t\tu32 *val)\n"
- "+{\n"
- "+\tint ret;\n"
- "+\tunsigned char buf[3] = {0, 0, 0};\n"
- "+\n"
- "+\tret = i2c_smbus_read_i2c_block_data(mc13xxx->i2cclient,\n"
- "+\t\t\toffset, 3, buf);\n"
- "+\t*val = buf[0] << 16 | buf[1] << 8 | buf[2];\n"
- "+\n"
- "+\treturn ret == 3 ? 0 : ret;\n"
- "+}\n"
- "+\n"
- "+static int mc13xxx_i2c_reg_write(struct mc13xxx *mc13xxx, unsigned int offset,\n"
- "+\t\tu32 val)\n"
- "+{\n"
- "+\tint ret;\n"
- "+\tunsigned char buf[3];\n"
- "+\n"
- "+\tbuf[0] = (val >> 16) & 0xff;\n"
- "+\tbuf[1] = (val >> 8) & 0xff;\n"
- "+\tbuf[2] = val & 0xff;\n"
- "+\n"
- "+\tret = i2c_smbus_write_i2c_block_data(mc13xxx->i2cclient,\n"
- "+\t\t\toffset, 3, buf);\n"
- "+\n"
- "+\treturn ret;\n"
- "+}\n"
- "+\n"
- "+static int mc13xxx_i2c_probe(struct i2c_client *client,\n"
- "+\t\tconst struct i2c_device_id *id)\n"
- "+{\n"
- "+\tstruct mc13xxx *mc13xxx;\n"
- "+\tstruct mc13xxx_platform_data *pdata = dev_get_platdata(&client->dev);\n"
- "+\tint ret;\n"
- "+\n"
- "+\tmc13xxx = kzalloc(sizeof(*mc13xxx), GFP_KERNEL);\n"
- "+\tif (!mc13xxx)\n"
- "+\t\treturn -ENOMEM;\n"
- "+\n"
- "+\tdev_set_drvdata(&client->dev, mc13xxx);\n"
- "+\tmc13xxx->dev = &client->dev;\n"
- "+\tmc13xxx->i2cclient = client;\n"
- "+\tmc13xxx->read_dev = mc13xxx_i2c_reg_read;\n"
- "+\tmc13xxx->write_dev = mc13xxx_i2c_reg_write;\n"
- "+\n"
- "+\tret = mc13xxx_common_init(mc13xxx, pdata, client->irq);\n"
- "+\n"
- "+\tif (ret == 0 && (id->driver_data != mc13xxx->ictype))\n"
- "+\t\tdev_warn(mc13xxx->dev,\n"
- "+\t\t\t\t\"device id doesn't match auto detection!\\n\");\n"
- "+\n"
- "+\treturn ret;\n"
- "+}\n"
- "+\n"
- "+static int __devexit mc13xxx_i2c_remove(struct i2c_client *client)\n"
- "+{\n"
- "+\tstruct mc13xxx *mc13xxx = dev_get_drvdata(&client->dev);\n"
- "+\n"
- "+\tfree_irq(client->irq, mc13xxx);\n"
- "+\n"
- "+\tmfd_remove_devices(&client->dev);\n"
- "+\n"
- "+\tkfree(mc13xxx);\n"
- "+\n"
- "+\treturn 0;\n"
- "+}\n"
- "+\n"
- "+static const struct i2c_device_id mc13xxx_i2c_idtable[] = {\n"
- "+\t{\"mc13892\", MC13XXX_ID_MC13892},\n"
- "+\t{ }\n"
- "+};\n"
- "+\n"
- "+static struct i2c_driver mc13xxx_i2c_driver = {\n"
- "+\t.driver = {\n"
- "+\t\t.owner = THIS_MODULE,\n"
- "+\t\t.name = \"mc13xxx-i2c\"\n"
- "+\t},\n"
- "+\t.id_table = mc13xxx_i2c_idtable,\n"
- "+\t.probe = mc13xxx_i2c_probe,\n"
- "+\t.remove = __devexit_p(mc13xxx_i2c_remove),\n"
- "+};\n"
- "+\n"
- "+static int __init mc13xxx_i2c_init(void)\n"
- "+{\n"
- "+\treturn i2c_add_driver(&mc13xxx_i2c_driver);\n"
- "+}\n"
- "+subsys_initcall(mc13xxx_i2c_init);\n"
- "+\n"
- "+static void __exit mc13xxx_i2c_exit(void)\n"
- "+{\n"
- "+\ti2c_del_driver(&mc13xxx_i2c_driver);\n"
- "+}\n"
- "+module_exit(mc13xxx_i2c_exit);\n"
- "+\n"
- "+MODULE_DESCRIPTION(\"i2c driver for Freescale MC13XXX PMIC\");\n"
- "+MODULE_AUTHOR(\"Marc Reilly <marc@cpdesign.com.au\");\n"
- "+MODULE_LICENSE(\"GPL v2\");\n"
- "diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h\n"
- "index ab7deb3..c5ab08b 100644\n"
- "--- a/include/linux/mfd/mc13xxx.h\n"
- "+++ b/include/linux/mfd/mc13xxx.h\n"
- "@@ -73,7 +73,10 @@ enum mc13xxx_id {\n"
- " };\n"
- " \n"
- " struct mc13xxx {\n"
- "-\tstruct spi_device *spidev;\n"
- "+\tunion {\n"
- "+\t\tstruct spi_device *spidev;\n"
- "+\t\tstruct i2c_client *i2cclient;\n"
- "+\t};\n"
- " \n"
- " \tstruct device *dev;\n"
- " \tenum mc13xxx_id ictype;"
- "\01:6\0"
- "b\0"
- "_______________________________________________\n"
- "linux-arm-kernel mailing list\n"
- "linux-arm-kernel@lists.infradead.org\n"
- http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+ "[1] https://patchwork.kernel.org/patch/449541/\n"
+ "\n"
+ "-------------- next part --------------\n"
+ "A non-text attachment was scrubbed...\n"
+ "Name: v4-1-4-mc13xxx-core-Prepare-for-separate-spi-and-i2c-backends..patch\n"
+ "Type: text/x-patch\n"
+ "Size: 11185 bytes\n"
+ "Desc: not available\n"
+ "URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0004.bin>\n"
+ "-------------- next part --------------\n"
+ "A non-text attachment was scrubbed...\n"
+ "Name: v4-2-4-mc13xxx-core-Kconfig-Config-menu-driven-by-specific-IC-type.patch\n"
+ "Type: text/x-patch\n"
+ "Size: 2740 bytes\n"
+ "Desc: not available\n"
+ "URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0005.bin>\n"
+ "-------------- next part --------------\n"
+ "A non-text attachment was scrubbed...\n"
+ "Name: v4-3-4-mc13xxx-core-Move-spi-specific-code-into-separate-module..patch\n"
+ "Type: text/x-patch\n"
+ "Size: 10876 bytes\n"
+ "Desc: not available\n"
+ "URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0006.bin>\n"
+ "-------------- next part --------------\n"
+ "A non-text attachment was scrubbed...\n"
+ "Name: v4-4-4-mc13xxx-core-Add-i2c-driver.patch\n"
+ "Type: text/x-patch\n"
+ "Size: 5118 bytes\n"
+ "Desc: not available\n"
+ URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20110222/eec38aa9/attachment-0007.bin>
 
-0a0043dc0c68669eaa9f410a5009ff64964d9decff9a34bd10b751e790223b5d
+ced72d6558ee7a33b388e8866c09996517dd0b2a85778e3a1c6bfdc76e8bddf7

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.