linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/3] arm:davinci: prepare to move aemif driver to drivers/mfd
@ 2012-01-25 10:25 Manjunathappa, Prakash
  2012-01-25 10:25 ` [PATCH v2 2/3] arm:davinci: Move emif driver to drivers/mfd from mach-davinci folder Manjunathappa, Prakash
  2012-01-25 10:25 ` [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves Manjunathappa, Prakash
  0 siblings, 2 replies; 7+ messages in thread
From: Manjunathappa, Prakash @ 2012-01-25 10:25 UTC (permalink / raw)
  To: linux-arm-kernel, linux-mtd, linux-kernel
  Cc: Sekhar Nori, davinci-linux-open-source, Russell King,
	David Woodhouse, Samuel Ortiz, Manjunathappa, Prakash

Patch moves emif header file appropriately as a part preparation to move emif
driver from arch/arm/mach-davinci/ to drivers/mfd folder.
There by it isolates modifications in emif interface depicting as platform code
change.

Patch series are based on the discussion and concerns expressed in
davinci-linux-open-source community. Here is the link for the same:
http://davinci-linux-open-source.1494791.n2.nabble.com/PATCH-arm-davinci-configure-davinci-aemif-chipselects-through-OF-tt7059739.html#none

Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
---
Since v1:
Patch is generated using -M option.

 arch/arm/mach-davinci/aemif.c                      |    2 +-
 arch/arm/mach-davinci/board-da830-evm.c            |    2 +-
 arch/arm/mach-davinci/board-da850-evm.c            |    2 +-
 drivers/mtd/nand/davinci_nand.c                    |    2 +-
 .../aemif.h => include/linux/mfd/davinci_aemif.h   |    0
 5 files changed, 4 insertions(+), 4 deletions(-)
 rename arch/arm/mach-davinci/include/mach/aemif.h => include/linux/mfd/davinci_aemif.h (100%)

diff --git a/arch/arm/mach-davinci/aemif.c b/arch/arm/mach-davinci/aemif.c
index 1ce70a9..b67c115 100644
--- a/arch/arm/mach-davinci/aemif.c
+++ b/arch/arm/mach-davinci/aemif.c
@@ -15,7 +15,7 @@
 #include <linux/module.h>
 #include <linux/time.h>
 
-#include <mach/aemif.h>
+#include <linux/mfd/davinci_aemif.h>
 
 /* Timing value configuration */
 
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
index dc1afe5..0b43554 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -31,7 +31,7 @@
 #include <mach/nand.h>
 #include <mach/da8xx.h>
 #include <mach/usb.h>
-#include <mach/aemif.h>
+#include <linux/mfd/davinci_aemif.h>
 #include <mach/spi.h>
 
 #define DA830_EVM_PHY_ID		""
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index 6b22b54..6dda013 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -41,7 +41,7 @@
 #include <mach/da8xx.h>
 #include <mach/nand.h>
 #include <mach/mux.h>
-#include <mach/aemif.h>
+#include <linux/mfd/davinci_aemif.h>
 #include <mach/spi.h>
 
 #define DA850_EVM_PHY_ID		"0:00"
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
index 6e56615..f19151b 100644
--- a/drivers/mtd/nand/davinci_nand.c
+++ b/drivers/mtd/nand/davinci_nand.c
@@ -35,7 +35,7 @@
 #include <linux/slab.h>
 
 #include <mach/nand.h>
-#include <mach/aemif.h>
+#include <linux/mfd/davinci_aemif.h>
 
 /*
  * This is a device driver for the NAND flash controller found on the
diff --git a/arch/arm/mach-davinci/include/mach/aemif.h b/include/linux/mfd/davinci_aemif.h
similarity index 100%
rename from arch/arm/mach-davinci/include/mach/aemif.h
rename to include/linux/mfd/davinci_aemif.h
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 2/3] arm:davinci: Move emif driver to drivers/mfd from mach-davinci folder
  2012-01-25 10:25 [PATCH v2 1/3] arm:davinci: prepare to move aemif driver to drivers/mfd Manjunathappa, Prakash
@ 2012-01-25 10:25 ` Manjunathappa, Prakash
  2012-01-25 10:25 ` [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves Manjunathappa, Prakash
  1 sibling, 0 replies; 7+ messages in thread
From: Manjunathappa, Prakash @ 2012-01-25 10:25 UTC (permalink / raw)
  To: linux-arm-kernel, linux-mtd, linux-kernel
  Cc: Sekhar Nori, davinci-linux-open-source, Russell King,
	David Woodhouse, Samuel Ortiz, Manjunathappa, Prakash

Move aemif kernel module from arch/arm/amch-davinci/ to multi functional
devices frame work.

Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
---
Since v1:
Patch is generated using -M option.

 arch/arm/Kconfig                  |    1 +
 arch/arm/mach-davinci/Makefile    |    4 +-
 arch/arm/mach-davinci/aemif.c     |  133 ---------------------
 drivers/mfd/Makefile              |    1 +
 drivers/mfd/davinci_aemif.c       |  238 +++++++++++++++++++++++++++++++++++++
 include/linux/mfd/davinci_aemif.h |   14 ++
 6 files changed, 256 insertions(+), 135 deletions(-)
 delete mode 100644 arch/arm/mach-davinci/aemif.c
 create mode 100644 drivers/mfd/davinci_aemif.c

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 24626b0..5b717cf 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -936,6 +936,7 @@ config ARCH_DAVINCI
 	select GENERIC_ALLOCATOR
 	select GENERIC_IRQ_CHIP
 	select ARCH_HAS_HOLES_MEMORYMODEL
+	select MFD_CORE
 	help
 	  Support for TI's DaVinci platform.
 
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
index 2db78bd..e25a459 100644
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -4,8 +4,8 @@
 #
 
 # Common objects
-obj-y 			:= time.o clock.o serial.o psc.o \
-			   dma.o usb.o common.o sram.o aemif.o
+obj-y 			:= time.o clock.o serial.o io.o psc.o \
+			   dma.o usb.o common.o sram.o
 
 obj-$(CONFIG_DAVINCI_MUX)		+= mux.o
 
diff --git a/arch/arm/mach-davinci/aemif.c b/arch/arm/mach-davinci/aemif.c
deleted file mode 100644
index b67c115..0000000
--- a/arch/arm/mach-davinci/aemif.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * AEMIF support for DaVinci SoCs
- *
- * Copyright (C) 2010 Texas Instruments Incorporated. http://www.ti.com/
- *
- * 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/kernel.h>
-#include <linux/io.h>
-#include <linux/err.h>
-#include <linux/clk.h>
-#include <linux/module.h>
-#include <linux/time.h>
-
-#include <linux/mfd/davinci_aemif.h>
-
-/* Timing value configuration */
-
-#define TA(x)		((x) << 2)
-#define RHOLD(x)	((x) << 4)
-#define RSTROBE(x)	((x) << 7)
-#define RSETUP(x)	((x) << 13)
-#define WHOLD(x)	((x) << 17)
-#define WSTROBE(x)	((x) << 20)
-#define WSETUP(x)	((x) << 26)
-
-#define TA_MAX		0x3
-#define RHOLD_MAX	0x7
-#define RSTROBE_MAX	0x3f
-#define RSETUP_MAX	0xf
-#define WHOLD_MAX	0x7
-#define WSTROBE_MAX	0x3f
-#define WSETUP_MAX	0xf
-
-#define TIMING_MASK	(TA(TA_MAX) | \
-				RHOLD(RHOLD_MAX) | \
-				RSTROBE(RSTROBE_MAX) |	\
-				RSETUP(RSETUP_MAX) | \
-				WHOLD(WHOLD_MAX) | \
-				WSTROBE(WSTROBE_MAX) | \
-				WSETUP(WSETUP_MAX))
-
-/*
- * aemif_calc_rate - calculate timing data.
- * @wanted: The cycle time needed in nanoseconds.
- * @clk: The input clock rate in kHz.
- * @max: The maximum divider value that can be programmed.
- *
- * On success, returns the calculated timing value minus 1 for easy
- * programming into AEMIF timing registers, else negative errno.
- */
-static int aemif_calc_rate(int wanted, unsigned long clk, int max)
-{
-	int result;
-
-	result = DIV_ROUND_UP((wanted * clk), NSEC_PER_MSEC) - 1;
-
-	pr_debug("%s: result %d from %ld, %d\n", __func__, result, clk, wanted);
-
-	/* It is generally OK to have a more relaxed timing than requested... */
-	if (result < 0)
-		result = 0;
-
-	/* ... But configuring tighter timings is not an option. */
-	else if (result > max)
-		result = -EINVAL;
-
-	return result;
-}
-
-/**
- * davinci_aemif_setup_timing - setup timing values for a given AEMIF interface
- * @t: timing values to be progammed
- * @base: The virtual base address of the AEMIF interface
- * @cs: chip-select to program the timing values for
- *
- * This function programs the given timing values (in real clock) into the
- * AEMIF registers taking the AEMIF clock into account.
- *
- * This function does not use any locking while programming the AEMIF
- * because it is expected that there is only one user of a given
- * chip-select.
- *
- * Returns 0 on success, else negative errno.
- */
-int davinci_aemif_setup_timing(struct davinci_aemif_timing *t,
-					void __iomem *base, unsigned cs)
-{
-	unsigned set, val;
-	int ta, rhold, rstrobe, rsetup, whold, wstrobe, wsetup;
-	unsigned offset = A1CR_OFFSET + cs * 4;
-	struct clk *aemif_clk;
-	unsigned long clkrate;
-
-	if (!t)
-		return 0;	/* Nothing to do */
-
-	aemif_clk = clk_get(NULL, "aemif");
-	if (IS_ERR(aemif_clk))
-		return PTR_ERR(aemif_clk);
-
-	clkrate = clk_get_rate(aemif_clk);
-
-	clkrate /= 1000;	/* turn clock into kHz for ease of use */
-
-	ta	= aemif_calc_rate(t->ta, clkrate, TA_MAX);
-	rhold	= aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
-	rstrobe	= aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);
-	rsetup	= aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);
-	whold	= aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
-	wstrobe	= aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
-	wsetup	= aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);
-
-	if (ta < 0 || rhold < 0 || rstrobe < 0 || rsetup < 0 ||
-			whold < 0 || wstrobe < 0 || wsetup < 0) {
-		pr_err("%s: cannot get suitable timings\n", __func__);
-		return -EINVAL;
-	}
-
-	set = TA(ta) | RHOLD(rhold) | RSTROBE(rstrobe) | RSETUP(rsetup) |
-		WHOLD(whold) | WSTROBE(wstrobe) | WSETUP(wsetup);
-
-	val = __raw_readl(base + offset);
-	val &= ~TIMING_MASK;
-	val |= set;
-	__raw_writel(val, base + offset);
-
-	return 0;
-}
-EXPORT_SYMBOL(davinci_aemif_setup_timing);
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index b953bab..54fc267 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -11,6 +11,7 @@ obj-$(CONFIG_HTC_EGPIO)		+= htc-egpio.o
 obj-$(CONFIG_HTC_PASIC3)	+= htc-pasic3.o
 obj-$(CONFIG_HTC_I2CPLD)	+= htc-i2cpld.o
 
