[RFC, PATCH 4/4] SoC base drivers: ASIC3 support for iPaq rx3715

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello linux-kernel,

mach-rx3715: Add support for builtin ASIC3 chip, based on the 
asic3_base driver.


 arch/arm/mach-s3c2440/mach-rx3715.c         |   84 +++++++++++++++++++++++++++
 include/asm-arm/arch-s3c2410/rx3000-asic3.h |   63 ++++++++++++++++++++
 include/asm-arm/arch-s3c2410/rx3000.h       |   19 ++++++
 3 files changed, 166 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-s3c2440/mach-rx3715.c b/arch/arm/mach-s3c2440/mach-rx3715.c
index ae1d0a8..0c7285f 100644
--- a/arch/arm/mach-s3c2440/mach-rx3715.c
+++ b/arch/arm/mach-s3c2440/mach-rx3715.c
@@ -2,6 +2,7 @@
  *
  * Copyright (c) 2003,2004 Simtec Electronics
  *	Ben Dooks <[email protected]>
+ * Copyright 2006 Roman Moravcik <[email protected]>
  *
  * http://www.handhelds.org/projects/rx3715.html
  *
@@ -50,6 +51,11 @@
 #include <asm/plat-s3c24xx/cpu.h>
 #include <asm/plat-s3c24xx/pm.h>
 
+#include <linux/soc/asic3_base.h>
+#include <asm/hardware/ipaq-asic3.h>
+#include <asm/arch/rx3000.h>
+#include <asm/arch/rx3000-asic3.h>
+
 static struct map_desc rx3715_iodesc[] __initdata = {
 	/* dump ISA space somewhere unused */
 
@@ -107,6 +113,84 @@ static struct s3c2410_uartcfg rx3715_uartcfgs[] = {
 	}
 };
 
