[PATCH 2/3] ARM: mmp: enable one wire controller in ttc dkb

Haojian Zhuang haojian.zhuang at marvell.com
Fri Apr 15 06:05:26 EDT 2011


Enable one wire controller in TTC DKB platform.

Signed-off-by: Haojian Zhuang <haojian.zhuang at marvell.com>
---
 arch/arm/mach-mmp/include/mach/mfp-pxa910.h |    3 +++
 arch/arm/mach-mmp/include/mach/pxa910.h     |    2 ++
 arch/arm/mach-mmp/pxa910.c                  |   15 +++++++++++++++
 arch/arm/mach-mmp/ttc_dkb.c                 |   13 ++++++++++++-
 4 files changed, 32 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
index fbd7ee8..4f8b7e8 100644
--- a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
+++ b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h
@@ -40,6 +40,9 @@
 #define GPIO124_MN_CLK_OUT	MFP_CFG_DRV(GPIO124, AF1, MEDIUM)
 #define GPIO123_CLK_REQ		MFP_CFG_DRV(GPIO123, AF0, MEDIUM)
 
+/* one wire */
+#define ONEWIRE_CLK_REQ		MFP_CFG(GPIO123, AF2)
+
 /* DFI */
 #define DF_IO0_ND_IO0		MFP_CFG(DF_IO0, AF0)
 #define DF_IO1_ND_IO1		MFP_CFG(DF_IO1, AF0)
diff --git a/arch/arm/mach-mmp/include/mach/pxa910.h b/arch/arm/mach-mmp/include/mach/pxa910.h
index 91be755..38afd28 100644
--- a/arch/arm/mach-mmp/include/mach/pxa910.h
+++ b/arch/arm/mach-mmp/include/mach/pxa910.h
@@ -21,6 +21,8 @@ extern struct pxa_device_desc pxa910_device_pwm3;
 extern struct pxa_device_desc pxa910_device_pwm4;
 extern struct pxa_device_desc pxa910_device_nand;
 
+extern struct platform_device pxa910_device_1wire;
+
 static inline int pxa910_add_uart(int id)
 {
 	struct pxa_device_desc *d = NULL;
diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c
index 8f92ccd..b1c9fcf 100644
--- a/arch/arm/mach-mmp/pxa910.c
+++ b/arch/arm/mach-mmp/pxa910.c
@@ -13,6 +13,7 @@
 #include <linux/init.h>
 #include <linux/list.h>
 #include <linux/io.h>
+#include <linux/platform_device.h>
 
 #include <asm/mach/time.h>
 #include <mach/addr-map.h>
@@ -109,6 +110,7 @@ static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000);
 static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
 static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
 static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
+static APBC_CLK(w1, PXA910_ONEWIRE, 0, 26000000);
 
 static APMU_CLK(nand, NAND, 0x01db, 208000000);
 static APMU_CLK(u2o, USB, 0x1b, 480000000);
@@ -125,6 +127,7 @@ static struct clk_lookup pxa910_clkregs[] = {
 	INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL),
 	INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
 	INIT_CLKREG(&clk_u2o, "pxa-u2o", "U2OCLK"),
+	INIT_CLKREG(&clk_w1, "pxa3xx-w1", NULL),
 };
 
 static int __init pxa910_init(void)
@@ -180,3 +183,15 @@ PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10);
 PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10);
 PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10);
 PXA910_DEVICE(nand, "pxa3xx-nand", -1, NAND, 0xd4283000, 0x80, 97, 99);
+
+static struct resource pxa910_resource_1wire[] = {
+	{0xd4011800,         0xd4011813,         "ds1wm-mem", IORESOURCE_MEM,},
+	{IRQ_PXA910_ONEWIRE, IRQ_PXA910_ONEWIRE, "ds1wm-irq", IORESOURCE_IRQ,},
+};
+
+struct platform_device pxa910_device_1wire = {
+	.name		= "pxa3xx-w1",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(pxa910_resource_1wire),
+	.resource	= pxa910_resource_1wire,
+};
diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c
index e411039..1820071 100644
--- a/arch/arm/mach-mmp/ttc_dkb.c
+++ b/arch/arm/mach-mmp/ttc_dkb.c
@@ -11,10 +11,11 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
+#include <linux/interrupt.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/onenand.h>
-#include <linux/interrupt.h>
+#include <linux/mfd/ds1wm.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -55,6 +56,9 @@ static unsigned long ttc_dkb_pin_config[] __initdata = {
 	DF_WEn_DF_WEn,
 	DF_REn_DF_REn,
 	DF_RDY0_DF_RDY0,
+
+	/* ONE WIRE */
+	ONEWIRE_CLK_REQ,
 };
 
 static struct mtd_partition ttc_dkb_onenand_partitions[] = {
@@ -109,7 +113,12 @@ static struct platform_device ttc_dkb_device_onenand = {
 	},
 };
 
+static struct ds1wm_driver_data ttc_dkb_1wire_data = {
+	.active_high	= 1,
+};
+
 static struct platform_device *ttc_dkb_devices[] = {
+	&pxa910_device_1wire,
 	&ttc_dkb_device_onenand,
 };
 
@@ -121,6 +130,8 @@ static void __init ttc_dkb_init(void)
 	pxa910_add_uart(1);
 
 	/* off-chip devices */
+	platform_device_add_data(&pxa910_device_1wire, &ttc_dkb_1wire_data,
+				 sizeof(struct ds1wm_driver_data));
 	platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices));
 }
 
-- 
1.5.6.5




More information about the linux-arm-kernel mailing list