+obj-${CONFIG_ARCH_DAVINCI}	+= davinci_aemif.o
 obj-$(CONFIG_MFD_DAVINCI_VOICECODEC)	+= davinci_voicecodec.o
 obj-$(CONFIG_MFD_DM355EVM_MSP)	+= dm355evm_msp.o
 obj-$(CONFIG_MFD_TI_SSP)	+= ti-ssp.o
diff --git a/drivers/mfd/davinci_aemif.c b/drivers/mfd/davinci_aemif.c
new file mode 100644
index 0000000..ab3292c
--- /dev/null
+++ b/drivers/mfd/davinci_aemif.c
@@ -0,0 +1,238 @@
+/*
+ * AEMIF support for DaVinci SoCs
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated. http://www.ti.com/
+ *
+ * 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/kernel.h>
+#include <linux/io.h>
+#include <linux/err.h>
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/time.h>
+#include <linux/mfd/davinci_aemif.h>
+#include <linux/mtd/physmap.h>
+#include <mach/nand.h>
+
+static struct mfd_cell davinci_emifs[] = {
+	{
+		.name = "davinci_nand",
+	},
+	{
+		.name = "physmap-flash",
+	},
+};
+
+/* Timing value configuration */
+
+#define TA(x)		((x) << 2)
+#define RHOLD(x)	((x) << 4)
+#define RSTROBE(x)	((x) << 7)
+#define RSETUP(x)	((x) << 13)
+#define WHOLD(x)	((x) << 17)
+#define WSTROBE(x)	((x) << 20)
+#define WSETUP(x)	((x) << 26)
+
+#define TA_MAX		0x3
+#define RHOLD_MAX	0x7
+#define RSTROBE_MAX	0x3f
+#define RSETUP_MAX	0xf
+#define WHOLD_MAX	0x7
+#define WSTROBE_MAX	0x3f
+#define WSETUP_MAX	0xf
+
+#define TIMING_MASK	(TA(TA_MAX) | \
+				RHOLD(RHOLD_MAX) | \
+				RSTROBE(RSTROBE_MAX) |	\
+				RSETUP(RSETUP_MAX) | \
+				WHOLD(WHOLD_MAX) | \
+				WSTROBE(WSTROBE_MAX) | \
+				WSETUP(WSETUP_MAX))
+
+/*
+ * aemif_calc_rate - calculate timing data.
+ * @wanted: The cycle time needed in nanoseconds.
+ * @clk: The input clock rate in kHz.
+ * @max: The maximum divider value that can be programmed.
+ *
+ * On success, returns the calculated timing value minus 1 for easy
+ * programming into AEMIF timing registers, else negative errno.
+ */
+static int aemif_calc_rate(int wanted, unsigned long clk, int max)
+{
+	int result;
+
+	result = DIV_ROUND_UP((wanted * clk), NSEC_PER_MSEC) - 1;
+
+	pr_debug("%s: result %d from %ld, %d\n", __func__, result, clk, wanted);
+
+	/* It is generally OK to have a more relaxed timing than requested... */
+	if (result < 0)
+		result = 0;
+
+	/* ... But configuring tighter timings is not an option. */
+	else if (result > max)
+		result = -EINVAL;
+
+	return result;
+}
+
+/**
+ * davinci_aemif_setup_timing - setup timing values for a given AEMIF interface
+ * @t: timing values to be progammed
+ * @base: The virtual base address of the AEMIF interface
+ * @cs: chip-select to program the timing values for
+ *
+ * This function programs the given timing values (in real clock) into the
+ * AEMIF registers taking the AEMIF clock into account.
+ *
+ * This function does not use any locking while programming the AEMIF
+ * because it is expected that there is only one user of a given
+ * chip-select.
+ *
+ * Returns 0 on success, else negative errno.
+ */
+int davinci_aemif_setup_timing(struct davinci_aemif_timing *t,
+					void __iomem *base, unsigned cs)
+{
+	unsigned set, val;
+	int ta, rhold, rstrobe, rsetup, whold, wstrobe, wsetup;
+	unsigned offset = A1CR_OFFSET + cs * 4;
+	struct clk *aemif_clk;
+	unsigned long clkrate;
+
+	if (!t)
+		return 0;	/* Nothing to do */
+
+	aemif_clk = clk_get(NULL, "aemif");
+	if (IS_ERR(aemif_clk))
+		return PTR_ERR(aemif_clk);
+
+	clkrate = clk_get_rate(aemif_clk);
+
+	clkrate /= 1000;	/* turn clock into kHz for ease of use */
+
+	ta	= aemif_calc_rate(t->ta, clkrate, TA_MAX);
+	rhold	= aemif_calc_rate(t->rhold, clkrate, RHOLD_MAX);
+	rstrobe	= aemif_calc_rate(t->rstrobe, clkrate, RSTROBE_MAX);
+	rsetup	= aemif_calc_rate(t->rsetup, clkrate, RSETUP_MAX);
+	whold	= aemif_calc_rate(t->whold, clkrate, WHOLD_MAX);
+	wstrobe	= aemif_calc_rate(t->wstrobe, clkrate, WSTROBE_MAX);
+	wsetup	= aemif_calc_rate(t->wsetup, clkrate, WSETUP_MAX);
+
+	if (ta < 0 || rhold < 0 || rstrobe < 0 || rsetup < 0 ||
+			whold < 0 || wstrobe < 0 || wsetup < 0) {
+		pr_err("%s: cannot get suitable timings\n", __func__);
+		return -EINVAL;
+	}
+
+	set = TA(ta) | RHOLD(rhold) | RSTROBE(rstrobe) | RSETUP(rsetup) |
+		WHOLD(whold) | WSTROBE(wstrobe) | WSETUP(wsetup);
+
+	val = __raw_readl(base + offset);
+	val &= ~TIMING_MASK;
+	val |= set;
+	__raw_writel(val, base + offset);
+
+	return 0;
+}
+EXPORT_SYMBOL(davinci_aemif_setup_timing);
+
+static int __init davinci_aemif_probe(struct platform_device *pdev)
+{
+	struct davinci_aemif_devices *davinci_aemif_devices =
+		pdev->dev.platform_data;
+	struct platform_device *devices;
+	struct mfd_cell *cells;
+	int i, ret;
+
+	devices = davinci_aemif_devices->devices;
+	cells = davinci_emifs;
+
+	/* DaVinci NAND device client */
+	for (i = 0; i < davinci_aemif_devices->num_devices; i++) {
+		if (!strcmp(devices[i].name,
+					cells[DAVINCI_NAND_DEVICE_CELL].name))
+			break;
+
+	}
+	if (i > davinci_aemif_devices->num_devices) {
+		dev_err(&pdev->dev, "No NAND device found by DaVinci EMIF"
+				"MFD\n");
+		cells[DAVINCI_NAND_DEVICE_CELL].name = NULL;
+	} else {
+		cells[DAVINCI_NAND_DEVICE_CELL].platform_data =
+			devices[i].dev.platform_data;
+		cells[DAVINCI_NAND_DEVICE_CELL].pdata_size =
+			sizeof(struct davinci_nand_pdata);
+		cells[DAVINCI_NAND_DEVICE_CELL].id = devices[i].id;
+		cells[DAVINCI_NAND_DEVICE_CELL].resources =
+			devices[i].resource;
+		cells[DAVINCI_NAND_DEVICE_CELL].num_resources =
+			devices[i].num_resources;
+	}
+
+	/* DaVinci NOR device client */
+	for (i = 0; i < davinci_aemif_devices->num_devices; i++) {
+		if (!strcmp(devices[i].name,
+					cells[DAVINCI_NOR_FLASH_CELL].name))
+			break;
+	}
+
+	if (i > davinci_aemif_devices->num_devices) {
+		dev_err(&pdev->dev, "No NOR device found by DaVinci EMIF"
+				"MFD\n");
+		cells[DAVINCI_NOR_FLASH_CELL].name = NULL;
+	} else {
+		cells[DAVINCI_NOR_FLASH_CELL].platform_data =
+			devices[i].dev.platform_data;
+		cells[DAVINCI_NOR_FLASH_CELL].pdata_size =
+			sizeof(struct physmap_flash_data);
+		cells[DAVINCI_NOR_FLASH_CELL].id = devices[i].id;
+		cells[DAVINCI_NOR_FLASH_CELL].resources = devices[i].resource;
+		cells[DAVINCI_NOR_FLASH_CELL].num_resources =
+			devices[i].num_resources;
+	}
+
+	ret = mfd_add_devices(&pdev->dev, pdev->id, cells,
+			      davinci_aemif_devices->num_devices, NULL, 0);
+	if (ret != 0)
+		dev_err(&pdev->dev, "fail to register client devices\n");
+
+	return 0;
+}
+
+static int __devexit davinci_aemif_remove(struct platform_device *pdev)
+{
+	mfd_remove_devices(&pdev->dev);
+	return 0;
+}
+
+static struct platform_driver davinci_aemif_driver = {
+	.driver	= {
+		.name = "davinci_aemif",
+		.owner = THIS_MODULE,
+	},
+	.remove	= __devexit_p(davinci_aemif_remove),
+};
+
+static int __init davinci_aemif_init(void)
+{
+	return platform_driver_probe(&davinci_aemif_driver,
+			davinci_aemif_probe);
+}
+module_init(davinci_aemif_init);
+
+static void __exit davinci_aemif_exit(void)
+{
+	platform_driver_unregister(&davinci_aemif_driver);
+}
+module_exit(davinci_aemif_exit);
+
+MODULE_AUTHOR("Prakash Manjunathappa");
+MODULE_DESCRIPTION("Texas Instruments AEMIF Interface");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/davinci_aemif.h b/include/linux/mfd/davinci_aemif.h
index 05b2934..18650c3 100644
--- a/include/linux/mfd/davinci_aemif.h
+++ b/include/linux/mfd/davinci_aemif.h
@@ -10,6 +10,10 @@
 #ifndef _MACH_DAVINCI_AEMIF_H
 #define _MACH_DAVINCI_AEMIF_H
 
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <linux/mfd/core.h>
+
 #define NRCSR_OFFSET		0x00
 #define AWCCR_OFFSET		0x04
 #define A1CR_OFFSET		0x10
@@ -18,6 +22,16 @@
 #define ACR_EW_MASK		BIT(30)
 #define ACR_SS_MASK		BIT(31)
 
+enum davinci_emif_cells {
+	DAVINCI_NAND_DEVICE_CELL,
+	DAVINCI_NOR_FLASH_CELL,
+};
+
+struct davinci_aemif_devices {
+	struct platform_device *devices;
+	unsigned int num_devices;
+};
+
 /* All timings in nanoseconds */
 struct davinci_aemif_timing {
 	u8	wsetup;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves
  2012-01-25 10:25 [PATCH v2 1/3] arm:davinci: prepare to move aemif driver to drivers/mfd Manjunathappa, Prakash
  2012-01-25 10:25 ` [PATCH v2 2/3] arm:davinci: Move emif driver to drivers/mfd from mach-davinci folder Manjunathappa, Prakash
@ 2012-01-25 10:25 ` Manjunathappa, Prakash
  2012-01-25 14:51   ` Sergei Shtylyov
  1 sibling, 1 reply; 7+ messages in thread
From: Manjunathappa, Prakash @ 2012-01-25 10:25 UTC (permalink / raw)
  To: linux-arm-kernel, linux-mtd, linux-kernel
  Cc: Sekhar Nori, davinci-linux-open-source, Russell King,
	David Woodhouse, Samuel Ortiz, Manjunathappa, Prakash

NAND and NOR device are made as aemif devices slave, hence device
registration achieved via aemif MFD driver.

Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
---
Since v1:
Patch is generated using -M option.

 arch/arm/mach-davinci/board-da830-evm.c |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
index 0b43554..0ad3662 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -396,14 +396,29 @@ static struct resource da830_evm_nand_resources[] = {
 	},
 };
 
-static struct platform_device da830_evm_nand_device = {
-	.name		= "davinci_nand",
-	.id		= 1,
-	.dev		= {
-		.platform_data	= &da830_evm_nand_pdata,
+static struct platform_device da830_evm_devices[] __initdata = {
+	{
+		.name		= "davinci_nand",
+		.id		= 1,
+		.dev		= {
+			.platform_data	= &da830_evm_nand_pdata,
+		},
+		.num_resources	= ARRAY_SIZE(da830_evm_nand_resources),
+		.resource	= da830_evm_nand_resources,
+	},
+};
+
+static struct davinci_aemif_devices da830_emif_devices = {
+	.devices	= da830_evm_devices,
+	.num_devices	= ARRAY_SIZE(da830_evm_devices),
+};
+
+static struct platform_device davinci_emif_device = {
+	.name	= "davinci_aemif",
+	.id	= -1,
+	.dev	= {
+		.platform_data	= &da830_emif_devices,
 	},
-	.num_resources	= ARRAY_SIZE(da830_evm_nand_resources),
-	.resource	= da830_evm_nand_resources,
 };
 
 static inline void da830_evm_init_nand(int mux_mode)
@@ -422,7 +437,7 @@ static inline void da830_evm_init_nand(int mux_mode)
 		pr_warning("da830_evm_init: emif25 mux setup failed: %d\n",
 				ret);
 
-	ret = platform_device_register(&da830_evm_nand_device);
+	ret = platform_device_register(&davinci_emif_device);
 	if (ret)
 		pr_warning("da830_evm_init: NAND device not registered.\n");
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves
  2012-01-25 10:25 ` [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves Manjunathappa, Prakash
@ 2012-01-25 14:51   ` Sergei Shtylyov
  2012-01-30  6:58     ` Manjunathappa, Prakash
  0 siblings, 1 reply; 7+ messages in thread
From: Sergei Shtylyov @ 2012-01-25 14:51 UTC (permalink / raw)
  To: Manjunathappa, Prakash
  Cc: linux-arm-kernel, linux-mtd, linux-kernel,
	davinci-linux-open-source, Russell King, Samuel Ortiz,
	David Woodhouse

Hello.

On 01/25/2012 01:25 PM, Manjunathappa, Prakash wrote:

> NAND and NOR device are made as aemif devices slave, hence device
> registration achieved via aemif MFD driver.

> Signed-off-by: Manjunathappa, Prakash<prakash.pm@ti.com>
> ---
> Since v1:
> Patch is generated using -M option.

>   arch/arm/mach-davinci/board-da830-evm.c |   31 +++++++++++++++++++++++--------
>   1 files changed, 23 insertions(+), 8 deletions(-)

    Why only this file? Don't other board files have NAND/NOR devices?

WBR, Sergei

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves
  2012-01-25 14:51   ` Sergei Shtylyov
@ 2012-01-30  6:58     ` Manjunathappa, Prakash
  2012-01-30 10:40       ` Sergei Shtylyov
  0 siblings, 1 reply; 7+ messages in thread
From: Manjunathappa, Prakash @ 2012-01-30  6:58 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: linux-arm-kernel, linux-mtd, linux-kernel,
	davinci-linux-open-source, Russell King, Samuel Ortiz,
	David Woodhouse

Hi Sergei,

On Wed, Jan 25, 2012 at 20:21:32, Sergei Shtylyov wrote:
> Hello.
> 
> On 01/25/2012 01:25 PM, Manjunathappa, Prakash wrote:
> 
> > NAND and NOR device are made as aemif devices slave, hence device
> > registration achieved via aemif MFD driver.
> 
> > Signed-off-by: Manjunathappa, Prakash<prakash.pm@ti.com>
> > ---
> > Since v1:
> > Patch is generated using -M option.
> 
> >   arch/arm/mach-davinci/board-da830-evm.c |   31 +++++++++++++++++++++++--------
> >   1 files changed, 23 insertions(+), 8 deletions(-)
> 
>     Why only this file? Don't other board files have NAND/NOR devices?

Yes I thought of sending board-da850 changes in separate patch. Should I have to send those changes also in this patch?

Thanks,
Prakash
> 
> WBR, Sergei
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves
  2012-01-30  6:58     ` Manjunathappa, Prakash
@ 2012-01-30 10:40       ` Sergei Shtylyov
  2012-01-31  7:11         ` Manjunathappa, Prakash
  0 siblings, 1 reply; 7+ messages in thread
From: Sergei Shtylyov @ 2012-01-30 10:40 UTC (permalink / raw)
  To: Manjunathappa, Prakash
  Cc: linux-arm-kernel, linux-mtd, linux-kernel,
	davinci-linux-open-source, Russell King, Samuel Ortiz,
	David Woodhouse

Hello.

On 30-01-2012 10:58, Manjunathappa, Prakash wrote:

>>> NAND and NOR device are made as aemif devices slave, hence device
>>> registration achieved via aemif MFD driver.

>>> Signed-off-by: Manjunathappa, Prakash<prakash.pm@ti.com>
>>> ---
>>> Since v1:
>>> Patch is generated using -M option.

>>>    arch/arm/mach-davinci/board-da830-evm.c |   31 +++++++++++++++++++++++--------
>>>    1 files changed, 23 insertions(+), 8 deletions(-)

>>      Why only this file? Don't other board files have NAND/NOR devices?

> Yes I thought of sending board-da850 changes in separate patch. Should I have to send those changes also in this patch?

    There's also board-dm*.c files. I'd done them all in the same patch.

> Thanks,
> Prakash

WBR, Sergei

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves
  2012-01-30 10:40       ` Sergei Shtylyov
@ 2012-01-31  7:11         ` Manjunathappa, Prakash
  0 siblings, 0 replies; 7+ messages in thread
From: Manjunathappa, Prakash @ 2012-01-31  7:11 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: linux-arm-kernel, linux-mtd, linux-kernel,
	davinci-linux-open-source, Russell King, Samuel Ortiz,
	David Woodhouse

Hi Sergei,

On Mon, Jan 30, 2012 at 16:10:31, Sergei Shtylyov wrote:
> Hello.
> 
> On 30-01-2012 10:58, Manjunathappa, Prakash wrote:
> 
> >>> NAND and NOR device are made as aemif devices slave, hence device
> >>> registration achieved via aemif MFD driver.
> 
> >>> Signed-off-by: Manjunathappa, Prakash<prakash.pm@ti.com>
> >>> ---
> >>> Since v1:
> >>> Patch is generated using -M option.
> 
> >>>    arch/arm/mach-davinci/board-da830-evm.c |   31 +++++++++++++++++++++++--------
> >>>    1 files changed, 23 insertions(+), 8 deletions(-)
> 
> >>      Why only this file? Don't other board files have NAND/NOR devices?
> 
> > Yes I thought of sending board-da850 changes in separate patch. Should I have to send those changes also in this patch?
> 
>     There's also board-dm*.c files. I'd done them all in the same patch.

ok, I will consider all davinci board changes in next version of patch.

Thanks,
Prakash

> 
> WBR, Sergei
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-01-31  7:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-25 10:25 [PATCH v2 1/3] arm:davinci: prepare to move aemif driver to drivers/mfd Manjunathappa, Prakash
2012-01-25 10:25 ` [PATCH v2 2/3] arm:davinci: Move emif driver to drivers/mfd from mach-davinci folder Manjunathappa, Prakash
2012-01-25 10:25 ` [PATCH v2 3/3] arm: da830: move NAND and NOR devices as aemif MFD slaves Manjunathappa, Prakash
2012-01-25 14:51   ` Sergei Shtylyov
2012-01-30  6:58     ` Manjunathappa, Prakash
2012-01-30 10:40       ` Sergei Shtylyov
2012-01-31  7:11         ` Manjunathappa, Prakash

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).