+/* ASIC3 SoC data */
+static struct asic3_platform_data rx3715_asic3_cfg = {
+	.gpio_a = {
+		.dir            = 0xffff,
+		.init           = 0x0028,
+		.sleep_mask     = 0xffff,
+		.sleep_out      = 0x0030,
+		.batt_fault_out = 0x0030,
+		.alt_function   = 0x0000,
+		.sleep_conf     = 0x0008,
+	},
+	.gpio_b = {
+		.dir            = 0xffff,
+		.init           = 0x1a02,
+		.sleep_mask     = 0xffff,
+		.sleep_out      = 0x0402,
+		.batt_fault_out = 0x0402,
+		.alt_function   = 0x0000,
+		.sleep_conf     = 0x0008,
+	},
+	.gpio_c = {
+		.dir            = 0xffff,
+		.init           = 0x0600,
+		.sleep_mask     = 0xffff,
+		.sleep_out      = 0x0000,
+		.batt_fault_out = 0x0000,
+		.alt_function   = 0x0007,
+		.sleep_conf     = 0x0008,
+	},
+	.gpio_d = {
+		.dir            = 0xfff0,
+		.init           = 0x0040,
+		.sleep_mask     = 0xfff0,
+		.sleep_out      = 0x0000,
+		.batt_fault_out = 0x0000,
+		.alt_function   = 0x0000,
+		.sleep_conf     = 0x0008,
+	},
+	.irq_base = RX3000_ASIC3_IRQ_BASE,
+
+	/*.child_platform_devs = child_devices,
+	.num_child_platform_devs = ARRAY_SIZE(child_devices),*/
+};
+
+static struct resource s3c_asic3_resources[] = {
+	[0] = {
+		.start  = 0x08000000,
+		.end    = 0x08000000 + IPAQ_ASIC3_MAP_SIZE - 1,
+		.flags  = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start  = IRQ_EINT12,
+		.end    = IRQ_EINT12,
+		.flags  = IORESOURCE_IRQ,
+	},
+	/* SD part */
+	[2] = {
+		.start	= 0x10000000,
+		.end	= 0x10000000 + IPAQ_ASIC3_MAP_SIZE - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+	[3] = {
+		.start	= IRQ_EINT14,
+		.end	= IRQ_EINT14,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+struct platform_device s3c_device_asic3 = {
+	.name           = "asic3",
+	.id             = 0,
+	.num_resources  = ARRAY_SIZE(s3c_asic3_resources),
+	.resource       = s3c_asic3_resources,
+	.dev = { .platform_data = &rx3715_asic3_cfg, }
+};
+
+EXPORT_SYMBOL(s3c_device_asic3);
+
 /* framebuffer lcd controller information */
 
 static struct s3c2410fb_mach_info rx3715_lcdcfg __initdata = {
diff --git a/include/asm-arm/arch-s3c2410/rx3000-asic3.h b/include/asm-arm/arch-s3c2410/rx3000-asic3.h
new file mode 100644
index 0000000..5ffbeb4
--- /dev/null
+++ b/include/asm-arm/arch-s3c2410/rx3000-asic3.h
@@ -0,0 +1,63 @@
+/*
+ * linux/include/asm-arm/arch-s3c2410/rx3000-asic3.h
+ *
+ * Written by Roman Moravcik <[email protected]>
+ *
+ * Use consistent with the GNU GPL is permitted,
+ * provided that this copyright notice is
+ * preserved in its entirety in all copies and derived works.
+ *
+ */
+
+#ifndef __ASM_ARCH_RX3000_ASIC3_H
+#define __ASM_ARCH_RX3000_ASIC3_H "rx3000-asic3.h"
+
+#include <asm/hardware/ipaq-asic3.h>
+
+/* GPIOA */
+#define ASIC3_GPA0			(1 << 0)  /* charger enable, 0 = disable, 1 = enable */
+#define ASIC3_GPA1			(1 << 1)  /* audio mute, 0 = mute, 1 = unmute */
+#define ASIC3_GPA2			(1 << 2)  /* audio reset, 0 = disable, 1 = enable */
+#define ASIC3_GPA3			(1 << 3)  /* usb d+ pullup, 0 = disable, 1 = enable */
+#define ASIC3_GPA13			(1 << 13) /* charger mode, 0 = slow, 1 = fast */
+#define ASIC3_GPA15			(1 << 15) /* bluetooth clock 32kHz, 0 = disable, 1 = enable */
+
+/* GPIOB */
+#define ASIC3_GPB1			(1 << 1)  /* backup battery charger enable, 0 = enable, 1 = disable */
+#define ASIC3_GPB2			(1 << 2)  /* rs232 level convertor supply, 0 = off, 1 = on */
+#define ASIC3_GPB3			(1 << 3)  /* wlan supply, 0 = off, 1 = on */
+#define ASIC3_GPB10			(1 << 10) 
+#define ASIC3_GPB11			(1 << 11) /* lcd supply, 0 = off, 1 = on */
+#define ASIC3_GPB12			(1 << 12) /* lcd supply, 0 = off, 1 = on */
+
+/* GPIOC */
+#define ASIC3_GPC0			(1 << 0)  /* green led */
+#define ASIC3_GPC1			(1 << 1)  /* red led */
+#define ASIC3_GPC2			(1 << 2)  /* blue led */
+#define ASIC3_GPC4			(1 << 4)  /* camera supply, 0 = off, 1 = on */
+#define ASIC3_GPC5			(1 << 5)  /* camera supply, 0 = off, 1 = on */
+#define ASIC3_GPC7			(1 << 7)  /* audio supply, 0 = off, 1 = on */
+#define ASIC3_GPC9			(1 << 9)  /* lcd supply, 0 = off, 1 = on */
+#define ASIC3_GPC10			(1 << 10) /* lcd supply, 0 = off, 1 = on */
+#define ASIC3_GPC11			(1 << 11) /* wlan supply, 0 = off, 1 = on */
+#define ASIC3_GPC12			(1 << 12) /* bluetooth supply, 0 = off, 1 = on */
+#define ASIC3_GPC13			(1 << 13) /* wlan supply, 0 = off, 1 = on */
+
+/* GPIOD */
+#define ASIC3_GPD0      		(1 << 0)  /* right button */
+#define ASIC3_GPD1       		(1 << 1)  /* down button */
+#define ASIC3_GPD2	        	(1 << 2)  /* left button */
+#define ASIC3_GPD3		        (1 << 3)  /* up button */
+
+/* ASIC3 IRQs */
+#define IRQ_ASIC3_EINT0 	        (ASIC3_GPIOD_IRQ_BASE + 0) /* right button */
+#define IRQ_ASIC3_EINT1 		(ASIC3_GPIOD_IRQ_BASE + 1) /* down button */
+#define IRQ_ASIC3_EINT2			(ASIC3_GPIOD_IRQ_BASE + 2) /* left button */
+#define IRQ_ASIC3_EINT3			(ASIC3_GPIOD_IRQ_BASE + 3) /* up button */
+
+/* ASIC3 LEDS */
+#define ASIC3_LED0       		(0) /* green led */
+#define ASIC3_LED1	                (1) /* red led */
+#define ASIC3_LED2              	(2) /* blue led */
+
+#endif  // __ASM_ARCH_RX3000_ASIC3_H
diff --git a/include/asm-arm/arch-s3c2410/rx3000.h b/include/asm-arm/arch-s3c2410/rx3000.h
new file mode 100644
index 0000000..faa32ea
--- /dev/null
+++ b/include/asm-arm/arch-s3c2410/rx3000.h
@@ -0,0 +1,19 @@
+/*
+ * linux/include/asm-arm/arch-s3c2410/rx3000.h
+ *
+ * Written by Roman Moravcik <[email protected]>
+ *
+ * Use consistent with the GNU GPL is permitted,
+ * provided that this copyright notice is
+ * preserved in its entirety in all copies and derived works.
+ *
+ */
+
+#ifndef __ASM_ARCH_RX3000_H
+#define __ASM_ARCH_RX3000_H
+
+#include <asm/arch/irqs.h>
+
+#define RX3000_ASIC3_IRQ_BASE (IRQ_S3C2440_AC97 + 1)
+
+#endif  // __ASM_ARCH_RX3000_H


-- 
Best regards,
 Paul                          mailto:[email protected]

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux