]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa...
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 6 Aug 2010 17:10:25 +0000 (18:10 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 6 Aug 2010 17:10:25 +0000 (18:10 +0100)
Conflicts:
arch/arm/mach-pxa/palmt5.c
arch/arm/mach-pxa/palmtreo.c

82 files changed:
MAINTAINERS
arch/arm/boot/compressed/Makefile
arch/arm/common/it8152.c
arch/arm/include/asm/dma-mapping.h
arch/arm/include/asm/hardware/scoop.h
arch/arm/mach-mmp/aspenite.c
arch/arm/mach-mmp/avengers_lite.c
arch/arm/mach-mmp/common.c
arch/arm/mach-mmp/common.h
arch/arm/mach-mmp/flint.c
arch/arm/mach-mmp/include/mach/devices.h
arch/arm/mach-mmp/include/mach/mmp2.h
arch/arm/mach-mmp/include/mach/pxa168.h
arch/arm/mach-mmp/include/mach/pxa910.h
arch/arm/mach-mmp/irq-mmp2.c
arch/arm/mach-mmp/jasper.c
arch/arm/mach-mmp/mmp2.c
arch/arm/mach-mmp/tavorevb.c
arch/arm/mach-mmp/time.c
arch/arm/mach-mmp/ttc_dkb.c
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/balloon3.c
arch/arm/mach-pxa/cm-x300.c
arch/arm/mach-pxa/colibri-pxa270-evalboard.c [new file with mode: 0644]
arch/arm/mach-pxa/colibri-pxa270-income.c [new file with mode: 0644]
arch/arm/mach-pxa/colibri-pxa270.c
arch/arm/mach-pxa/colibri-pxa320.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/corgi_pm.c
arch/arm/mach-pxa/devices.c
arch/arm/mach-pxa/devices.h
arch/arm/mach-pxa/e330.c [deleted file]
arch/arm/mach-pxa/e350.c [deleted file]
arch/arm/mach-pxa/e400.c [deleted file]
arch/arm/mach-pxa/e740.c [deleted file]
arch/arm/mach-pxa/e750.c [deleted file]
arch/arm/mach-pxa/e800.c [deleted file]
arch/arm/mach-pxa/eseries.c
arch/arm/mach-pxa/imote2.c [deleted file]
arch/arm/mach-pxa/include/mach/balloon3.h
arch/arm/mach-pxa/include/mach/colibri.h
arch/arm/mach-pxa/include/mach/corgi.h
arch/arm/mach-pxa/include/mach/gumstix.h
arch/arm/mach-pxa/include/mach/palm27x.h [new file with mode: 0644]
arch/arm/mach-pxa/include/mach/pata_pxa.h [new file with mode: 0644]
arch/arm/mach-pxa/include/mach/sharpsl.h [deleted file]
arch/arm/mach-pxa/include/mach/sharpsl_pm.h
arch/arm/mach-pxa/include/mach/spitz.h
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/palm27x.c [new file with mode: 0644]
arch/arm/mach-pxa/palmld.c
arch/arm/mach-pxa/palmt5.c
arch/arm/mach-pxa/palmte2.c
arch/arm/mach-pxa/palmtreo.c
arch/arm/mach-pxa/palmtx.c
arch/arm/mach-pxa/palmz72.c
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/pxa25x.c
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/pxa3xx.c
arch/arm/mach-pxa/raumfeld.c
arch/arm/mach-pxa/sharpsl.h [deleted file]
arch/arm/mach-pxa/sharpsl_pm.c
arch/arm/mach-pxa/sleep.S
arch/arm/mach-pxa/spitz.c
arch/arm/mach-pxa/spitz_pm.c
arch/arm/mach-pxa/stargate2.c
arch/arm/mach-pxa/trizeps4.c
arch/arm/mach-pxa/vpac270.c
arch/arm/mach-pxa/z2.c
arch/arm/mach-sa1100/include/mach/irqs.h
arch/arm/plat-pxa/Makefile
arch/arm/plat-pxa/pmu.c [deleted file]
drivers/ata/Kconfig
drivers/ata/Makefile
drivers/ata/pata_pxa.c [new file with mode: 0644]
drivers/pcmcia/Kconfig
drivers/pcmcia/Makefile
drivers/pcmcia/pxa2xx_balloon3.c [new file with mode: 0644]
drivers/power/wm97xx_battery.c
include/linux/wm97xx_batt.h [deleted file]

index 11e34d5272b8aa7f1912af8b07e71a66269ddf03..5fb38d3f1423d61a0312174c77d588908a7e1e02 100644 (file)
@@ -693,6 +693,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
 F:     arch/arm/mach-sa1100/jornada720.c
 F:     arch/arm/mach-sa1100/include/mach/jornada720.h
 
+ARM/INCOME PXA270 SUPPORT
+M:     Marek Vasut <marek.vasut@gmail.com>
+L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+S:     Maintained
+F:     arch/arm/mach-pxa/income.c
+F:     arch/arm/mach-pxa/include/mach-pxa/income.h
+
 ARM/INTEL IOP32X ARM ARCHITECTURE
 M:     Lennert Buytenhek <kernel@wantstofly.org>
 M:     Dan Williams <dan.j.williams@intel.com>
index 7636c9b3f9a7899f9209d9a82fa78de8a6dc9b17..68775e33476c2fafb4c20d88f7f676c836a8edc1 100644 (file)
@@ -33,7 +33,7 @@ ifeq ($(CONFIG_CPU_XSCALE),y)
 OBJS           += head-xscale.o
 endif
 
-ifeq ($(CONFIG_PXA_SHARPSL),y)
+ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y)
 OBJS           += head-sharpsl.o
 endif
 
index 7974baacafcea74ec055a46ee0f6cea496f24e6f..6c091356245593b87860d2ccb6221650fc62855b 100644 (file)
@@ -263,14 +263,6 @@ static int it8152_pci_platform_notify_remove(struct device *dev)
        return 0;
 }
 
-int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
-{
-       dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
-               __func__, dma_addr, size);
-       return (dev->bus == &pci_bus_type) &&
-               ((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
-}
-
 int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
 {
        it8152_io.start = IT8152_IO_BASE + 0x12000;
index 69ce0727edb534d5eb088cf37e810de5bd8e9306..b5ccc6a993d59fc94d8eeb02d857946e4502a959 100644 (file)
@@ -298,7 +298,15 @@ extern void dmabounce_unregister_dev(struct device *);
  * DMA access and 1 if the buffer needs to be bounced.
  *
  */
+#ifdef CONFIG_SA1111
 extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
+#else
+static inline int dma_needs_bounce(struct device *dev, dma_addr_t addr,
+                                  size_t size)
+{
+       return 0;
+}
+#endif
 
 /*
  * The DMA API, implemented by dmabounce.c.  See below for descriptions.
index 46492a63a7c4817ee3763fdadafa85ddbfd1b77e..ebb3ceaa8facf0f277dd2c088cdd22611a7b011c 100644 (file)
 #define SCOOP_GPWR 0x24
 #define SCOOP_GPRR 0x28
 
-#define SCOOP_GPCR_PA22        ( 1 << 12 )
-#define SCOOP_GPCR_PA21        ( 1 << 11 )
-#define SCOOP_GPCR_PA20        ( 1 << 10 )
-#define SCOOP_GPCR_PA19        ( 1 << 9 )
-#define SCOOP_GPCR_PA18        ( 1 << 8 )
-#define SCOOP_GPCR_PA17        ( 1 << 7 )
-#define SCOOP_GPCR_PA16        ( 1 << 6 )
-#define SCOOP_GPCR_PA15        ( 1 << 5 )
-#define SCOOP_GPCR_PA14        ( 1 << 4 )
-#define SCOOP_GPCR_PA13        ( 1 << 3 )
-#define SCOOP_GPCR_PA12        ( 1 << 2 )
-#define SCOOP_GPCR_PA11        ( 1 << 1 )
+#define SCOOP_CPR_OUT  (1 << 7)
+#define SCOOP_CPR_SD_3V        (1 << 2)
+#define SCOOP_CPR_CF_XV        (1 << 1)
+#define SCOOP_CPR_CF_3V        (1 << 0)
+
+#define SCOOP_GPCR_PA22        (1 << 12)
+#define SCOOP_GPCR_PA21        (1 << 11)
+#define SCOOP_GPCR_PA20        (1 << 10)
+#define SCOOP_GPCR_PA19        (1 << 9)
+#define SCOOP_GPCR_PA18        (1 << 8)
+#define SCOOP_GPCR_PA17        (1 << 7)
+#define SCOOP_GPCR_PA16        (1 << 6)
+#define SCOOP_GPCR_PA15        (1 << 5)
+#define SCOOP_GPCR_PA14        (1 << 4)
+#define SCOOP_GPCR_PA13        (1 << 3)
+#define SCOOP_GPCR_PA12        (1 << 2)
+#define SCOOP_GPCR_PA11        (1 << 1)
 
 struct scoop_config {
        unsigned short io_out;
index 244655d323ea2b255bd3614671290c5c2683b0a2..0629394a5fb9ad3dce6b73f0298a9ae56f52310f 100644 (file)
@@ -150,9 +150,8 @@ static void __init common_init(void)
 
 MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = pxa168_init_irq,
        .timer          = &pxa168_timer,
        .init_machine   = common_init,
@@ -160,9 +159,8 @@ MACHINE_END
 
 MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = pxa168_init_irq,
        .timer          = &pxa168_timer,
        .init_machine   = common_init,
index 8c3fa5d14f4bf44fad8ada81f230353934876e87..69bcba11f53f94d8cd5ee6d8f4f0a67d17847a70 100644 (file)
@@ -42,9 +42,8 @@ static void __init avengers_lite_init(void)
 
 MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = pxa168_init_irq,
        .timer          = &pxa168_timer,
        .init_machine   = avengers_lite_init,
index e1e66c18b44633db8569cdf79b02801245bfbb13..3b29fa7e9b084c1c3891aea452d1e5cda5c35a03 100644 (file)
@@ -31,7 +31,7 @@ static struct map_desc standard_io_desc[] __initdata = {
        },
 };
 
-void __init pxa_map_io(void)
+void __init mmp_map_io(void)
 {
        iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
 }
index b4a0ba05a0f4fe54af1bc20a5fb4878149824642..ec8d65ded25cb7a6dd908f1d950da7366d38618a 100644 (file)
@@ -3,15 +3,6 @@
 struct sys_timer;
 
 extern void timer_init(int irq);
-extern void mmp2_clear_pmic_int(void);
-
-extern struct sys_timer pxa168_timer;
-extern struct sys_timer pxa910_timer;
-extern struct sys_timer mmp2_timer;
-extern void __init pxa168_init_irq(void);
-extern void __init pxa910_init_irq(void);
-extern void __init mmp2_init_icu(void);
-extern void __init mmp2_init_irq(void);
 
 extern void __init icu_init_irq(void);
-extern void __init pxa_map_io(void);
+extern void __init mmp_map_io(void);
index 4ec7709a34628ac361290a5e46abc411008af502..e4312d238eae3ec4e3a4b9a93564a5a265619549 100644 (file)
@@ -114,9 +114,8 @@ static void __init flint_init(void)
 
 MACHINE_START(FLINT, "Flint Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = mmp2_init_irq,
        .timer          = &mmp2_timer,
        .init_machine   = flint_init,
index 1fa0a492454adc305d70ee89313450b6383cde83..d0ec7dae88e4c06f9050f4bf3b2223121109c8c0 100644 (file)
@@ -1,3 +1,6 @@
+#ifndef __MACH_DEVICE_H
+#define __MACH_DEVICE_H
+
 #include <linux/types.h>
 
 #define MAX_RESOURCE_DMA       2
@@ -47,3 +50,4 @@ struct pxa_device_desc mmp2_device_##_name __initdata = {             \
 }
 
 extern int pxa_register_device(struct pxa_device_desc *, void *, size_t);
+#endif /* __MACH_DEVICE_H */
index fec220bd5046a4f64e8c16bf3df76980f1763a84..dbba6e8a60c41487e3cf4e61cecf9ef6c8231ea9 100644 (file)
@@ -1,6 +1,13 @@
 #ifndef __ASM_MACH_MMP2_H
 #define __ASM_MACH_MMP2_H
 
+struct sys_timer;
+
+extern struct sys_timer mmp2_timer;
+extern void __init mmp2_init_icu(void);
+extern void __init mmp2_init_irq(void);
+extern void mmp2_clear_pmic_int(void);
+
 #include <linux/i2c.h>
 #include <mach/devices.h>
 #include <plat/i2c.h>
index 3b2bd5d5eb050892d093a13f502b115eb83e3baf..27e1bc758623808cb30ed6471ca2d45fb2b40dbd 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef __ASM_MACH_PXA168_H
 #define __ASM_MACH_PXA168_H
 
+struct sys_timer;
+
+extern struct sys_timer pxa168_timer;
+extern void __init pxa168_init_irq(void);
+
 #include <linux/i2c.h>
 #include <mach/devices.h>
 #include <plat/i2c.h>
index 4f0b4ec6f5d0530f158799254271b5e0601dd9a2..f13c49d6f8dc052988e6f5f407f333c2be183a2e 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef __ASM_MACH_PXA910_H
 #define __ASM_MACH_PXA910_H
 
+struct sys_timer;
+
+extern struct sys_timer pxa910_timer;
+extern void __init pxa910_init_irq(void);
+
 #include <linux/i2c.h>
 #include <mach/devices.h>
 #include <plat/i2c.h>
index cb18221c0af3bad337e6655f5ecd605a94e818a8..01342be91c3c6a5df238b39d4a4f5ddf95b118b5 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/io.h>
 
 #include <mach/regs-icu.h>
+#include <mach/mmp2.h>
 
 #include "common.h"
 
index d77dd41d60e1c170858706f7357fb6a82a18f33a..80c3e7ab1e1700c2aa96bdb9270b0e5a57004b3f 100644 (file)
@@ -135,9 +135,8 @@ static void __init jasper_init(void)
 
 MACHINE_START(MARVELL_JASPER, "Jasper Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = mmp2_init_irq,
        .timer          = &mmp2_timer,
        .init_machine   = jasper_init,
index 7f5eb059bb015f27a153efcb144d5717142f9a1a..daf3993349f81986fa8f5b90ca0c4bcb4e7acc8a 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <asm/hardware/cache-tauros2.h>
 
+#include <asm/mach/time.h>
 #include <mach/addr-map.h>
 #include <mach/regs-apbc.h>
 #include <mach/regs-apmu.h>
@@ -26,6 +27,7 @@
 #include <mach/mfp.h>
 #include <mach/gpio.h>
 #include <mach/devices.h>
+#include <mach/mmp2.h>
 
 #include "common.h"
 #include "clock.h"
@@ -158,6 +160,26 @@ static int __init mmp2_init(void)
 }
 postcore_initcall(mmp2_init);
 
+static void __init mmp2_timer_init(void)
+{
+       unsigned long clk_rst;
+
+       __raw_writel(APBC_APBCLK | APBC_RST, APBC_MMP2_TIMERS);
+
+       /*
+        * enable bus/functional clock, enable 6.5MHz (divider 4),
+        * release reset
+        */
+       clk_rst = APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(1);
+       __raw_writel(clk_rst, APBC_MMP2_TIMERS);
+
+       timer_init(IRQ_MMP2_TIMER1);
+}
+
+struct sys_timer mmp2_timer = {
+       .init   = mmp2_timer_init,
+};
+
 /* on-chip devices */
 MMP2_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4030000, 0x30, 4, 5);
 MMP2_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4017000, 0x30, 20, 21);
index 0e0c9220eaba3646aeacfc75cd3d27ac5ab81e25..e81db7428215608ee2ade0281a755f9226983411 100644 (file)
@@ -100,9 +100,8 @@ static void __init tavorevb_init(void)
 
 MACHINE_START(TAVOREVB, "PXA910 Evaluation Board (aka TavorEVB)")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = pxa910_init_irq,
        .timer          = &pxa910_timer,
        .init_machine   = tavorevb_init,
index cf75694e9687d8a982df0af4632a447d45d18d66..66528193f9390c623875670a8450486ff637a875 100644 (file)
@@ -200,24 +200,3 @@ void __init timer_init(int irq)
        clocksource_register(&cksrc);
        clockevents_register_device(&ckevt);
 }
-
-static void __init mmp2_timer_init(void)
-{
-       unsigned long clk_rst;
-
-       __raw_writel(APBC_APBCLK | APBC_RST, APBC_MMP2_TIMERS);
-
-       /*
-        * enable bus/functional clock, enable 6.5MHz (divider 4),
-        * release reset
-        */
-       clk_rst = APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(1);
-       __raw_writel(clk_rst, APBC_MMP2_TIMERS);
-
-       timer_init(IRQ_MMP2_TIMER1);
-}
-
-struct sys_timer mmp2_timer = {
-       .init   = mmp2_timer_init,
-};
-
index b22dec4abf78e3597c78b7e44c5922baf07d51e0..ee65e05f0cf15e0118461ce4a7b277e5038a77c2 100644 (file)
@@ -123,9 +123,8 @@ static void __init ttc_dkb_init(void)
 
 MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
        .phys_io        = APB_PHYS_BASE,
-       .boot_params    = 0x00000100,
        .io_pg_offst    = (APB_VIRT_BASE >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
+       .map_io         = mmp_map_io,
        .init_irq       = pxa910_init_irq,
        .timer          = &pxa910_timer,
        .init_machine   = ttc_dkb_init,
index 3b51741a48109e90c57f59ddbd5ef49810dc567f..7aefb90748527ae5b68550b7e311d1244b55639d 100644 (file)
@@ -238,6 +238,17 @@ config MACH_COLIBRI
        bool "Toradex Colibri PXA270"
        select PXA27x
 
+config MACH_COLIBRI_PXA270_EVALBOARD
+       bool "Toradex Colibri Evaluation Carrier Board support (PXA270)"
+       depends on MACH_COLIBRI
+
+config MACH_COLIBRI_PXA270_INCOME
+       bool "Income s.r.o. PXA270 SBC"
+       depends on MACH_COLIBRI
+       select PXA27x
+       select HAVE_PWM
+       select PXA_HAVE_BOARD_IRQS
+
 config MACH_COLIBRI300
        bool "Toradex Colibri PXA300/310"
        select PXA3xx
@@ -336,6 +347,9 @@ config ARCH_PXA_PALM
        bool "PXA based Palm PDAs"
        select HAVE_PWM
 
+config MACH_PALM27X
+       bool
+
 config MACH_PALMTE2
        bool "Palm Tungsten|E2"
        default y
@@ -360,6 +374,7 @@ config MACH_PALMT5
        depends on ARCH_PXA_PALM
        select PXA27x
        select IWMMXT
+       select MACH_PALM27X
        help
          Say Y here if you intend to run this kernel on a Palm Tungsten|T5
          handheld computer.
@@ -370,6 +385,7 @@ config MACH_PALMTX
        depends on ARCH_PXA_PALM
        select PXA27x
        select IWMMXT
+       select MACH_PALM27X
        help
          Say Y here if you intend to run this kernel on a Palm T|X
          handheld computer.
@@ -380,6 +396,7 @@ config MACH_PALMZ72
        depends on ARCH_PXA_PALM
        select PXA27x
        select IWMMXT
+       select MACH_PALM27X
        help
          Say Y here if you intend to run this kernel on Palm Zire 72
          handheld computer.
@@ -390,6 +407,7 @@ config MACH_PALMLD
        depends on ARCH_PXA_PALM
        select PXA27x
        select IWMMXT
+       select MACH_PALM27X
        help
          Say Y here if you intend to run this kernel on a Palm LifeDrive
          handheld computer.
@@ -447,16 +465,13 @@ config PXA_SHARPSL
          SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
          handheld computer.
 
-config SHARPSL_PM
-       bool
-       select APM_EMULATION
-       select SHARPSL_PM_MAX1111
-
-config SHARPSL_PM_MAX1111
-       bool
-       depends on !CORGI_SSP_DEPRECATED
-       select HWMON
-       select SENSORS_MAX1111
+config PXA_SHARPSL_DETECT_MACH_ID
+       bool "Detect machine ID at run-time in the decompressor"
+       depends on PXA_SHARPSL
+       help
+         Say Y here if you want the zImage decompressor to detect
+         the Zaurus machine ID at run-time. For latest kexec-based
+         boot loader, this is not necessary.
 
 config MACH_POODLE
        bool "Enable Sharp SL-5600 (Poodle) Support"
@@ -510,6 +525,25 @@ config MACH_TOSA
        select PXA25x
        select PXA_HAVE_BOARD_IRQS
 
+config TOSA_BT
+       tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
+       depends on MACH_TOSA
+       select RFKILL
+       help
+         This is a simple driver that is able to control
+         the state of built in bluetooth chip on tosa.
+
+config TOSA_USE_EXT_KEYCODES
+       bool "Tosa keyboard: use extended keycodes"
+       depends on MACH_TOSA
+       default n
+       help
+         Say Y here to enable the tosa keyboard driver to generate extended
+         (>= 127) keycodes. Be aware, that they can't be correctly interpreted
+         by either console keyboard driver or by Kdrive keybd driver.
+
+         Say Y only if you know, what you are doing!
+
 config MACH_ICONTROL
        bool "TMT iControl/SafeTCam based on the MXM-8x10 CoM"
        select CPU_PXA320
@@ -648,25 +682,15 @@ config PXA_SHARP_Cxx00
        help
          Enable common support for Sharp Cxx00 models
 
-config TOSA_BT
-       tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
-       depends on MACH_TOSA
-       select RFKILL
-       help
-         This is a simple driver that is able to control
-         the state of built in bluetooth chip on tosa.
-
-config TOSA_USE_EXT_KEYCODES
-       bool "Tosa keyboard: use extended keycodes"
-       depends on MACH_TOSA
-       default n
-       help
-         Say Y here to enable the tosa keyboard driver to generate extended
-         (>= 127) keycodes. Be aware, that they can't be correctly interpreted
-         by either console keyboard driver or by Kdrive keybd driver.
-
-         Say Y only if you know, what you are doing!
+config SHARPSL_PM
+       bool
+       select APM_EMULATION
+       select SHARPSL_PM_MAX1111
 
+config SHARPSL_PM_MAX1111
+       bool
+       select HWMON
+       select SENSORS_MAX1111
 
 config PXA_HAVE_BOARD_IRQS
        bool
index b8f1f4bc7ca78f1335424a359a35b582b885cc8c..85c7fb324dbb88ee68ce1d0da0cf0f9c0e92035c 100644 (file)
@@ -51,14 +51,16 @@ obj-$(CONFIG_MACH_CAPC7117)     += capc7117.o mxm8x10.o
 obj-$(CONFIG_ARCH_GUMSTIX)     += gumstix.o
 obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
 obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
-obj-$(CONFIG_MACH_INTELMOTE2)   += imote2.o
+obj-$(CONFIG_MACH_INTELMOTE2)  += stargate2.o
 obj-$(CONFIG_MACH_STARGATE2)   += stargate2.o
 obj-$(CONFIG_MACH_XCEP)         += xcep.o
 obj-$(CONFIG_MACH_TRIZEPS4)    += trizeps4.o
 obj-$(CONFIG_MACH_LOGICPD_PXA270)      += lpd270.o
 obj-$(CONFIG_MACH_PCM027)              += pcm027.o
 obj-$(CONFIG_MACH_PCM990_BASEBOARD)    += pcm990-baseboard.o
-obj-$(CONFIG_MACH_COLIBRI)     += colibri-pxa270.o
+obj-$(CONFIG_MACH_COLIBRI)                     += colibri-pxa270.o
+obj-$(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD)    += colibri-pxa270-evalboard.o
+obj-$(CONFIG_MACH_COLIBRI_PXA270_INCOME)       += colibri-pxa270-income.o
 obj-$(CONFIG_MACH_COLIBRI300)  += colibri-pxa3xx.o colibri-pxa300.o
 obj-$(CONFIG_MACH_COLIBRI320)  += colibri-pxa3xx.o colibri-pxa320.o
 obj-$(CONFIG_MACH_VPAC270)     += vpac270.o
@@ -73,6 +75,7 @@ obj-$(CONFIG_PXA_EZX)           += ezx.o
 obj-$(CONFIG_MACH_MP900C)      += mp900.o
 obj-$(CONFIG_MACH_PALMTE2)     += palmte2.o
 obj-$(CONFIG_MACH_PALMTC)      += palmtc.o
+obj-$(CONFIG_MACH_PALM27X)     += palm27x.o
 obj-$(CONFIG_MACH_PALMT5)      += palmt5.o
 obj-$(CONFIG_MACH_PALMTX)      += palmtx.o
 obj-$(CONFIG_MACH_PALMZ72)     += palmz72.o
@@ -84,12 +87,6 @@ obj-$(CONFIG_MACH_POODLE)    += poodle.o
 obj-$(CONFIG_MACH_TOSA)                += tosa.o
 obj-$(CONFIG_MACH_ICONTROL)     += icontrol.o mxm8x10.o
 obj-$(CONFIG_ARCH_PXA_ESERIES) += eseries.o
-obj-$(CONFIG_MACH_E330)                += e330.o
-obj-$(CONFIG_MACH_E350)                += e350.o
-obj-$(CONFIG_MACH_E740)                += e740.o
-obj-$(CONFIG_MACH_E750)                += e750.o
-obj-$(CONFIG_MACH_E400)                += e400.o
-obj-$(CONFIG_MACH_E800)                += e800.o
 obj-$(CONFIG_MACH_RAUMFELD_RC)         += raumfeld.o
 obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR)  += raumfeld.o
 obj-$(CONFIG_MACH_RAUMFELD_SPEAKER)    += raumfeld.o
index f3b5ace815e51488f8437f4fc08866e6478e12be..9041340fee1db17cdb6aa670ba43a2457a8193bf 100644 (file)
 #include <linux/fb.h>
 #include <linux/gpio.h>
 #include <linux/ioport.h>
+#include <linux/ucb1400.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/types.h>
+#include <linux/i2c/pcf857x.h>
+#include <linux/mtd/nand.h>
+#include <linux/mtd/physmap.h>
+#include <linux/regulator/max1586.h>
 
 #include <asm/setup.h>
 #include <asm/mach-types.h>
 #include "generic.h"
 #include "devices.h"
 
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
+static unsigned long balloon3_pin_config[] __initdata = {
+       /* Select BTUART 'COM1/ttyS0' as IO option for pins 42/43/44/45 */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO44_BTUART_CTS,
+       GPIO45_BTUART_RTS,
+
+       /* Reset, configured as GPIO wakeup source */
+       GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
+
+       /* LEDs */
+       GPIO9_GPIO,     /* NAND activity LED */
+       GPIO10_GPIO,    /* Heartbeat LED */
+
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+       GPIO113_AC97_nRESET,
+       GPIO95_GPIO,
+
+       /* MMC */
+       GPIO32_MMC_CLK,
+       GPIO92_MMC_DAT_0,
+       GPIO109_MMC_DAT_1,
+       GPIO110_MMC_DAT_2,
+       GPIO111_MMC_DAT_3,
+       GPIO112_MMC_CMD,
+
+       /* USB Host */
+       GPIO88_USBH1_PWR,
+       GPIO89_USBH1_PEN,
+
+       /* PC Card */
+       GPIO48_nPOE,
+       GPIO49_nPWE,
+       GPIO50_nPIOR,
+       GPIO51_nPIOW,
+       GPIO85_nPCE_1,
+       GPIO54_nPCE_2,
+       GPIO79_PSKTSEL,
+       GPIO55_nPREG,
+       GPIO56_nPWAIT,
+       GPIO57_nIOIS16,
+};
+
+/******************************************************************************
+ * Compatibility: Parameter parsing
+ ******************************************************************************/
 static unsigned long balloon3_irq_enabled;
 
 static unsigned long balloon3_features_present =
@@ -73,6 +131,321 @@ int __init parse_balloon3_features(char *arg)
 }
 early_param("balloon3_features", parse_balloon3_features);
 
+/******************************************************************************
+ * NOR Flash
+ ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
+static struct mtd_partition balloon3_nor_partitions[] = {
+       {
+               .name           = "Flash",
+               .offset         = 0x00000000,
+               .size           = MTDPART_SIZ_FULL,
+       }
+};
+
+static struct physmap_flash_data balloon3_flash_data[] = {
+       {
+               .width          = 2,    /* bankwidth in bytes */
+               .parts          = balloon3_nor_partitions,
+               .nr_parts       = ARRAY_SIZE(balloon3_nor_partitions)
+       }
+};
+
+static struct resource balloon3_flash_resource = {
+       .start  = PXA_CS0_PHYS,
+       .end    = PXA_CS0_PHYS + SZ_64M - 1,
+       .flags  = IORESOURCE_MEM,
+};
+
+static struct platform_device balloon3_flash = {
+       .name           = "physmap-flash",
+       .id             = 0,
+       .resource       = &balloon3_flash_resource,
+       .num_resources  = 1,
+       .dev            = {
+               .platform_data = balloon3_flash_data,
+       },
+};
+static void __init balloon3_nor_init(void)
+{
+       platform_device_register(&balloon3_flash);
+}
+#else
+static inline void balloon3_nor_init(void) {}
+#endif
+
+/******************************************************************************
+ * Audio and Touchscreen
+ ******************************************************************************/
+#if    defined(CONFIG_TOUCHSCREEN_UCB1400) || \
+       defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
+static struct ucb1400_pdata vpac270_ucb1400_pdata = {
+       .irq            = IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ),
+};
+
+
+static struct platform_device balloon3_ucb1400_device = {
+       .name           = "ucb1400_core",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &vpac270_ucb1400_pdata,
+       },
+};
+
+static void __init balloon3_ts_init(void)
+{
+       if (!balloon3_has(BALLOON3_FEATURE_AUDIO))
+               return;
+
+       pxa_set_ac97_info(NULL);
+       platform_device_register(&balloon3_ucb1400_device);
+}
+#else
+static inline void balloon3_ts_init(void) {}
+#endif
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static struct pxafb_mode_info balloon3_lcd_modes[] = {
+       {
+               .pixclock               = 38000,
+               .xres                   = 480,
+               .yres                   = 640,
+               .bpp                    = 16,
+               .hsync_len              = 8,
+               .left_margin            = 8,
+               .right_margin           = 8,
+               .vsync_len              = 2,
+               .upper_margin           = 4,
+               .lower_margin           = 5,
+               .sync                   = 0,
+       },
+};
+
+static struct pxafb_mach_info balloon3_lcd_screen = {
+       .modes                  = balloon3_lcd_modes,
+       .num_modes              = ARRAY_SIZE(balloon3_lcd_modes),
+       .lcd_conn               = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
+};
+
+static void balloon3_backlight_power(int on)
+{
+       gpio_set_value(BALLOON3_GPIO_RUN_BACKLIGHT, on);
+}
+
+static void __init balloon3_lcd_init(void)
+{
+       int ret;
+
+       if (!balloon3_has(BALLOON3_FEATURE_TOPPOLY))
+               return;
+
+       ret = gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT, "BKL-ON");
+       if (ret) {
+               pr_err("Requesting BKL-ON GPIO failed!\n");
+               goto err;
+       }
+
+       ret = gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
+       if (ret) {
+               pr_err("Setting BKL-ON GPIO direction failed!\n");
+               goto err2;
+       }
+
+       balloon3_lcd_screen.pxafb_backlight_power = balloon3_backlight_power;
+       set_pxa_fb_info(&balloon3_lcd_screen);
+       return;
+
+err2:
+       gpio_free(BALLOON3_GPIO_RUN_BACKLIGHT);
+err:
+       return;
+}
+#else
+static inline void balloon3_lcd_init(void) {}
+#endif
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+static struct pxamci_platform_data balloon3_mci_platform_data = {
+       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .gpio_card_detect       = -1,
+       .gpio_card_ro           = -1,
+       .gpio_power             = -1,
+       .detect_delay_ms        = 200,
+};
+
+static void __init balloon3_mmc_init(void)
+{
+       pxa_set_mci_info(&balloon3_mci_platform_data);
+}
+#else
+static inline void balloon3_mmc_init(void) {}
+#endif
+
+/******************************************************************************
+ * USB Gadget
+ ******************************************************************************/
+#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
+static void balloon3_udc_command(int cmd)
+{
+       if (cmd == PXA2XX_UDC_CMD_CONNECT)
+               UP2OCR |= UP2OCR_DPPUE | UP2OCR_DPPUBE;
+       else if (cmd == PXA2XX_UDC_CMD_DISCONNECT)
+               UP2OCR &= ~UP2OCR_DPPUE;
+}
+
+static int balloon3_udc_is_connected(void)
+{
+       return 1;
+}
+
+static struct pxa2xx_udc_mach_info balloon3_udc_info __initdata = {
+       .udc_command            = balloon3_udc_command,
+       .udc_is_connected       = balloon3_udc_is_connected,
+       .gpio_pullup            = -1,
+};
+
+static void __init balloon3_udc_init(void)
+{
+       pxa_set_udc_info(&balloon3_udc_info);
+       platform_device_register(&balloon3_gpio_vbus);
+}
+#else
+static inline void balloon3_udc_init(void) {}
+#endif
+
+/******************************************************************************
+ * IrDA
+ ******************************************************************************/
+#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
+static struct pxaficp_platform_data balloon3_ficp_platform_data = {
+       .transceiver_cap        = IR_FIRMODE | IR_SIRMODE | IR_OFF,
+};
+
+static void __init balloon3_irda_init(void)
+{
+       pxa_set_ficp_info(&balloon3_ficp_platform_data);
+}
+#else
+static inline void balloon3_irda_init(void) {}
+#endif
+
+/******************************************************************************
+ * USB Host
+ ******************************************************************************/
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+static struct pxaohci_platform_data balloon3_ohci_info = {
+       .port_mode      = PMM_PERPORT_MODE,
+       .flags          = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
+};
+
+static void __init balloon3_uhc_init(void)
+{
+       if (!balloon3_has(BALLOON3_FEATURE_OHCI))
+               return;
+       pxa_set_ohci_info(&balloon3_ohci_info);
+}
+#else
+static inline void balloon3_uhc_init(void) {}
+#endif
+
+/******************************************************************************
+ * LEDs
+ ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
+struct gpio_led balloon3_gpio_leds[] = {
+       {
+               .name                   = "balloon3:green:idle",
+               .default_trigger        = "heartbeat",
+               .gpio                   = BALLOON3_GPIO_LED_IDLE,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:green:nand",
+               .default_trigger        = "nand-disk",
+               .gpio                   = BALLOON3_GPIO_LED_NAND,
+               .active_low             = 1,
+       },
+};
+
+static struct gpio_led_platform_data balloon3_gpio_led_info = {
+       .leds           = balloon3_gpio_leds,
+       .num_leds       = ARRAY_SIZE(balloon3_gpio_leds),
+};
+
+static struct platform_device balloon3_leds = {
+       .name   = "leds-gpio",
+       .id     = 0,
+       .dev    = {
+               .platform_data  = &balloon3_gpio_led_info,
+       }
+};
+
+struct gpio_led balloon3_pcf_gpio_leds[] = {
+       {
+               .name                   = "balloon3:green:led0",
+               .gpio                   = BALLOON3_PCF_GPIO_LED0,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:green:led1",
+               .gpio                   = BALLOON3_PCF_GPIO_LED1,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:orange:led2",
+               .gpio                   = BALLOON3_PCF_GPIO_LED2,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:orange:led3",
+               .gpio                   = BALLOON3_PCF_GPIO_LED3,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:orange:led4",
+               .gpio                   = BALLOON3_PCF_GPIO_LED4,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:orange:led5",
+               .gpio                   = BALLOON3_PCF_GPIO_LED5,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:red:led6",
+               .gpio                   = BALLOON3_PCF_GPIO_LED6,
+               .active_low             = 1,
+       }, {
+               .name                   = "balloon3:red:led7",
+               .gpio                   = BALLOON3_PCF_GPIO_LED7,
+               .active_low             = 1,
+       },
+};
+
+static struct gpio_led_platform_data balloon3_pcf_gpio_led_info = {
+       .leds           = balloon3_pcf_gpio_leds,
+       .num_leds       = ARRAY_SIZE(balloon3_pcf_gpio_leds),
+};
+
+static struct platform_device balloon3_pcf_leds = {
+       .name   = "leds-gpio",
+       .id     = 1,
+       .dev    = {
+               .platform_data  = &balloon3_pcf_gpio_led_info,
+       }
+};
+
+static void __init balloon3_leds_init(void)
+{
+       platform_device_register(&balloon3_leds);
+       platform_device_register(&balloon3_pcf_leds);
+}
+#else
+static inline void balloon3_leds_init(void) {}
+#endif
+
+/******************************************************************************
+ * FPGA IRQ
+ ******************************************************************************/
 static void balloon3_mask_irq(unsigned int irq)
 {
        int balloon3_irq = (irq - BALLOON3_IRQ(0));
@@ -98,7 +471,6 @@ static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc)
 {
        unsigned long pending = __raw_readl(BALLOON3_INT_CONTROL_REG) &
                                        balloon3_irq_enabled;
-
        do {
                /* clear useless edge notification */
                if (desc->chip->ack)
@@ -132,201 +504,259 @@ static void __init balloon3_init_irq(void)
                "enabled\n", __func__, BALLOON3_AUX_NIRQ);
 }
 
-static unsigned long balloon3_ac97_pin_config[] = {
-       GPIO28_AC97_BITCLK,
-       GPIO29_AC97_SDATA_IN_0,
-       GPIO30_AC97_SDATA_OUT,
-       GPIO31_AC97_SYNC,
-       GPIO113_AC97_nRESET,
-};
-
-static void balloon3_backlight_power(int on)
-{
-       pr_debug("%s: power is %s\n", __func__, on ? "on" : "off");
-       gpio_set_value(BALLOON3_GPIO_RUN_BACKLIGHT, on);
-}
-
-static unsigned long balloon3_lcd_pin_config[] = {
-       /* LCD - 16bpp Active TFT */
-       GPIOxx_LCD_TFT_16BPP,
-
-       GPIO99_GPIO,            /* Backlight */
+/******************************************************************************
+ * GPIO expander
+ ******************************************************************************/
+#if defined(CONFIG_GPIO_PCF857X) || defined(CONFIG_GPIO_PCF857X_MODULE)
+static struct pcf857x_platform_data balloon3_pcf857x_pdata = {
+       .gpio_base      = BALLOON3_PCF_GPIO_BASE,
+       .n_latch        = 0,
+       .setup          = NULL,
+       .teardown       = NULL,
+       .context        = NULL,
 };
 
-static struct pxafb_mode_info balloon3_lcd_modes[] = {
+static struct i2c_board_info __initdata balloon3_i2c_devs[] = {
        {
-               .pixclock               = 38000,
-               .xres                   = 480,
-               .yres                   = 640,
-               .bpp                    = 16,
-               .hsync_len              = 8,
-               .left_margin            = 8,
-               .right_margin           = 8,
-               .vsync_len              = 2,
-               .upper_margin           = 4,
-               .lower_margin           = 5,
-               .sync                   = 0,
+               I2C_BOARD_INFO("pcf8574a", 0x38),
+               .platform_data  = &balloon3_pcf857x_pdata,
        },
 };
 
-static struct pxafb_mach_info balloon3_pxafb_info = {
-       .modes                  = balloon3_lcd_modes,
-       .num_modes              = ARRAY_SIZE(balloon3_lcd_modes),
-       .lcd_conn               = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-       .pxafb_backlight_power  = balloon3_backlight_power,
-};
+static void __init balloon3_i2c_init(void)
+{
+       pxa_set_i2c_info(NULL);
+       i2c_register_board_info(0, ARRAY_AND_SIZE(balloon3_i2c_devs));
+}
+#else
+static inline void balloon3_i2c_init(void) {}
+#endif
+
+/******************************************************************************
+ * NAND
+ ******************************************************************************/
+#if defined(CONFIG_MTD_NAND_PLATFORM)||defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
+static uint16_t balloon3_ctl =
+       BALLOON3_NAND_CONTROL_FLCE0 | BALLOON3_NAND_CONTROL_FLCE1 |
+       BALLOON3_NAND_CONTROL_FLCE2 | BALLOON3_NAND_CONTROL_FLCE3 |
+       BALLOON3_NAND_CONTROL_FLWP;
+
+static void balloon3_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+       struct nand_chip *this = mtd->priv;
 
-static unsigned long balloon3_mmc_pin_config[] = {
-       GPIO32_MMC_CLK,
-       GPIO92_MMC_DAT_0,
-       GPIO109_MMC_DAT_1,
-       GPIO110_MMC_DAT_2,
-       GPIO111_MMC_DAT_3,
-       GPIO112_MMC_CMD,
-};
+       if (ctrl & NAND_CTRL_CHANGE) {
+               if (ctrl & NAND_CLE)
+                       balloon3_ctl |= BALLOON3_NAND_CONTROL_FLCLE;
+               else
+                       balloon3_ctl &= ~BALLOON3_NAND_CONTROL_FLCLE;
 
-static void balloon3_mci_setpower(struct device *dev, unsigned int vdd)
-{
-       struct pxamci_platform_data *p_d = dev->platform_data;
-
-       if ((1 << vdd) & p_d->ocr_mask) {
-               pr_debug("%s: on\n", __func__);
-               /* FIXME something to prod here? */
-       } else {
-               pr_debug("%s: off\n", __func__);
-               /* FIXME something to prod here? */
+               if (ctrl & NAND_ALE)
+                       balloon3_ctl |= BALLOON3_NAND_CONTROL_FLALE;
+               else
+                       balloon3_ctl &= ~BALLOON3_NAND_CONTROL_FLALE;
+
+               __raw_writel(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
        }
+
+       if (cmd != NAND_CMD_NONE)
+               writeb(cmd, this->IO_ADDR_W);
 }
 
-static struct pxamci_platform_data balloon3_mci_platform_data = {
-       .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
-       .setpower       = balloon3_mci_setpower,
-};
+static void balloon3_nand_select_chip(struct mtd_info *mtd, int chip)
+{
+       if (chip < 0 || chip > 3)
+               return;
 
-static int balloon3_udc_is_connected(void)
+       balloon3_ctl |= BALLOON3_NAND_CONTROL_FLCE0 |
+                       BALLOON3_NAND_CONTROL_FLCE1 |
+                       BALLOON3_NAND_CONTROL_FLCE2 |
+                       BALLOON3_NAND_CONTROL_FLCE3;
+
+       /* Deassert correct nCE line */
+       balloon3_ctl &= ~(BALLOON3_NAND_CONTROL_FLCE0 << chip);
+
+       __raw_writew(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
+}
+
+static int balloon3_nand_probe(struct platform_device *pdev)
 {
-       pr_debug("%s: udc connected\n", __func__);
-       return 1;
+       void __iomem *temp_map;
+       uint16_t ver;
+       int ret;
+
+       __raw_writew(BALLOON3_NAND_CONTROL2_16BIT, BALLOON3_NAND_CONTROL2_REG);
+
+       ver = __raw_readw(BALLOON3_FPGA_VER);
+       if (ver > 0x0201)
+               pr_warn("The FPGA code, version 0x%04x, is newer than rel-0.3. "
+                       "NAND support might be broken in this version!", ver);
+
+       /* Power up the NAND chips */
+       ret = gpio_request(BALLOON3_GPIO_RUN_NAND, "NAND");
+       if (ret)
+               goto err1;
+
+       ret = gpio_direction_output(BALLOON3_GPIO_RUN_NAND, 1);
+       if (ret)
+               goto err2;
+
+       gpio_set_value(BALLOON3_GPIO_RUN_NAND, 1);
+
+       /* Deassert all nCE lines and write protect line */
+       __raw_writel(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
+       return 0;
+
+err2:
+       gpio_free(BALLOON3_GPIO_RUN_NAND);
+err1:
+       return ret;
 }
 
-static void balloon3_udc_command(int cmd)
+static void balloon3_nand_remove(struct platform_device *pdev)
 {
-       switch (cmd) {
-       case PXA2XX_UDC_CMD_CONNECT:
-               UP2OCR |= (UP2OCR_DPPUE + UP2OCR_DPPUBE);
-               pr_debug("%s: connect\n", __func__);
-               break;
-       case PXA2XX_UDC_CMD_DISCONNECT:
-               UP2OCR &= ~UP2OCR_DPPUE;
-               pr_debug("%s: disconnect\n", __func__);
-               break;
-       }
+       /* Power down the NAND chips */
+       gpio_set_value(BALLOON3_GPIO_RUN_NAND, 0);
+       gpio_free(BALLOON3_GPIO_RUN_NAND);
 }
 
-static struct pxa2xx_udc_mach_info balloon3_udc_info = {
-       .udc_is_connected = balloon3_udc_is_connected,
-       .udc_command      = balloon3_udc_command,
+static struct mtd_partition balloon3_partition_info[] = {
+       [0] = {
+               .name   = "Boot",
+               .offset = 0,
+               .size   = SZ_4M,
+       },
+       [1] = {
+               .name   = "RootFS",
+               .offset = MTDPART_OFS_APPEND,
+               .size   = MTDPART_SIZ_FULL
+       },
 };
 
-static struct pxaficp_platform_data balloon3_ficp_platform_data = {
-       .transceiver_cap  = IR_SIRMODE | IR_FIRMODE | IR_OFF,
-};
+static const char *balloon3_part_probes[] = { "cmdlinepart", NULL };
 
-static unsigned long balloon3_ohci_pin_config[] = {
-       GPIO88_USBH1_PWR,
-       GPIO89_USBH1_PEN,
+struct platform_nand_data balloon3_nand_pdata = {
+       .chip = {
+               .nr_chips       = 4,
+               .chip_offset    = 0,
+               .nr_partitions  = ARRAY_SIZE(balloon3_partition_info),
+               .partitions     = balloon3_partition_info,
+               .chip_delay     = 50,
+               .part_probe_types = balloon3_part_probes,
+       },
+       .ctrl = {
+               .hwcontrol      = 0,
+               .dev_ready      = 0,
+               .select_chip    = balloon3_nand_select_chip,
+               .cmd_ctrl       = balloon3_nand_cmd_ctl,
+               .probe          = balloon3_nand_probe,
+               .remove         = balloon3_nand_remove,
+       },
 };
 
-static struct pxaohci_platform_data balloon3_ohci_platform_data = {
-       .port_mode      = PMM_PERPORT_MODE,
-       .flags          = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
+static struct resource balloon3_nand_resource[] = {
+       [0] = {
+               .start = BALLOON3_NAND_BASE,
+               .end   = BALLOON3_NAND_BASE + 0x4,
+               .flags = IORESOURCE_MEM,
+       },
 };
 
-static unsigned long balloon3_pin_config[] __initdata = {
-       /* Select BTUART 'COM1/ttyS0' as IO option for pins 42/43/44/45 */
-       GPIO42_BTUART_RXD,
-       GPIO43_BTUART_TXD,
-       GPIO44_BTUART_CTS,
-       GPIO45_BTUART_RTS,
-
-       /* Wakeup GPIO */
-       GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
-
-       /* NAND & IDLE LED GPIOs */
-       GPIO9_GPIO,
-       GPIO10_GPIO,
+static struct platform_device balloon3_nand = {
+       .name           = "gen_nand",
+       .num_resources  = ARRAY_SIZE(balloon3_nand_resource),
+       .resource       = balloon3_nand_resource,
+       .id             = -1,
+       .dev            = {
+               .platform_data = &balloon3_nand_pdata,
+       }
 };
 
-static struct gpio_led balloon3_gpio_leds[] = {
+static void __init balloon3_nand_init(void)
+{
+       platform_device_register(&balloon3_nand);
+}
+#else
+static inline void balloon3_nand_init(void) {}
+#endif
+
+/******************************************************************************
+ * Core power regulator
+ ******************************************************************************/
+#if defined(CONFIG_REGULATOR_MAX1586) || \
+    defined(CONFIG_REGULATOR_MAX1586_MODULE)
+static struct regulator_consumer_supply balloon3_max1587a_consumers[] = {
        {
-               .name                   = "balloon3:green:idle",
-               .default_trigger        = "heartbeat",
-               .gpio                   = BALLOON3_GPIO_LED_IDLE,
-               .active_low             = 1,
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data balloon3_max1587a_v3_info = {
+       .constraints = {
+               .name           = "vcc_core range",
+               .min_uV         = 900000,
+               .max_uV         = 1705000,
+               .always_on      = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
        },
+       .consumer_supplies      = balloon3_max1587a_consumers,
+       .num_consumer_supplies  = ARRAY_SIZE(balloon3_max1587a_consumers),
+};
+
+static struct max1586_subdev_data balloon3_max1587a_subdevs[] = {
        {
-               .name                   = "balloon3:green:nand",
-               .default_trigger        = "nand-disk",
-               .gpio                   = BALLOON3_GPIO_LED_NAND,
-               .active_low             = 1,
-       },
+               .name           = "vcc_core",
+               .id             = MAX1586_V3,
+               .platform_data  = &balloon3_max1587a_v3_info,
+       }
 };
 
-static struct gpio_led_platform_data balloon3_gpio_leds_platform_data = {
-       .leds           = balloon3_gpio_leds,
-       .num_leds       = ARRAY_SIZE(balloon3_gpio_leds),
+static struct max1586_platform_data balloon3_max1587a_info = {
+       .subdevs     = balloon3_max1587a_subdevs,
+       .num_subdevs = ARRAY_SIZE(balloon3_max1587a_subdevs),
+       .v3_gain     = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
 };
 
-static struct platform_device balloon3led_device = {
-       .name   = "leds-gpio",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &balloon3_gpio_leds_platform_data,
+static struct i2c_board_info __initdata balloon3_pi2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data  = &balloon3_max1587a_info,
        },
 };
 
-static void __init balloon3_init(void)
+static void __init balloon3_pmic_init(void)
 {
-       pr_info("Initialising Balloon3\n");
+       pxa27x_set_i2c_power_info(NULL);
+       i2c_register_board_info(1, ARRAY_AND_SIZE(balloon3_pi2c_board_info));
+}
+#else
+static inline void balloon3_pmic_init(void) {}
+#endif
 
-       /* system bus arbiter setting
-        * - Core_Park
-        * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4
-        */
+/******************************************************************************
+ * Machine init
+ ******************************************************************************/
+static void __init balloon3_init(void)
+{
        ARB_CNTRL = ARB_CORE_PARK | 0x234;
 
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
+
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       pxa_set_i2c_info(NULL);
-       if (balloon3_has(BALLOON3_FEATURE_AUDIO)) {
-               pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ac97_pin_config));
-               pxa_set_ac97_info(NULL);
-       }
-
-       if (balloon3_has(BALLOON3_FEATURE_TOPPOLY)) {
-               pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_lcd_pin_config));
-               gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT,
-                       "LCD Backlight Power");
-               gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
-               set_pxa_fb_info(&balloon3_pxafb_info);
-       }
-
-       if (balloon3_has(BALLOON3_FEATURE_MMC)) {
-               pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_mmc_pin_config));
-               pxa_set_mci_info(&balloon3_mci_platform_data);
-       }
-       pxa_set_ficp_info(&balloon3_ficp_platform_data);
-       if (balloon3_has(BALLOON3_FEATURE_OHCI)) {
-               pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ohci_pin_config));
-               pxa_set_ohci_info(&balloon3_ohci_platform_data);
-       }
-       pxa_set_udc_info(&balloon3_udc_info);
-
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
-
-       platform_device_register(&balloon3led_device);
+       balloon3_i2c_init();
+       balloon3_irda_init();
+       balloon3_lcd_init();
+       balloon3_leds_init();
+       balloon3_mmc_init();
+       balloon3_nand_init();
+       balloon3_nor_init();
+       balloon3_pmic_init();
+       balloon3_ts_init();
+       balloon3_udc_init();
+       balloon3_uhc_init();
 }
 
 static struct map_desc balloon3_io_desc[] __initdata = {
index fdda6be6c391ea9d094aea6d7d52935e91d49c98..c70e6c2f4e7c47daf9c8a595bf6fafd11f2971d7 100644 (file)
@@ -689,6 +689,7 @@ static void __init cm_x300_init_da9030(void)
 {
        pxa3xx_set_i2c_power_info(&cm_x300_pwr_i2c_info);
        i2c_register_board_info(1, &cm_x300_pmic_info, 1);
+       set_irq_wake(IRQ_WAKEUP0, 1);
 }
 
 static void __init cm_x300_init_wi2wi(void)
@@ -745,9 +746,10 @@ static void __init cm_x300_init(void)
 {
        cm_x300_init_mfp();
 
-       pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
+       if (cpu_is_pxa300())
+               pxa_set_ffuart_info(NULL);
 
        cm_x300_init_da9030();
        cm_x300_init_dm9000();
diff --git a/arch/arm/mach-pxa/colibri-pxa270-evalboard.c b/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
new file mode 100644 (file)
index 0000000..0f3b632
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ *  linux/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
+ *
+ *  Support for Toradex PXA270 based Colibri Evaluation Carrier Board
+ *  Daniel Mack <daniel@caiaq.de>
+ *  Marek Vasut <marek.vasut@gmail.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/init.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <linux/sysdev.h>
+#include <linux/interrupt.h>
+#include <linux/gpio.h>
+#include <asm/mach-types.h>
+#include <mach/hardware.h>
+#include <asm/mach/arch.h>
+
+#include <mach/pxa27x.h>
+#include <mach/colibri.h>
+#include <mach/mmc.h>
+#include <mach/ohci.h>
+#include <mach/pxa27x-udc.h>
+
+#include "generic.h"
+#include "devices.h"
+
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
+static mfp_cfg_t colibri_pxa270_evalboard_pin_config[] __initdata = {
+       /* MMC */
+       GPIO32_MMC_CLK,
+       GPIO92_MMC_DAT_0,
+       GPIO109_MMC_DAT_1,
+       GPIO110_MMC_DAT_2,
+       GPIO111_MMC_DAT_3,
+       GPIO112_MMC_CMD,
+       GPIO0_GPIO,     /* SD detect */
+
+       /* FFUART */
+       GPIO39_FFUART_TXD,
+       GPIO34_FFUART_RXD,
+
+       /* UHC */
+       GPIO88_USBH1_PWR,
+       GPIO89_USBH1_PEN,
+       GPIO119_USBH2_PWR,
+       GPIO120_USBH2_PEN,
+};
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+static struct pxamci_platform_data colibri_pxa270_mci_platform_data = {
+       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .gpio_power             = -1,
+       .gpio_card_detect       = GPIO0_COLIBRI_PXA270_SD_DETECT,
+       .gpio_card_ro           = -1,
+       .detect_delay_ms        = 200,
+};
+
+static void __init colibri_pxa270_mmc_init(void)
+{
+       pxa_set_mci_info(&colibri_pxa270_mci_platform_data);
+}
+#else
+static inline void colibri_pxa270_mmc_init(void) {}
+#endif
+
+/******************************************************************************
+ * USB Host
+ ******************************************************************************/
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+static int colibri_pxa270_ohci_init(struct device *dev)
+{
+       UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
+       return 0;
+}
+
+static struct pxaohci_platform_data colibri_pxa270_ohci_info = {
+       .port_mode      = PMM_PERPORT_MODE,
+       .flags          = ENABLE_PORT1 | ENABLE_PORT2 |
+                         POWER_CONTROL_LOW | POWER_SENSE_LOW,
+       .init           = colibri_pxa270_ohci_init,
+};
+
+static void __init colibri_pxa270_uhc_init(void)
+{
+       pxa_set_ohci_info(&colibri_pxa270_ohci_info);
+}
+#else
+static inline void colibri_pxa270_uhc_init(void) {}
+#endif
+
+void __init colibri_pxa270_evalboard_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_evalboard_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+
+       colibri_pxa270_mmc_init();
+       colibri_pxa270_uhc_init();
+}
+
diff --git a/arch/arm/mach-pxa/colibri-pxa270-income.c b/arch/arm/mach-pxa/colibri-pxa270-income.c
new file mode 100644 (file)
index 0000000..37f0f3e
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * linux/arch/arm/mach-pxa/income.c
+ *
+ * Support for Income s.r.o. SH-Dmaster PXA270 SBC
+ *
+ * Copyright (C) 2010
+ * Marek Vasut <marek.vasut@gmail.com>
+ * Pavel Revak <palo@bielyvlk.sk>
+ *
+ * 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/bitops.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/ioport.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <linux/pwm_backlight.h>
+#include <linux/sysdev.h>
+
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <mach/hardware.h>
+#include <mach/mmc.h>
+#include <mach/ohci.h>
+#include <mach/pxa27x.h>
+#include <mach/pxa27x-udc.h>
+#include <mach/pxafb.h>
+
+#include <plat/i2c.h>
+
+#include "devices.h"
+#include "generic.h"
+
+#define GPIO114_INCOME_ETH_IRQ  (114)
+#define GPIO0_INCOME_SD_DETECT  (0)
+#define GPIO0_INCOME_SD_RO      (1)
+#define GPIO54_INCOME_LED_A     (54)
+#define GPIO55_INCOME_LED_B     (55)
+#define GPIO113_INCOME_TS_IRQ   (113)
+
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
+static mfp_cfg_t income_pin_config[] __initdata = {
+       /* MMC */
+       GPIO32_MMC_CLK,
+       GPIO92_MMC_DAT_0,
+       GPIO109_MMC_DAT_1,
+       GPIO110_MMC_DAT_2,
+       GPIO111_MMC_DAT_3,
+       GPIO112_MMC_CMD,
+       GPIO0_GPIO,     /* SD detect */
+       GPIO1_GPIO,     /* SD read-only */
+
+       /* FFUART */
+       GPIO39_FFUART_TXD,
+       GPIO34_FFUART_RXD,
+
+       /* BFUART */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO45_BTUART_RTS,
+
+       /* STUART */
+       GPIO46_STUART_RXD,
+       GPIO47_STUART_TXD,
+
+       /* UHC */
+       GPIO88_USBH1_PWR,
+       GPIO89_USBH1_PEN,
+
+       /* LCD */
+       GPIOxx_LCD_TFT_16BPP,
+
+       /* PWM */
+       GPIO16_PWM0_OUT,
+
+       /* I2C */
+       GPIO117_I2C_SCL,
+       GPIO118_I2C_SDA,
+
+       /* LED */
+       GPIO54_GPIO,    /* LED A */
+       GPIO55_GPIO,    /* LED B */
+};
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+static struct pxamci_platform_data income_mci_platform_data = {
+       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .gpio_power             = -1,
+       .gpio_card_detect       = GPIO0_INCOME_SD_DETECT,
+       .gpio_card_ro           = GPIO0_INCOME_SD_RO,
+       .detect_delay_ms        = 200,
+};
+
+static void __init income_mmc_init(void)
+{
+       pxa_set_mci_info(&income_mci_platform_data);
+}
+#else
+static inline void income_mmc_init(void) {}
+#endif
+
+/******************************************************************************
+ * USB Host
+ ******************************************************************************/
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
+static struct pxaohci_platform_data income_ohci_info = {
+       .port_mode      = PMM_PERPORT_MODE,
+       .flags          = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
+};
+
+static void __init income_uhc_init(void)
+{
+       pxa_set_ohci_info(&income_ohci_info);
+}
+#else
+static inline void income_uhc_init(void) {}
+#endif
+
+/******************************************************************************
+ * LED
+ ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
+struct gpio_led income_gpio_leds[] = {
+       {
+               .name                   = "income:green:leda",
+               .default_trigger        = "none",
+               .gpio                   = GPIO54_INCOME_LED_A,
+               .active_low             = 1,
+       },
+       {
+               .name                   = "income:green:ledb",
+               .default_trigger        = "none",
+               .gpio                   = GPIO55_INCOME_LED_B,
+               .active_low             = 1,
+       }
+};
+
+static struct gpio_led_platform_data income_gpio_led_info = {
+       .leds           = income_gpio_leds,
+       .num_leds       = ARRAY_SIZE(income_gpio_leds),
+};
+
+static struct platform_device income_leds = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &income_gpio_led_info,
+       }
+};
+
+static void __init income_led_init(void)
+{
+       platform_device_register(&income_leds);
+}
+#else
+static inline void income_led_init(void) {}
+#endif
+
+/******************************************************************************
+ * I2C
+ ******************************************************************************/
+#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
+static struct i2c_board_info __initdata income_i2c_devs[] = {
+       {
+               I2C_BOARD_INFO("ds1340", 0x68),
+       }, {
+               I2C_BOARD_INFO("lm75", 0x4f),
+       },
+};
+
+static void __init income_i2c_init(void)
+{
+       pxa_set_i2c_info(NULL);
+       pxa27x_set_i2c_power_info(NULL);
+       i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
+}
+#else
+static inline void income_i2c_init(void) {}
+#endif
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+static struct pxafb_mode_info income_lcd_modes[] = {
+{
+       .pixclock       = 144700,
+       .xres           = 320,
+       .yres           = 240,
+       .bpp            = 32,
+       .depth          = 18,
+
+       .left_margin    = 10,
+       .right_margin   = 10,
+       .upper_margin   = 7,
+       .lower_margin   = 8,
+
+       .hsync_len      = 20,
+       .vsync_len      = 2,
+
+       .sync           = FB_SYNC_VERT_HIGH_ACT,
+},
+};
+
+static struct pxafb_mach_info income_lcd_screen = {
+       .modes          = income_lcd_modes,
+       .num_modes      = ARRAY_SIZE(income_lcd_modes),
+       .lcd_conn       = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
+};
+
+static void __init income_lcd_init(void)
+{
+       set_pxa_fb_info(&income_lcd_screen);
+}
+#else
+static inline void income_lcd_init(void) {}
+#endif
+
+/******************************************************************************
+ * Backlight
+ ******************************************************************************/
+#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM__MODULE)
+static struct platform_pwm_backlight_data income_backlight_data = {
+       .pwm_id         = 0,
+       .max_brightness = 0x3ff,
+       .dft_brightness = 0x1ff,
+       .pwm_period_ns  = 1000000,
+};
+
+static struct platform_device income_backlight = {
+       .name   = "pwm-backlight",
+       .dev    = {
+               .parent         = &pxa27x_device_pwm0.dev,
+               .platform_data  = &income_backlight_data,
+       },
+};
+
+static void __init income_pwm_init(void)
+{
+       platform_device_register(&income_backlight);
+}
+#else
+static inline void income_pwm_init(void) {}
+#endif
+
+void __init colibri_pxa270_income_boardinit(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+
+       income_mmc_init();
+       income_uhc_init();
+       income_led_init();
+       income_i2c_init();
+       income_lcd_init();
+       income_pwm_init();
+}
+
index 061c45316de8cb732b20ac43babefd9735c88c8a..98673ac6efd0d74f66dc270a67e97e7c874ecf97 100644 (file)
@@ -3,6 +3,7 @@
  *
  *  Support for Toradex PXA270 based Colibri module
  *  Daniel Mack <daniel@caiaq.de>
+ *  Marek Vasut <marek.vasut@gmail.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
  */
 
 #include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/platform_device.h>
-#include <linux/sysdev.h>
 #include <linux/interrupt.h>
-#include <linux/bitops.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
+#include <linux/kernel.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/physmap.h>
-#include <linux/gpio.h>
-#include <asm/mach-types.h>
-#include <mach/hardware.h>
-#include <asm/irq.h>
-#include <asm/sizes.h>
+#include <linux/platform_device.h>
+#include <linux/sysdev.h>
+#include <linux/ucb1400.h>
+
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/mach/irq.h>
 #include <asm/mach/flash.h>
+#include <asm/mach-types.h>
+#include <asm/sizes.h>
 
-#include <mach/pxa27x.h>
+#include <mach/audio.h>
 #include <mach/colibri.h>
+#include <mach/pxa27x.h>
 
-#include "generic.h"
 #include "devices.h"
+#include "generic.h"
 
-/*
- * GPIO configuration
- */
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
 static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
+       /* Ethernet */
        GPIO78_nCS_2,   /* Ethernet CS */
        GPIO114_GPIO,   /* Ethernet IRQ */
+
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+       GPIO95_AC97_nRESET,
+       GPIO98_AC97_SYSCLK,
+       GPIO113_GPIO,   /* Touchscreen IRQ */
 };
 
-/*
- * NOR flash
- */
+/******************************************************************************
+ * NOR Flash
+ ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
 static struct mtd_partition colibri_partitions[] = {
        {
                .name =         "Bootloader",
                .offset =       0x00000000,
                .size =         0x00040000,
-               .mask_flags =   MTD_WRITEABLE  /* force read-only */
+               .mask_flags =   MTD_WRITEABLE   /* force read-only */
        }, {
                .name =         "Kernel",
                .offset =       0x00040000,
@@ -90,50 +97,113 @@ static struct platform_device colibri_pxa270_flash_device = {
        .num_resources = 1,
 };
 
-/*
- * DM9000 Ethernet
- */
-#if defined(CONFIG_DM9000)
-static struct resource dm9000_resources[] = {
-       [0] = {
-               .start  = COLIBRI_PXA270_ETH_PHYS,
-               .end    = COLIBRI_PXA270_ETH_PHYS + 3,
+static void __init colibri_pxa270_nor_init(void)
+{
+       platform_device_register(&colibri_pxa270_flash_device);
+}
+#else
+static inline void colibri_pxa270_nor_init(void) {}
+#endif
+
+/******************************************************************************
+ * Ethernet
+ ******************************************************************************/
+#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
+static struct resource colibri_pxa270_dm9000_resources[] = {
+       {
+               .start  = PXA_CS2_PHYS,
+               .end    = PXA_CS2_PHYS + 3,
                .flags  = IORESOURCE_MEM,
        },
-       [1] = {
-               .start  = COLIBRI_PXA270_ETH_PHYS + 4,
-               .end    = COLIBRI_PXA270_ETH_PHYS + 4 + 500,
+       {
+               .start  = PXA_CS2_PHYS + 4,
+               .end    = PXA_CS2_PHYS + 4 + 500,
                .flags  = IORESOURCE_MEM,
        },
-       [2] = {
-               .start  = COLIBRI_PXA270_ETH_IRQ,
-               .end    = COLIBRI_PXA270_ETH_IRQ,
+       {
+               .start  = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
+               .end    = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
                .flags  = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
        },
 };
 
-static struct platform_device dm9000_device = {
+static struct platform_device colibri_pxa270_dm9000_device = {
        .name           = "dm9000",
        .id             = -1,
-       .num_resources  = ARRAY_SIZE(dm9000_resources),
-       .resource       = dm9000_resources,
+       .num_resources  = ARRAY_SIZE(colibri_pxa270_dm9000_resources),
+       .resource       = colibri_pxa270_dm9000_resources,
 };
-#endif /* CONFIG_DM9000 */
 
-static struct platform_device *colibri_pxa270_devices[] __initdata = {
-       &colibri_pxa270_flash_device,
-#if defined(CONFIG_DM9000)
-       &dm9000_device,
+static void __init colibri_pxa270_eth_init(void)
+{
+       platform_device_register(&colibri_pxa270_dm9000_device);
+}
+#else
+static inline void colibri_pxa270_eth_init(void) {}
 #endif
+
+/******************************************************************************
+ * Audio and Touchscreen
+ ******************************************************************************/
+#if    defined(CONFIG_TOUCHSCREEN_UCB1400) || \
+       defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
+static pxa2xx_audio_ops_t colibri_pxa270_ac97_pdata = {
+       .reset_gpio     = 95,
+};
+
+static struct ucb1400_pdata colibri_pxa270_ucb1400_pdata = {
+       .irq            = gpio_to_irq(GPIO113_COLIBRI_PXA270_TS_IRQ),
+};
+
+static struct platform_device colibri_pxa270_ucb1400_device = {
+       .name           = "ucb1400_core",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &colibri_pxa270_ucb1400_pdata,
+       },
 };
 
+static void __init colibri_pxa270_tsc_init(void)
+{
+       pxa_set_ac97_info(&colibri_pxa270_ac97_pdata);
+       platform_device_register(&colibri_pxa270_ucb1400_device);
+}
+#else
+static inline void colibri_pxa270_tsc_init(void) {}
+#endif
+
+static int colibri_pxa270_baseboard;
+core_param(colibri_pxa270_baseboard, colibri_pxa270_baseboard, int, 0444);
+
 static void __init colibri_pxa270_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices));
+
+       colibri_pxa270_nor_init();
+       colibri_pxa270_eth_init();
+       colibri_pxa270_tsc_init();
+
+       switch (colibri_pxa270_baseboard) {
+       case COLIBRI_PXA270_EVALBOARD:
+               colibri_pxa270_evalboard_init();
+               break;
+       case COLIBRI_PXA270_INCOME:
+               colibri_pxa270_income_boardinit();
+               break;
+       default:
+               printk(KERN_ERR "Illegal colibri_pxa270_baseboard type %d\n",
+                               colibri_pxa270_baseboard);
+       }
+}
+
+/* The "Income s.r.o. SH-Dmaster PXA270 SBC" board can be booted either
+ * with the INCOME mach type or with COLIBRI and the kernel parameter
+ * "colibri_pxa270_baseboard=1"
+ */
+static void __init colibri_pxa270_income_init(void)
+{
+       colibri_pxa270_baseboard = COLIBRI_PXA270_INCOME;
+       colibri_pxa270_init();
 }
 
 MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
@@ -146,3 +216,13 @@ MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
        .timer          = &pxa_timer,
 MACHINE_END
 
+MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .init_machine   = colibri_pxa270_income_init,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+MACHINE_END
+
index ae835fad7d10a7b644ff725b2948688a39a3cd43..99e850d847103eab977badf1d7a2491df942f687 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/platform_device.h>
 #include <linux/gpio.h>
 #include <linux/interrupt.h>
+#include <linux/usb/gpio_vbus.h>
 
 #include <asm/mach-types.h>
 #include <asm/sizes.h>
@@ -28,6 +29,8 @@
 #include <mach/pxafb.h>
 #include <mach/ohci.h>
 #include <mach/audio.h>
+#include <mach/pxa27x-udc.h>
+#include <mach/udc.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -101,6 +104,42 @@ void __init colibri_pxa320_init_ohci(void)
 static inline void colibri_pxa320_init_ohci(void) {}
 #endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
 
+#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
+static struct gpio_vbus_mach_info colibri_pxa320_gpio_vbus_info = {
+       .gpio_vbus              = mfp_to_gpio(MFP_PIN_GPIO96),
+       .gpio_pullup            = -1,
+};
+
+static struct platform_device colibri_pxa320_gpio_vbus = {
+       .name   = "gpio-vbus",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &colibri_pxa320_gpio_vbus_info,
+       },
+};
+
+static void colibri_pxa320_udc_command(int cmd)
+{
+       if (cmd == PXA2XX_UDC_CMD_CONNECT)
+               UP2OCR = UP2OCR_HXOE | UP2OCR_DPPUE;
+       else if (cmd == PXA2XX_UDC_CMD_DISCONNECT)
+               UP2OCR = UP2OCR_HXOE;
+}
+
+static struct pxa2xx_udc_mach_info colibri_pxa320_udc_info __initdata = {
+       .udc_command            = colibri_pxa320_udc_command,
+       .gpio_pullup            = -1,
+};
+
+static void __init colibri_pxa320_init_udc(void)
+{
+       pxa_set_udc_info(&colibri_pxa320_udc_info);
+       platform_device_register(&colibri_pxa320_gpio_vbus);
+}
+#else
+static inline void colibri_pxa320_init_udc(void) {}
+#endif
+
 static mfp_cfg_t colibri_pxa320_mmc_pin_config[] __initdata = {
        GPIO22_MMC1_CLK,
        GPIO23_MMC1_CMD,
@@ -212,6 +251,7 @@ void __init colibri_pxa320_init(void)
        colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
                                mfp_to_gpio(MFP_PIN_GPIO28));
        colibri_pxa320_init_uart();
+       colibri_pxa320_init_udc();
 }
 
 MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
index 461ba4080155414d6e64b8d0f61f4dcee49a24fa..3fb0fc09908076b24ed5f7b0200da4afcda12788 100644 (file)
 #include <mach/udc.h>
 #include <mach/pxa2xx_spi.h>
 #include <mach/corgi.h>
-#include <mach/sharpsl.h>
+#include <mach/sharpsl_pm.h>
 
 #include <asm/mach/sharpsl_param.h>
 #include <asm/hardware/scoop.h>
 
 #include "generic.h"
 #include "devices.h"
-#include "sharpsl.h"
 
 static unsigned long corgi_pin_config[] __initdata = {
        /* Static Memory I/O */
@@ -185,8 +184,6 @@ static struct scoop_pcmcia_config corgi_pcmcia_config = {
        .num_devs     = 1,
 };
 
-EXPORT_SYMBOL(corgiscoop_device);
-
 static struct w100_mem_info corgi_fb_mem = {
        .ext_cntl          = 0x00040003,
        .sdram_mode_reg    = 0x00650021,
index 3f1dc74ac048fffc96c049fa9ae28ebbdef950e4..29034778bfdaa03f2cc99608ac17de638ffa0c14 100644 (file)
 #include <asm/mach-types.h>
 #include <mach/hardware.h>
 
-#include <mach/sharpsl.h>
 #include <mach/corgi.h>
 #include <mach/pxa2xx-regs.h>
+#include <mach/sharpsl_pm.h>
 
 #include "generic.h"
-#include "sharpsl.h"
 
 #define SHARPSL_CHARGE_ON_VOLT         0x99  /* 2.9V */
 #define SHARPSL_CHARGE_ON_TEMP         0xe0  /* 2.9V */
@@ -134,11 +133,11 @@ unsigned long corgipm_read_devdata(int type)
        case SHARPSL_STATUS_ACIN:
                return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
        case SHARPSL_STATUS_LOCK:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_batlock);
        case SHARPSL_STATUS_CHRGFULL:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_batfull);
        case SHARPSL_STATUS_FATAL:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_fatal);
        case SHARPSL_ACIN_VOLT:
                return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
        case SHARPSL_BATT_TEMP:
@@ -165,8 +164,6 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
        .should_wakeup   = corgi_should_wakeup,
 #if defined(CONFIG_LCD_CORGI)
        .backlight_limit = corgi_lcd_limit_intensity,
-#elif defined(CONFIG_BACKLIGHT_CORGI)
-       .backlight_limit = corgibl_limit_intensity,
 #endif
        .charge_on_volt   = SHARPSL_CHARGE_ON_VOLT,
        .charge_on_temp   = SHARPSL_CHARGE_ON_TEMP,
index 8e10db148f1b2cccdc70b07ba0785b280a80dcfc..65447dc736c2fd5b3f0fd4e3ce4c46c3c9711dc3 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 
+#include <asm/pmu.h>
 #include <mach/udc.h>
 #include <mach/pxafb.h>
 #include <mach/mmc.h>
@@ -31,6 +32,19 @@ void __init pxa_register_device(struct platform_device *dev, void *data)
                dev_err(&dev->dev, "unable to register device: %d\n", ret);
 }
 
+static struct resource pxa_resource_pmu = {
+       .start  = IRQ_PMU,
+       .end    = IRQ_PMU,
+       .flags  = IORESOURCE_IRQ,
+};
+
+struct platform_device pxa_device_pmu = {
+       .name           = "arm-pmu",
+       .id             = ARM_PMU_DEVICE_CPU,
+       .resource       = &pxa_resource_pmu,
+       .num_resources  = 1,
+};
+
 static struct resource pxamci_resources[] = {
        [0] = {
                .start  = 0x41100000,
index 93817d99761e902a42bd610d5b060e49095b0450..50353ea49ba455bc856d371f1e6170861337f8c4 100644 (file)
@@ -1,3 +1,4 @@
+extern struct platform_device pxa_device_pmu;
 extern struct platform_device pxa_device_mci;
 extern struct platform_device pxa3xx_device_mci2;
 extern struct platform_device pxa3xx_device_mci3;
diff --git a/arch/arm/mach-pxa/e330.c b/arch/arm/mach-pxa/e330.c
deleted file mode 100644 (file)
index 8fde338..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Hardware definitions for the Toshiba e330 PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/clk.h>
-#include <linux/platform_device.h>
-#include <linux/mfd/tc6387xb.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/udc.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-
-/* -------------------- e330 tc6387xb parameters -------------------- */
-
-static struct tc6387xb_platform_data e330_tc6387xb_info = {
-       .enable   = &eseries_tmio_enable,
-       .disable  = &eseries_tmio_disable,
-       .suspend  = &eseries_tmio_suspend,
-       .resume   = &eseries_tmio_resume,
-};
-
-static struct platform_device e330_tc6387xb_device = {
-       .name           = "tc6387xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e330_tc6387xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* --------------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e330_tc6387xb_device,
-};
-
-static void __init e330_init(void)
-{
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       eseries_register_clks();
-       eseries_get_tmio_gpios();
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e7xx_udc_mach_info);
-}
-
-MACHINE_START(E330, "Toshiba e330")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e330_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
diff --git a/arch/arm/mach-pxa/e350.c b/arch/arm/mach-pxa/e350.c
deleted file mode 100644 (file)
index f50f055..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Hardware definitions for the Toshiba e350 PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/clk.h>
-#include <linux/platform_device.h>
-#include <linux/mfd/t7l66xb.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/irqs.h>
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/udc.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-
-/* -------------------- e350 t7l66xb parameters -------------------- */
-
-static struct t7l66xb_platform_data e350_t7l66xb_info = {
-       .irq_base               = IRQ_BOARD_START,
-       .enable                 = &eseries_tmio_enable,
-       .suspend                = &eseries_tmio_suspend,
-       .resume                 = &eseries_tmio_resume,
-};
-
-static struct platform_device e350_t7l66xb_device = {
-       .name           = "t7l66xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e350_t7l66xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* ---------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e350_t7l66xb_device,
-};
-
-static void __init e350_init(void)
-{
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       eseries_register_clks();
-       eseries_get_tmio_gpios();
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e7xx_udc_mach_info);
-}
-
-MACHINE_START(E350, "Toshiba e350")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e350_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
diff --git a/arch/arm/mach-pxa/e400.c b/arch/arm/mach-pxa/e400.c
deleted file mode 100644 (file)
index 55b950f..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Hardware definitions for the Toshiba eseries PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/clk.h>
-#include <linux/platform_device.h>
-#include <linux/mfd/t7l66xb.h>
-#include <linux/mtd/nand.h>
-#include <linux/mtd/partitions.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/pxafb.h>
-#include <mach/udc.h>
-#include <mach/irqs.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-
-/* ------------------------ E400 LCD definitions ------------------------ */
-
-static struct pxafb_mode_info e400_pxafb_mode_info = {
-       .pixclock       = 140703,
-       .xres           = 240,
-       .yres           = 320,
-       .bpp            = 16,
-       .hsync_len      = 4,
-       .left_margin    = 28,
-       .right_margin   = 8,
-       .vsync_len      = 3,
-       .upper_margin   = 5,
-       .lower_margin   = 6,
-       .sync           = 0,
-};
-
-static struct pxafb_mach_info e400_pxafb_mach_info = {
-       .modes          = &e400_pxafb_mode_info,
-       .num_modes      = 1,
-       .lcd_conn       = LCD_COLOR_TFT_16BPP,
-       .lccr3          = 0,
-       .pxafb_backlight_power  = NULL,
-};
-
-/* ------------------------ E400 MFP config ----------------------------- */
-
-static unsigned long e400_pin_config[] __initdata = {
-       /* Chip selects */
-       GPIO15_nCS_1,   /* CS1 - Flash */
-       GPIO80_nCS_4,   /* CS4 - TMIO */
-
-       /* Clocks */
-       GPIO12_32KHz,
-
-       /* BTUART */
-       GPIO42_BTUART_RXD,
-       GPIO43_BTUART_TXD,
-       GPIO44_BTUART_CTS,
-
-       /* TMIO controller */
-       GPIO19_GPIO, /* t7l66xb #PCLR */
-       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
-
-       /* wakeup */
-       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
-};
-
-/* ---------------------------------------------------------------------- */
-
-static struct mtd_partition partition_a = {
-       .name = "Internal NAND flash",
-       .offset =  0,
-       .size =  MTDPART_SIZ_FULL,
-};
-
-static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
-
-static struct nand_bbt_descr e400_t7l66xb_nand_bbt = {
-       .options = 0,
-       .offs = 4,
-       .len = 2,
-       .pattern = scan_ff_pattern
-};
-
-static struct tmio_nand_data e400_t7l66xb_nand_config = {
-       .num_partitions = 1,
-       .partition = &partition_a,
-       .badblock_pattern = &e400_t7l66xb_nand_bbt,
-};
-
-static struct t7l66xb_platform_data e400_t7l66xb_info = {
-       .irq_base               = IRQ_BOARD_START,
-       .enable                 = &eseries_tmio_enable,
-       .suspend                = &eseries_tmio_suspend,
-       .resume                 = &eseries_tmio_resume,
-
-       .nand_data              = &e400_t7l66xb_nand_config,
-};
-
-static struct platform_device e400_t7l66xb_device = {
-       .name           = "t7l66xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e400_t7l66xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* ---------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e400_t7l66xb_device,
-};
-
-static void __init e400_init(void)
-{
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config));
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       /* Fixme - e400 may have a switched clock */
-       eseries_register_clks();
-       eseries_get_tmio_gpios();
-       set_pxa_fb_info(&e400_pxafb_mach_info);
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e7xx_udc_mach_info);
-}
-
-MACHINE_START(E400, "Toshiba e400")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e400_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
diff --git a/arch/arm/mach-pxa/e740.c b/arch/arm/mach-pxa/e740.c
deleted file mode 100644 (file)
index d578021..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Hardware definitions for the Toshiba eseries PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/platform_device.h>
-#include <linux/fb.h>
-#include <linux/clk.h>
-#include <linux/mfd/t7l66xb.h>
-
-#include <video/w100fb.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/udc.h>
-#include <mach/irda.h>
-#include <mach/irqs.h>
-#include <mach/audio.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-#include "devices.h"
-
-/* ------------------------ e740 video support --------------------------- */
-
-static struct w100_gen_regs e740_lcd_regs = {
-       .lcd_format =            0x00008023,
-       .lcdd_cntl1 =            0x0f000000,
-       .lcdd_cntl2 =            0x0003ffff,
-       .genlcd_cntl1 =          0x00ffff03,
-       .genlcd_cntl2 =          0x003c0f03,
-       .genlcd_cntl3 =          0x000143aa,
-};
-
-static struct w100_mode e740_lcd_mode = {
-       .xres            = 240,
-       .yres            = 320,
-       .left_margin     = 20,
-       .right_margin    = 28,
-       .upper_margin    = 9,
-       .lower_margin    = 8,
-       .crtc_ss         = 0x80140013,
-       .crtc_ls         = 0x81150110,
-       .crtc_gs         = 0x80050005,
-       .crtc_vpos_gs    = 0x000a0009,
-       .crtc_rev        = 0x0040010a,
-       .crtc_dclk       = 0xa906000a,
-       .crtc_gclk       = 0x80050108,
-       .crtc_goe        = 0x80050108,
-       .pll_freq        = 57,
-       .pixclk_divider         = 4,
-       .pixclk_divider_rotated = 4,
-       .pixclk_src     = CLK_SRC_XTAL,
-       .sysclk_divider  = 1,
-       .sysclk_src     = CLK_SRC_PLL,
-       .crtc_ps1_active =       0x41060010,
-};
-
-static struct w100_gpio_regs e740_w100_gpio_info = {
-       .init_data1 = 0x21002103,
-       .gpio_dir1  = 0xffffdeff,
-       .gpio_oe1   = 0x03c00643,
-       .init_data2 = 0x003f003f,
-       .gpio_dir2  = 0xffffffff,
-       .gpio_oe2   = 0x000000ff,
-};
-
-static struct w100fb_mach_info e740_fb_info = {
-       .modelist   = &e740_lcd_mode,
-       .num_modes  = 1,
-       .regs       = &e740_lcd_regs,
-       .gpio       = &e740_w100_gpio_info,
-       .xtal_freq = 14318000,
-       .xtal_dbl   = 1,
-};
-
-static struct resource e740_fb_resources[] = {
-       [0] = {
-               .start          = 0x0c000000,
-               .end            = 0x0cffffff,
-               .flags          = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device e740_fb_device = {
-       .name           = "w100fb",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &e740_fb_info,
-       },
-       .num_resources  = ARRAY_SIZE(e740_fb_resources),
-       .resource       = e740_fb_resources,
-};
-
-/* --------------------------- MFP Pin config -------------------------- */
-
-static unsigned long e740_pin_config[] __initdata = {
-       /* Chip selects */
-       GPIO15_nCS_1,   /* CS1 - Flash */
-       GPIO79_nCS_3,   /* CS3 - IMAGEON */
-       GPIO80_nCS_4,   /* CS4 - TMIO */
-
-       /* Clocks */
-       GPIO12_32KHz,
-
-       /* BTUART */
-       GPIO42_BTUART_RXD,
-       GPIO43_BTUART_TXD,
-       GPIO44_BTUART_CTS,
-
-       /* TMIO controller */
-       GPIO19_GPIO, /* t7l66xb #PCLR */
-       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
-
-       /* UDC */
-       GPIO13_GPIO,
-       GPIO3_GPIO,
-
-       /* IrDA */
-       GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
-
-       /* AC97 */
-       GPIO28_AC97_BITCLK,
-       GPIO29_AC97_SDATA_IN_0,
-       GPIO30_AC97_SDATA_OUT,
-       GPIO31_AC97_SYNC,
-
-       /* Audio power control */
-       GPIO16_GPIO,  /* AC97 codec AVDD2 supply (analogue power) */
-       GPIO40_GPIO,  /* Mic amp power */
-       GPIO41_GPIO,  /* Headphone amp power */
-
-       /* PC Card */
-       GPIO8_GPIO,   /* CD0 */
-       GPIO44_GPIO,  /* CD1 */
-       GPIO11_GPIO,  /* IRQ0 */
-       GPIO6_GPIO,   /* IRQ1 */
-       GPIO27_GPIO,  /* RST0 */
-       GPIO24_GPIO,  /* RST1 */
-       GPIO20_GPIO,  /* PWR0 */
-       GPIO23_GPIO,  /* PWR1 */
-       GPIO48_nPOE,
-       GPIO49_nPWE,
-       GPIO50_nPIOR,
-       GPIO51_nPIOW,
-       GPIO52_nPCE_1,
-       GPIO53_nPCE_2,
-       GPIO54_nPSKTSEL,
-       GPIO55_nPREG,
-       GPIO56_nPWAIT,
-       GPIO57_nIOIS16,
-
-       /* wakeup */
-       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
-};
-
-/* -------------------- e740 t7l66xb parameters -------------------- */
-
-static struct t7l66xb_platform_data e740_t7l66xb_info = {
-       .irq_base               = IRQ_BOARD_START,
-       .enable                 = &eseries_tmio_enable,
-       .suspend                = &eseries_tmio_suspend,
-       .resume                 = &eseries_tmio_resume,
-};
-
-static struct platform_device e740_t7l66xb_device = {
-       .name           = "t7l66xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e740_t7l66xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* ----------------------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e740_fb_device,
-       &e740_t7l66xb_device,
-};
-
-static void __init e740_init(void)
-{
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       eseries_register_clks();
-       clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
-                       "UDCCLK", &pxa25x_device_udc.dev),
-       eseries_get_tmio_gpios();
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e7xx_udc_mach_info);
-       pxa_set_ac97_info(NULL);
-       pxa_set_ficp_info(&e7xx_ficp_platform_data);
-}
-
-MACHINE_START(E740, "Toshiba e740")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e740_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
diff --git a/arch/arm/mach-pxa/e750.c b/arch/arm/mach-pxa/e750.c
deleted file mode 100644 (file)
index af83caa..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Hardware definitions for the Toshiba eseries PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/platform_device.h>
-#include <linux/fb.h>
-#include <linux/mfd/tc6393xb.h>
-
-#include <video/w100fb.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/udc.h>
-#include <mach/irda.h>
-#include <mach/irqs.h>
-#include <mach/audio.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-
-/* ---------------------- E750 LCD definitions -------------------- */
-
-static struct w100_gen_regs e750_lcd_regs = {
-       .lcd_format =            0x00008003,
-       .lcdd_cntl1 =            0x00000000,
-       .lcdd_cntl2 =            0x0003ffff,
-       .genlcd_cntl1 =          0x00fff003,
-       .genlcd_cntl2 =          0x003c0f03,
-       .genlcd_cntl3 =          0x000143aa,
-};
-
-static struct w100_mode e750_lcd_mode = {
-       .xres            = 240,
-       .yres            = 320,
-       .left_margin     = 21,
-       .right_margin    = 22,
-       .upper_margin    = 5,
-       .lower_margin    = 4,
-       .crtc_ss         = 0x80150014,
-       .crtc_ls         = 0x8014000d,
-       .crtc_gs         = 0xc1000005,
-       .crtc_vpos_gs    = 0x00020147,
-       .crtc_rev        = 0x0040010a,
-       .crtc_dclk       = 0xa1700030,
-       .crtc_gclk       = 0x80cc0015,
-       .crtc_goe        = 0x80cc0015,
-       .crtc_ps1_active = 0x61060017,
-       .pll_freq        = 57,
-       .pixclk_divider         = 4,
-       .pixclk_divider_rotated = 4,
-       .pixclk_src     = CLK_SRC_XTAL,
-       .sysclk_divider  = 1,
-       .sysclk_src     = CLK_SRC_PLL,
-};
-
-static struct w100_gpio_regs e750_w100_gpio_info = {
-       .init_data1 = 0x01192f1b,
-       .gpio_dir1  = 0xd5ffdeff,
-       .gpio_oe1   = 0x000020bf,
-       .init_data2 = 0x010f010f,
-       .gpio_dir2  = 0xffffffff,
-       .gpio_oe2   = 0x000001cf,
-};
-
-static struct w100fb_mach_info e750_fb_info = {
-       .modelist   = &e750_lcd_mode,
-       .num_modes  = 1,
-       .regs       = &e750_lcd_regs,
-       .gpio       = &e750_w100_gpio_info,
-       .xtal_freq  = 14318000,
-       .xtal_dbl   = 1,
-};
-
-static struct resource e750_fb_resources[] = {
-       [0] = {
-               .start          = 0x0c000000,
-               .end            = 0x0cffffff,
-               .flags          = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device e750_fb_device = {
-       .name           = "w100fb",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &e750_fb_info,
-       },
-       .num_resources  = ARRAY_SIZE(e750_fb_resources),
-       .resource       = e750_fb_resources,
-};
-
-/* -------------------- e750 MFP parameters -------------------- */
-
-static unsigned long e750_pin_config[] __initdata = {
-       /* Chip selects */
-       GPIO15_nCS_1,   /* CS1 - Flash */
-       GPIO79_nCS_3,   /* CS3 - IMAGEON */
-       GPIO80_nCS_4,   /* CS4 - TMIO */
-
-       /* Clocks */
-       GPIO11_3_6MHz,
-
-       /* BTUART */
-       GPIO42_BTUART_RXD,
-       GPIO43_BTUART_TXD,
-       GPIO44_BTUART_CTS,
-
-       /* TMIO controller */
-       GPIO19_GPIO, /* t7l66xb #PCLR */
-       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
-
-       /* UDC */
-       GPIO13_GPIO,
-       GPIO3_GPIO,
-
-       /* IrDA */
-       GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
-
-       /* AC97 */
-       GPIO28_AC97_BITCLK,
-       GPIO29_AC97_SDATA_IN_0,
-       GPIO30_AC97_SDATA_OUT,
-       GPIO31_AC97_SYNC,
-
-       /* Audio power control */
-       GPIO4_GPIO,  /* Headphone amp power */
-       GPIO7_GPIO,  /* Speaker amp power */
-       GPIO37_GPIO, /* Headphone detect */
-
-       /* PC Card */
-       GPIO8_GPIO,   /* CD0 */
-       GPIO44_GPIO,  /* CD1 */
-       GPIO11_GPIO,  /* IRQ0 */
-       GPIO6_GPIO,   /* IRQ1 */
-       GPIO27_GPIO,  /* RST0 */
-       GPIO24_GPIO,  /* RST1 */
-       GPIO20_GPIO,  /* PWR0 */
-       GPIO23_GPIO,  /* PWR1 */
-       GPIO48_nPOE,
-       GPIO49_nPWE,
-       GPIO50_nPIOR,
-       GPIO51_nPIOW,
-       GPIO52_nPCE_1,
-       GPIO53_nPCE_2,
-       GPIO54_nPSKTSEL,
-       GPIO55_nPREG,
-       GPIO56_nPWAIT,
-       GPIO57_nIOIS16,
-
-       /* wakeup */
-       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
-};
-
-/* ----------------- e750 tc6393xb parameters ------------------ */
-
-static struct tc6393xb_platform_data e750_tc6393xb_info = {
-       .irq_base       = IRQ_BOARD_START,
-       .scr_pll2cr     = 0x0cc1,
-       .scr_gper       = 0,
-       .gpio_base      = -1,
-       .suspend        = &eseries_tmio_suspend,
-       .resume         = &eseries_tmio_resume,
-       .enable         = &eseries_tmio_enable,
-       .disable        = &eseries_tmio_disable,
-};
-
-static struct platform_device e750_tc6393xb_device = {
-       .name           = "tc6393xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e750_tc6393xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* ------------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e750_fb_device,
-       &e750_tc6393xb_device,
-};
-
-static void __init e750_init(void)
-{
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
-                       "GPIO11_CLK", NULL),
-       eseries_get_tmio_gpios();
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e7xx_udc_mach_info);
-       pxa_set_ac97_info(NULL);
-       pxa_set_ficp_info(&e7xx_ficp_platform_data);
-}
-
-MACHINE_START(E750, "Toshiba e750")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e750_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
diff --git a/arch/arm/mach-pxa/e800.c b/arch/arm/mach-pxa/e800.c
deleted file mode 100644 (file)
index 8ea97bf..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Hardware definitions for the Toshiba eseries PDAs
- *
- * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
- *
- * This file is licensed under
- * the terms of the GNU General Public License version 2. This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/platform_device.h>
-#include <linux/fb.h>
-#include <linux/mfd/tc6393xb.h>
-
-#include <video/w100fb.h>
-
-#include <asm/setup.h>
-#include <asm/mach/arch.h>
-#include <asm/mach-types.h>
-
-#include <mach/pxa25x.h>
-#include <mach/eseries-gpio.h>
-#include <mach/udc.h>
-#include <mach/irqs.h>
-#include <mach/audio.h>
-
-#include "generic.h"
-#include "eseries.h"
-#include "clock.h"
-
-/* ------------------------ e800 LCD definitions ------------------------- */
-
-static unsigned long e800_pin_config[] __initdata = {
-       /* AC97 */
-       GPIO28_AC97_BITCLK,
-       GPIO29_AC97_SDATA_IN_0,
-       GPIO30_AC97_SDATA_OUT,
-       GPIO31_AC97_SYNC,
-};
-
-static struct w100_gen_regs e800_lcd_regs = {
-       .lcd_format =            0x00008003,
-       .lcdd_cntl1 =            0x02a00000,
-       .lcdd_cntl2 =            0x0003ffff,
-       .genlcd_cntl1 =          0x000ff2a3,
-       .genlcd_cntl2 =          0x000002a3,
-       .genlcd_cntl3 =          0x000102aa,
-};
-
-static struct w100_mode e800_lcd_mode[2] = {
-       [0] = {
-               .xres            = 480,
-               .yres            = 640,
-               .left_margin     = 52,
-               .right_margin    = 148,
-               .upper_margin    = 2,
-               .lower_margin    = 6,
-               .crtc_ss         = 0x80350034,
-               .crtc_ls         = 0x802b0026,
-               .crtc_gs         = 0x80160016,
-               .crtc_vpos_gs    = 0x00020003,
-               .crtc_rev        = 0x0040001d,
-               .crtc_dclk       = 0xe0000000,
-               .crtc_gclk       = 0x82a50049,
-               .crtc_goe        = 0x80ee001c,
-               .crtc_ps1_active = 0x00000000,
-               .pll_freq        = 128,
-               .pixclk_divider         = 4,
-               .pixclk_divider_rotated = 6,
-               .pixclk_src     = CLK_SRC_PLL,
-               .sysclk_divider  = 0,
-               .sysclk_src     = CLK_SRC_PLL,
-       },
-       [1] = {
-               .xres            = 240,
-               .yres            = 320,
-               .left_margin     = 15,
-               .right_margin    = 88,
-               .upper_margin    = 0,
-               .lower_margin    = 7,
-               .crtc_ss         = 0xd010000f,
-               .crtc_ls         = 0x80070003,
-               .crtc_gs         = 0x80000000,
-               .crtc_vpos_gs    = 0x01460147,
-               .crtc_rev        = 0x00400003,
-               .crtc_dclk       = 0xa1700030,
-               .crtc_gclk       = 0x814b0008,
-               .crtc_goe        = 0x80cc0015,
-               .crtc_ps1_active = 0x00000000,
-               .pll_freq        = 100,
-               .pixclk_divider         = 6, /* Wince uses 14 which gives a */
-               .pixclk_divider_rotated = 6, /* 7MHz Pclk. We use a 14MHz one */
-               .pixclk_src     = CLK_SRC_PLL,
-               .sysclk_divider  = 0,
-               .sysclk_src     = CLK_SRC_PLL,
-       }
-};
-
-
-static struct w100_gpio_regs e800_w100_gpio_info = {
-       .init_data1 = 0xc13fc019,
-       .gpio_dir1  = 0x3e40df7f,
-       .gpio_oe1   = 0x003c3000,
-       .init_data2 = 0x00000000,
-       .gpio_dir2  = 0x00000000,
-       .gpio_oe2   = 0x00000000,
-};
-
-static struct w100_mem_info e800_w100_mem_info = {
-       .ext_cntl        = 0x09640011,
-       .sdram_mode_reg  = 0x00600021,
-       .ext_timing_cntl = 0x10001545,
-       .io_cntl         = 0x7ddd7333,
-       .size            = 0x1fffff,
-};
-
-static void e800_tg_change(struct w100fb_par *par)
-{
-       unsigned long tmp;
-
-       tmp = w100fb_gpio_read(W100_GPIO_PORT_A);
-       if (par->mode->xres == 480)
-               tmp |= 0x100;
-       else
-               tmp &= ~0x100;
-       w100fb_gpio_write(W100_GPIO_PORT_A, tmp);
-}
-
-static struct w100_tg_info e800_tg_info = {
-       .change = e800_tg_change,
-};
-
-static struct w100fb_mach_info e800_fb_info = {
-       .modelist   = e800_lcd_mode,
-       .num_modes  = 2,
-       .regs       = &e800_lcd_regs,
-       .gpio       = &e800_w100_gpio_info,
-       .mem        = &e800_w100_mem_info,
-       .tg         = &e800_tg_info,
-       .xtal_freq  = 16000000,
-};
-
-static struct resource e800_fb_resources[] = {
-       [0] = {
-               .start          = 0x0c000000,
-               .end            = 0x0cffffff,
-               .flags          = IORESOURCE_MEM,
-       },
-};
-
-static struct platform_device e800_fb_device = {
-       .name           = "w100fb",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &e800_fb_info,
-       },
-       .num_resources  = ARRAY_SIZE(e800_fb_resources),
-       .resource       = e800_fb_resources,
-};
-
-/* --------------------------- UDC definitions --------------------------- */
-
-static struct pxa2xx_udc_mach_info e800_udc_mach_info = {
-       .gpio_vbus   = GPIO_E800_USB_DISC,
-       .gpio_pullup = GPIO_E800_USB_PULLUP,
-       .gpio_pullup_inverted = 1
-};
-
-/* ----------------- e800 tc6393xb parameters ------------------ */
-
-static struct tc6393xb_platform_data e800_tc6393xb_info = {
-       .irq_base       = IRQ_BOARD_START,
-       .scr_pll2cr     = 0x0cc1,
-       .scr_gper       = 0,
-       .gpio_base      = -1,
-       .suspend        = &eseries_tmio_suspend,
-       .resume         = &eseries_tmio_resume,
-       .enable         = &eseries_tmio_enable,
-       .disable        = &eseries_tmio_disable,
-};
-
-static struct platform_device e800_tc6393xb_device = {
-       .name           = "tc6393xb",
-       .id             = -1,
-       .dev            = {
-               .platform_data = &e800_tc6393xb_info,
-       },
-       .num_resources = 2,
-       .resource      = eseries_tmio_resources,
-};
-
-/* ----------------------------------------------------------------------- */
-
-static struct platform_device *devices[] __initdata = {
-       &e800_fb_device,
-       &e800_tc6393xb_device,
-};
-
-static void __init e800_init(void)
-{
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(e800_pin_config));
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-       clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
-                       "GPIO11_CLK", NULL),
-       eseries_get_tmio_gpios();
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_udc_info(&e800_udc_mach_info);
-       pxa_set_ac97_info(NULL);
-}
-
-MACHINE_START(E800, "Toshiba e800")
-       /* Maintainer: Ian Molton (spyro@f2s.com) */
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .boot_params    = 0xa0000100,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa25x_init_irq,
-       .fixup          = eseries_fixup,
-       .init_machine   = e800_init,
-       .timer          = &pxa_timer,
-MACHINE_END
-
index a0ab3082a0009d31b3837f1234f6f4175cde6a8b..349212a1cbd3ab741a60412c431ab43fd1b17330 100644 (file)
 #include <linux/gpio.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
+#include <linux/mfd/tc6387xb.h>
+#include <linux/mfd/tc6393xb.h>
+#include <linux/mfd/t7l66xb.h>
+#include <linux/mtd/nand.h>
+#include <linux/mtd/partitions.h>
+
+#include <video/w100fb.h>
 
 #include <asm/setup.h>
 #include <asm/mach/arch.h>
 
 #include <mach/pxa25x.h>
 #include <mach/eseries-gpio.h>
+#include <mach/audio.h>
+#include <mach/pxafb.h>
 #include <mach/udc.h>
 #include <mach/irda.h>
 
+#include "devices.h"
 #include "generic.h"
 #include "clock.h"
 
@@ -130,3 +140,802 @@ void eseries_register_clks(void)
        clkdev_add_table(eseries_clkregs, ARRAY_SIZE(eseries_clkregs));
 }
 
+#ifdef CONFIG_MACH_E330
+/* -------------------- e330 tc6387xb parameters -------------------- */
+
+static struct tc6387xb_platform_data e330_tc6387xb_info = {
+       .enable   = &eseries_tmio_enable,
+       .disable  = &eseries_tmio_disable,
+       .suspend  = &eseries_tmio_suspend,
+       .resume   = &eseries_tmio_resume,
+};
+
+static struct platform_device e330_tc6387xb_device = {
+       .name           = "tc6387xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e330_tc6387xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* --------------------------------------------------------------- */
+
+static struct platform_device *e330_devices[] __initdata = {
+       &e330_tc6387xb_device,
+};
+
+static void __init e330_init(void)
+{
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       eseries_register_clks();
+       eseries_get_tmio_gpios();
+       platform_add_devices(ARRAY_AND_SIZE(e330_devices));
+       pxa_set_udc_info(&e7xx_udc_mach_info);
+}
+
+MACHINE_START(E330, "Toshiba e330")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e330_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_E350
+/* -------------------- e350 t7l66xb parameters -------------------- */
+
+static struct t7l66xb_platform_data e350_t7l66xb_info = {
+       .irq_base               = IRQ_BOARD_START,
+       .enable                 = &eseries_tmio_enable,
+       .suspend                = &eseries_tmio_suspend,
+       .resume                 = &eseries_tmio_resume,
+};
+
+static struct platform_device e350_t7l66xb_device = {
+       .name           = "t7l66xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e350_t7l66xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* ---------------------------------------------------------- */
+
+static struct platform_device *e350_devices[] __initdata = {
+       &e350_t7l66xb_device,
+};
+
+static void __init e350_init(void)
+{
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       eseries_register_clks();
+       eseries_get_tmio_gpios();
+       platform_add_devices(ARRAY_AND_SIZE(e350_devices));
+       pxa_set_udc_info(&e7xx_udc_mach_info);
+}
+
+MACHINE_START(E350, "Toshiba e350")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e350_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_E400
+/* ------------------------ E400 LCD definitions ------------------------ */
+
+static struct pxafb_mode_info e400_pxafb_mode_info = {
+       .pixclock       = 140703,
+       .xres           = 240,
+       .yres           = 320,
+       .bpp            = 16,
+       .hsync_len      = 4,
+       .left_margin    = 28,
+       .right_margin   = 8,
+       .vsync_len      = 3,
+       .upper_margin   = 5,
+       .lower_margin   = 6,
+       .sync           = 0,
+};
+
+static struct pxafb_mach_info e400_pxafb_mach_info = {
+       .modes          = &e400_pxafb_mode_info,
+       .num_modes      = 1,
+       .lcd_conn       = LCD_COLOR_TFT_16BPP,
+       .lccr3          = 0,
+       .pxafb_backlight_power  = NULL,
+};
+
+/* ------------------------ E400 MFP config ----------------------------- */
+
+static unsigned long e400_pin_config[] __initdata = {
+       /* Chip selects */
+       GPIO15_nCS_1,   /* CS1 - Flash */
+       GPIO80_nCS_4,   /* CS4 - TMIO */
+
+       /* Clocks */
+       GPIO12_32KHz,
+
+       /* BTUART */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO44_BTUART_CTS,
+
+       /* TMIO controller */
+       GPIO19_GPIO, /* t7l66xb #PCLR */
+       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
+
+       /* wakeup */
+       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
+};
+
+/* ---------------------------------------------------------------------- */
+
+static struct mtd_partition partition_a = {
+       .name = "Internal NAND flash",
+       .offset =  0,
+       .size =  MTDPART_SIZ_FULL,
+};
+
+static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
+
+static struct nand_bbt_descr e400_t7l66xb_nand_bbt = {
+       .options = 0,
+       .offs = 4,
+       .len = 2,
+       .pattern = scan_ff_pattern
+};
+
+static struct tmio_nand_data e400_t7l66xb_nand_config = {
+       .num_partitions = 1,
+       .partition = &partition_a,
+       .badblock_pattern = &e400_t7l66xb_nand_bbt,
+};
+
+static struct t7l66xb_platform_data e400_t7l66xb_info = {
+       .irq_base               = IRQ_BOARD_START,
+       .enable                 = &eseries_tmio_enable,
+       .suspend                = &eseries_tmio_suspend,
+       .resume                 = &eseries_tmio_resume,
+
+       .nand_data              = &e400_t7l66xb_nand_config,
+};
+
+static struct platform_device e400_t7l66xb_device = {
+       .name           = "t7l66xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e400_t7l66xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* ---------------------------------------------------------- */
+
+static struct platform_device *e400_devices[] __initdata = {
+       &e400_t7l66xb_device,
+};
+
+static void __init e400_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       /* Fixme - e400 may have a switched clock */
+       eseries_register_clks();
+       eseries_get_tmio_gpios();
+       set_pxa_fb_info(&e400_pxafb_mach_info);
+       platform_add_devices(ARRAY_AND_SIZE(e400_devices));
+       pxa_set_udc_info(&e7xx_udc_mach_info);
+}
+
+MACHINE_START(E400, "Toshiba e400")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e400_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_E740
+/* ------------------------ e740 video support --------------------------- */
+
+static struct w100_gen_regs e740_lcd_regs = {
+       .lcd_format =            0x00008023,
+       .lcdd_cntl1 =            0x0f000000,
+       .lcdd_cntl2 =            0x0003ffff,
+       .genlcd_cntl1 =          0x00ffff03,
+       .genlcd_cntl2 =          0x003c0f03,
+       .genlcd_cntl3 =          0x000143aa,
+};
+
+static struct w100_mode e740_lcd_mode = {
+       .xres            = 240,
+       .yres            = 320,
+       .left_margin     = 20,
+       .right_margin    = 28,
+       .upper_margin    = 9,
+       .lower_margin    = 8,
+       .crtc_ss         = 0x80140013,
+       .crtc_ls         = 0x81150110,
+       .crtc_gs         = 0x80050005,
+       .crtc_vpos_gs    = 0x000a0009,
+       .crtc_rev        = 0x0040010a,
+       .crtc_dclk       = 0xa906000a,
+       .crtc_gclk       = 0x80050108,
+       .crtc_goe        = 0x80050108,
+       .pll_freq        = 57,
+       .pixclk_divider         = 4,
+       .pixclk_divider_rotated = 4,
+       .pixclk_src     = CLK_SRC_XTAL,
+       .sysclk_divider  = 1,
+       .sysclk_src     = CLK_SRC_PLL,
+       .crtc_ps1_active =       0x41060010,
+};
+
+static struct w100_gpio_regs e740_w100_gpio_info = {
+       .init_data1 = 0x21002103,
+       .gpio_dir1  = 0xffffdeff,
+       .gpio_oe1   = 0x03c00643,
+       .init_data2 = 0x003f003f,
+       .gpio_dir2  = 0xffffffff,
+       .gpio_oe2   = 0x000000ff,
+};
+
+static struct w100fb_mach_info e740_fb_info = {
+       .modelist   = &e740_lcd_mode,
+       .num_modes  = 1,
+       .regs       = &e740_lcd_regs,
+       .gpio       = &e740_w100_gpio_info,
+       .xtal_freq = 14318000,
+       .xtal_dbl   = 1,
+};
+
+static struct resource e740_fb_resources[] = {
+       [0] = {
+               .start          = 0x0c000000,
+               .end            = 0x0cffffff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device e740_fb_device = {
+       .name           = "w100fb",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &e740_fb_info,
+       },
+       .num_resources  = ARRAY_SIZE(e740_fb_resources),
+       .resource       = e740_fb_resources,
+};
+
+/* --------------------------- MFP Pin config -------------------------- */
+
+static unsigned long e740_pin_config[] __initdata = {
+       /* Chip selects */
+       GPIO15_nCS_1,   /* CS1 - Flash */
+       GPIO79_nCS_3,   /* CS3 - IMAGEON */
+       GPIO80_nCS_4,   /* CS4 - TMIO */
+
+       /* Clocks */
+       GPIO12_32KHz,
+
+       /* BTUART */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO44_BTUART_CTS,
+
+       /* TMIO controller */
+       GPIO19_GPIO, /* t7l66xb #PCLR */
+       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
+
+       /* UDC */
+       GPIO13_GPIO,
+       GPIO3_GPIO,
+
+       /* IrDA */
+       GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
+
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+
+       /* Audio power control */
+       GPIO16_GPIO,  /* AC97 codec AVDD2 supply (analogue power) */
+       GPIO40_GPIO,  /* Mic amp power */
+       GPIO41_GPIO,  /* Headphone amp power */
+
+       /* PC Card */
+       GPIO8_GPIO,   /* CD0 */
+       GPIO44_GPIO,  /* CD1 */
+       GPIO11_GPIO,  /* IRQ0 */
+       GPIO6_GPIO,   /* IRQ1 */
+       GPIO27_GPIO,  /* RST0 */
+       GPIO24_GPIO,  /* RST1 */
+       GPIO20_GPIO,  /* PWR0 */
+       GPIO23_GPIO,  /* PWR1 */
+       GPIO48_nPOE,
+       GPIO49_nPWE,
+       GPIO50_nPIOR,
+       GPIO51_nPIOW,
+       GPIO52_nPCE_1,
+       GPIO53_nPCE_2,
+       GPIO54_nPSKTSEL,
+       GPIO55_nPREG,
+       GPIO56_nPWAIT,
+       GPIO57_nIOIS16,
+
+       /* wakeup */
+       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
+};
+
+/* -------------------- e740 t7l66xb parameters -------------------- */
+
+static struct t7l66xb_platform_data e740_t7l66xb_info = {
+       .irq_base               = IRQ_BOARD_START,
+       .enable                 = &eseries_tmio_enable,
+       .suspend                = &eseries_tmio_suspend,
+       .resume                 = &eseries_tmio_resume,
+};
+
+static struct platform_device e740_t7l66xb_device = {
+       .name           = "t7l66xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e740_t7l66xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* ----------------------------------------------------------------------- */
+
+static struct platform_device *e740_devices[] __initdata = {
+       &e740_fb_device,
+       &e740_t7l66xb_device,
+};
+
+static void __init e740_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       eseries_register_clks();
+       clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
+                       "UDCCLK", &pxa25x_device_udc.dev),
+       eseries_get_tmio_gpios();
+       platform_add_devices(ARRAY_AND_SIZE(e740_devices));
+       pxa_set_udc_info(&e7xx_udc_mach_info);
+       pxa_set_ac97_info(NULL);
+       pxa_set_ficp_info(&e7xx_ficp_platform_data);
+}
+
+MACHINE_START(E740, "Toshiba e740")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e740_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_E750
+/* ---------------------- E750 LCD definitions -------------------- */
+
+static struct w100_gen_regs e750_lcd_regs = {
+       .lcd_format =            0x00008003,
+       .lcdd_cntl1 =            0x00000000,
+       .lcdd_cntl2 =            0x0003ffff,
+       .genlcd_cntl1 =          0x00fff003,
+       .genlcd_cntl2 =          0x003c0f03,
+       .genlcd_cntl3 =          0x000143aa,
+};
+
+static struct w100_mode e750_lcd_mode = {
+       .xres            = 240,
+       .yres            = 320,
+       .left_margin     = 21,
+       .right_margin    = 22,
+       .upper_margin    = 5,
+       .lower_margin    = 4,
+       .crtc_ss         = 0x80150014,
+       .crtc_ls         = 0x8014000d,
+       .crtc_gs         = 0xc1000005,
+       .crtc_vpos_gs    = 0x00020147,
+       .crtc_rev        = 0x0040010a,
+       .crtc_dclk       = 0xa1700030,
+       .crtc_gclk       = 0x80cc0015,
+       .crtc_goe        = 0x80cc0015,
+       .crtc_ps1_active = 0x61060017,
+       .pll_freq        = 57,
+       .pixclk_divider         = 4,
+       .pixclk_divider_rotated = 4,
+       .pixclk_src     = CLK_SRC_XTAL,
+       .sysclk_divider  = 1,
+       .sysclk_src     = CLK_SRC_PLL,
+};
+
+static struct w100_gpio_regs e750_w100_gpio_info = {
+       .init_data1 = 0x01192f1b,
+       .gpio_dir1  = 0xd5ffdeff,
+       .gpio_oe1   = 0x000020bf,
+       .init_data2 = 0x010f010f,
+       .gpio_dir2  = 0xffffffff,
+       .gpio_oe2   = 0x000001cf,
+};
+
+static struct w100fb_mach_info e750_fb_info = {
+       .modelist   = &e750_lcd_mode,
+       .num_modes  = 1,
+       .regs       = &e750_lcd_regs,
+       .gpio       = &e750_w100_gpio_info,
+       .xtal_freq  = 14318000,
+       .xtal_dbl   = 1,
+};
+
+static struct resource e750_fb_resources[] = {
+       [0] = {
+               .start          = 0x0c000000,
+               .end            = 0x0cffffff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device e750_fb_device = {
+       .name           = "w100fb",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &e750_fb_info,
+       },
+       .num_resources  = ARRAY_SIZE(e750_fb_resources),
+       .resource       = e750_fb_resources,
+};
+
+/* -------------------- e750 MFP parameters -------------------- */
+
+static unsigned long e750_pin_config[] __initdata = {
+       /* Chip selects */
+       GPIO15_nCS_1,   /* CS1 - Flash */
+       GPIO79_nCS_3,   /* CS3 - IMAGEON */
+       GPIO80_nCS_4,   /* CS4 - TMIO */
+
+       /* Clocks */
+       GPIO11_3_6MHz,
+
+       /* BTUART */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO44_BTUART_CTS,
+
+       /* TMIO controller */
+       GPIO19_GPIO, /* t7l66xb #PCLR */
+       GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
+
+       /* UDC */
+       GPIO13_GPIO,
+       GPIO3_GPIO,
+
+       /* IrDA */
+       GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
+
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+
+       /* Audio power control */
+       GPIO4_GPIO,  /* Headphone amp power */
+       GPIO7_GPIO,  /* Speaker amp power */
+       GPIO37_GPIO, /* Headphone detect */
+
+       /* PC Card */
+       GPIO8_GPIO,   /* CD0 */
+       GPIO44_GPIO,  /* CD1 */
+       GPIO11_GPIO,  /* IRQ0 */
+       GPIO6_GPIO,   /* IRQ1 */
+       GPIO27_GPIO,  /* RST0 */
+       GPIO24_GPIO,  /* RST1 */
+       GPIO20_GPIO,  /* PWR0 */
+       GPIO23_GPIO,  /* PWR1 */
+       GPIO48_nPOE,
+       GPIO49_nPWE,
+       GPIO50_nPIOR,
+       GPIO51_nPIOW,
+       GPIO52_nPCE_1,
+       GPIO53_nPCE_2,
+       GPIO54_nPSKTSEL,
+       GPIO55_nPREG,
+       GPIO56_nPWAIT,
+       GPIO57_nIOIS16,
+
+       /* wakeup */
+       GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
+};
+
+/* ----------------- e750 tc6393xb parameters ------------------ */
+
+static struct tc6393xb_platform_data e750_tc6393xb_info = {
+       .irq_base       = IRQ_BOARD_START,
+       .scr_pll2cr     = 0x0cc1,
+       .scr_gper       = 0,
+       .gpio_base      = -1,
+       .suspend        = &eseries_tmio_suspend,
+       .resume         = &eseries_tmio_resume,
+       .enable         = &eseries_tmio_enable,
+       .disable        = &eseries_tmio_disable,
+};
+
+static struct platform_device e750_tc6393xb_device = {
+       .name           = "tc6393xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e750_tc6393xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* ------------------------------------------------------------- */
+
+static struct platform_device *e750_devices[] __initdata = {
+       &e750_fb_device,
+       &e750_tc6393xb_device,
+};
+
+static void __init e750_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
+                       "GPIO11_CLK", NULL),
+       eseries_get_tmio_gpios();
+       platform_add_devices(ARRAY_AND_SIZE(e750_devices));
+       pxa_set_udc_info(&e7xx_udc_mach_info);
+       pxa_set_ac97_info(NULL);
+       pxa_set_ficp_info(&e7xx_ficp_platform_data);
+}
+
+MACHINE_START(E750, "Toshiba e750")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e750_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_E800
+/* ------------------------ e800 LCD definitions ------------------------- */
+
+static unsigned long e800_pin_config[] __initdata = {
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+};
+
+static struct w100_gen_regs e800_lcd_regs = {
+       .lcd_format =            0x00008003,
+       .lcdd_cntl1 =            0x02a00000,
+       .lcdd_cntl2 =            0x0003ffff,
+       .genlcd_cntl1 =          0x000ff2a3,
+       .genlcd_cntl2 =          0x000002a3,
+       .genlcd_cntl3 =          0x000102aa,
+};
+
+static struct w100_mode e800_lcd_mode[2] = {
+       [0] = {
+               .xres            = 480,
+               .yres            = 640,
+               .left_margin     = 52,
+               .right_margin    = 148,
+               .upper_margin    = 2,
+               .lower_margin    = 6,
+               .crtc_ss         = 0x80350034,
+               .crtc_ls         = 0x802b0026,
+               .crtc_gs         = 0x80160016,
+               .crtc_vpos_gs    = 0x00020003,
+               .crtc_rev        = 0x0040001d,
+               .crtc_dclk       = 0xe0000000,
+               .crtc_gclk       = 0x82a50049,
+               .crtc_goe        = 0x80ee001c,
+               .crtc_ps1_active = 0x00000000,
+               .pll_freq        = 128,
+               .pixclk_divider         = 4,
+               .pixclk_divider_rotated = 6,
+               .pixclk_src     = CLK_SRC_PLL,
+               .sysclk_divider  = 0,
+               .sysclk_src     = CLK_SRC_PLL,
+       },
+       [1] = {
+               .xres            = 240,
+               .yres            = 320,
+               .left_margin     = 15,
+               .right_margin    = 88,
+               .upper_margin    = 0,
+               .lower_margin    = 7,
+               .crtc_ss         = 0xd010000f,
+               .crtc_ls         = 0x80070003,
+               .crtc_gs         = 0x80000000,
+               .crtc_vpos_gs    = 0x01460147,
+               .crtc_rev        = 0x00400003,
+               .crtc_dclk       = 0xa1700030,
+               .crtc_gclk       = 0x814b0008,
+               .crtc_goe        = 0x80cc0015,
+               .crtc_ps1_active = 0x00000000,
+               .pll_freq        = 100,
+               .pixclk_divider         = 6, /* Wince uses 14 which gives a */
+               .pixclk_divider_rotated = 6, /* 7MHz Pclk. We use a 14MHz one */
+               .pixclk_src     = CLK_SRC_PLL,
+               .sysclk_divider  = 0,
+               .sysclk_src     = CLK_SRC_PLL,
+       }
+};
+
+
+static struct w100_gpio_regs e800_w100_gpio_info = {
+       .init_data1 = 0xc13fc019,
+       .gpio_dir1  = 0x3e40df7f,
+       .gpio_oe1   = 0x003c3000,
+       .init_data2 = 0x00000000,
+       .gpio_dir2  = 0x00000000,
+       .gpio_oe2   = 0x00000000,
+};
+
+static struct w100_mem_info e800_w100_mem_info = {
+       .ext_cntl        = 0x09640011,
+       .sdram_mode_reg  = 0x00600021,
+       .ext_timing_cntl = 0x10001545,
+       .io_cntl         = 0x7ddd7333,
+       .size            = 0x1fffff,
+};
+
+static void e800_tg_change(struct w100fb_par *par)
+{
+       unsigned long tmp;
+
+       tmp = w100fb_gpio_read(W100_GPIO_PORT_A);
+       if (par->mode->xres == 480)
+               tmp |= 0x100;
+       else
+               tmp &= ~0x100;
+       w100fb_gpio_write(W100_GPIO_PORT_A, tmp);
+}
+
+static struct w100_tg_info e800_tg_info = {
+       .change = e800_tg_change,
+};
+
+static struct w100fb_mach_info e800_fb_info = {
+       .modelist   = e800_lcd_mode,
+       .num_modes  = 2,
+       .regs       = &e800_lcd_regs,
+       .gpio       = &e800_w100_gpio_info,
+       .mem        = &e800_w100_mem_info,
+       .tg         = &e800_tg_info,
+       .xtal_freq  = 16000000,
+};
+
+static struct resource e800_fb_resources[] = {
+       [0] = {
+               .start          = 0x0c000000,
+               .end            = 0x0cffffff,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device e800_fb_device = {
+       .name           = "w100fb",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &e800_fb_info,
+       },
+       .num_resources  = ARRAY_SIZE(e800_fb_resources),
+       .resource       = e800_fb_resources,
+};
+
+/* --------------------------- UDC definitions --------------------------- */
+
+static struct pxa2xx_udc_mach_info e800_udc_mach_info = {
+       .gpio_vbus   = GPIO_E800_USB_DISC,
+       .gpio_pullup = GPIO_E800_USB_PULLUP,
+       .gpio_pullup_inverted = 1
+};
+
+/* ----------------- e800 tc6393xb parameters ------------------ */
+
+static struct tc6393xb_platform_data e800_tc6393xb_info = {
+       .irq_base       = IRQ_BOARD_START,
+       .scr_pll2cr     = 0x0cc1,
+       .scr_gper       = 0,
+       .gpio_base      = -1,
+       .suspend        = &eseries_tmio_suspend,
+       .resume         = &eseries_tmio_resume,
+       .enable         = &eseries_tmio_enable,
+       .disable        = &eseries_tmio_disable,
+};
+
+static struct platform_device e800_tc6393xb_device = {
+       .name           = "tc6393xb",
+       .id             = -1,
+       .dev            = {
+               .platform_data = &e800_tc6393xb_info,
+       },
+       .num_resources = 2,
+       .resource      = eseries_tmio_resources,
+};
+
+/* ----------------------------------------------------------------------- */
+
+static struct platform_device *e800_devices[] __initdata = {
+       &e800_fb_device,
+       &e800_tc6393xb_device,
+};
+
+static void __init e800_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(e800_pin_config));
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+       clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
+                       "GPIO11_CLK", NULL),
+       eseries_get_tmio_gpios();
+       platform_add_devices(ARRAY_AND_SIZE(e800_devices));
+       pxa_set_udc_info(&e800_udc_mach_info);
+       pxa_set_ac97_info(NULL);
+}
+
+MACHINE_START(E800, "Toshiba e800")
+       /* Maintainer: Ian Molton (spyro@f2s.com) */
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa25x_init_irq,
+       .fixup          = eseries_fixup,
+       .init_machine   = e800_init,
+       .timer          = &pxa_timer,
+MACHINE_END
+#endif
diff --git a/arch/arm/mach-pxa/imote2.c b/arch/arm/mach-pxa/imote2.c
deleted file mode 100644 (file)
index 5161dca..0000000
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * linux/arch/arm/mach-pxa/imote2.c
- *
- * Author:     Ed C. Epp
- * Created:    Nov 05, 2002
- * Copyright:  Intel Corp.
- *
- * Modified 2008:  Jonathan Cameron
- *
- * The Imote2 is a wireless sensor node platform sold
- * by Crossbow (www.xbow.com).
- */
-
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/platform_device.h>
-#include <linux/regulator/machine.h>
-#include <linux/gpio.h>
-#include <linux/leds.h>
-#include <linux/spi/spi.h>
-#include <linux/i2c.h>
-#include <linux/mfd/da903x.h>
-#include <linux/sht15.h>
-
-#include <asm/mach-types.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/mach/flash.h>
-
-#include <mach/pxa27x.h>
-#include <plat/i2c.h>
-#include <mach/udc.h>
-#include <mach/mmc.h>
-#include <mach/pxa2xx_spi.h>
-#include <mach/pxa27x-udc.h>
-
-#include "devices.h"
-#include "generic.h"
-
-static unsigned long imote2_pin_config[] __initdata = {
-
-       /* Device Identification for wakeup*/
-       GPIO102_GPIO,
-
-       /* Button */
-       GPIO91_GPIO,
-
-       /* DA9030 */
-       GPIO1_GPIO,
-
-       /* MMC */
-       GPIO32_MMC_CLK,
-       GPIO112_MMC_CMD,
-       GPIO92_MMC_DAT_0,
-       GPIO109_MMC_DAT_1,
-       GPIO110_MMC_DAT_2,
-       GPIO111_MMC_DAT_3,
-
-       /* 802.15.4 radio - driver out of mainline */
-       GPIO22_GPIO,                    /* CC_RSTN */
-       GPIO114_GPIO,                   /* CC_FIFO */
-       GPIO116_GPIO,                   /* CC_CCA */
-       GPIO0_GPIO,                     /* CC_FIFOP */
-       GPIO16_GPIO,                    /* CCSFD */
-       GPIO115_GPIO,                   /* Power enable */
-
-       /* I2C */
-       GPIO117_I2C_SCL,
-       GPIO118_I2C_SDA,
-
-       /* SSP 3 - 802.15.4 radio */
-       GPIO39_GPIO,                    /* Chip Select */
-       GPIO34_SSP3_SCLK,
-       GPIO35_SSP3_TXD,
-       GPIO41_SSP3_RXD,
-
-       /* SSP 2 - to daughter boards */
-       GPIO37_GPIO,                    /* Chip Select */
-       GPIO36_SSP2_SCLK,
-       GPIO38_SSP2_TXD,
-       GPIO11_SSP2_RXD,
-
-       /* SSP 1 - to daughter boards */
-       GPIO24_GPIO,                    /* Chip Select */
-       GPIO23_SSP1_SCLK,
-       GPIO25_SSP1_TXD,
-       GPIO26_SSP1_RXD,
-
-       /* BTUART Basic Connector*/
-       GPIO42_BTUART_RXD,
-       GPIO43_BTUART_TXD,
-       GPIO44_BTUART_CTS,
-       GPIO45_BTUART_RTS,
-
-       /* STUART Serial console via debug board*/
-       GPIO46_STUART_RXD,
-       GPIO47_STUART_TXD,
-
-       /* Basic sensor board */
-       GPIO96_GPIO,    /* accelerometer interrupt */
-       GPIO99_GPIO,    /* ADC interrupt */
-
-       /* SHT15 */
-       GPIO100_GPIO,
-       GPIO98_GPIO,
-
-       /* Connector pins specified as gpios */
-       GPIO94_GPIO, /* large basic connector pin 14 */
-       GPIO10_GPIO, /* large basic connector pin 23 */
-
-       /* LEDS */
-       GPIO103_GPIO, /* red led */
-       GPIO104_GPIO, /* green led */
-       GPIO105_GPIO, /* blue led */
-};
-
-static struct sht15_platform_data platform_data_sht15 = {
-       .gpio_data =  100,
-       .gpio_sck  =  98,
-};
-
-static struct platform_device sht15 = {
-       .name = "sht15",
-       .id = -1,
-       .dev = {
-               .platform_data = &platform_data_sht15,
-       },
-};
-
-static struct regulator_consumer_supply imote2_sensor_3_con[] = {
-       {
-               .dev = &sht15.dev,
-               .supply = "vcc",
-       },
-};
-
-static struct gpio_led imote2_led_pins[] = {
-       {
-               .name       =  "imote2:red",
-               .gpio       = 103,
-               .active_low = 1,
-       }, {
-               .name       = "imote2:green",
-               .gpio       = 104,
-               .active_low = 1,
-       }, {
-               .name       = "imote2:blue",
-               .gpio       = 105,
-               .active_low = 1,
-       },
-};
-
-static struct gpio_led_platform_data imote2_led_data = {
-       .num_leds = ARRAY_SIZE(imote2_led_pins),
-       .leds     = imote2_led_pins,
-};
-
-static struct platform_device imote2_leds = {
-       .name = "leds-gpio",
-       .id   = -1,
-       .dev = {
-               .platform_data = &imote2_led_data,
-       },
-};
-
-/* Reverse engineered partly from Platformx drivers */
-enum imote2_ldos{
-       vcc_vref,
-       vcc_cc2420,
-       vcc_mica,
-       vcc_bt,
-       /* The two voltages available to sensor boards */
-       vcc_sensor_1_8,
-       vcc_sensor_3,
-
-       vcc_sram_ext, /* directly connected to the pxa271 */
-       vcc_pxa_pll,
-       vcc_pxa_usim, /* Reference voltage for certain gpios */
-       vcc_pxa_mem,
-       vcc_pxa_flash,
-       vcc_pxa_core, /*Dc-Dc buck not yet supported */
-       vcc_lcd,
-       vcc_bb,
-       vcc_bbio,
-       vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
-};
-
-/* The values of the various regulator constraints are obviously dependent
- * on exactly what is wired to each ldo.  Unfortunately this information is
- * not generally available.  More information has been requested from Xbow
- * but as of yet they haven't been forthcoming.
- *
- * Some of these are clearly Stargate 2 related (no way of plugging
- * in an lcd on the IM2 for example!).
- */
-static struct regulator_init_data imote2_ldo_init_data[] = {
-       [vcc_bbio] = {
-               .constraints = { /* board default 1.8V */
-                       .name = "vcc_bbio",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-               },
-       },
-       [vcc_bb] = {
-               .constraints = { /* board default 2.8V */
-                       .name = "vcc_bb",
-                       .min_uV = 2700000,
-                       .max_uV = 3000000,
-               },
-       },
-       [vcc_pxa_flash] = {
-               .constraints = {/* default is 1.8V */
-                       .name = "vcc_pxa_flash",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-               },
-       },
-       [vcc_cc2420] = { /* also vcc_io */
-               .constraints = {
-                       /* board default is 2.8V */
-                       .name = "vcc_cc2420",
-                       .min_uV = 2700000,
-                       .max_uV = 3300000,
-               },
-       },
-       [vcc_vref] = { /* Reference for what? */
-               .constraints = { /* default 1.8V */
-                       .name = "vcc_vref",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-               },
-       },
-       [vcc_sram_ext] = {
-               .constraints = { /* default 2.8V */
-                       .name = "vcc_sram_ext",
-                       .min_uV = 2800000,
-                       .max_uV = 2800000,
-               },
-       },
-       [vcc_mica] = {
-               .constraints = { /* default 2.8V */
-                       .name = "vcc_mica",
-                       .min_uV = 2800000,
-                       .max_uV = 2800000,
-               },
-       },
-       [vcc_bt] = {
-               .constraints = { /* default 2.8V */
-                       .name = "vcc_bt",
-                       .min_uV = 2800000,
-                       .max_uV = 2800000,
-               },
-       },
-       [vcc_lcd] = {
-               .constraints = { /* default 2.8V */
-                       .name = "vcc_lcd",
-                       .min_uV = 2700000,
-                       .max_uV = 3300000,
-               },
-       },
-       [vcc_io] = { /* Same or higher than everything
-                         * bar vccbat and vccusb */
-               .constraints = { /* default 2.8V */
-                       .name = "vcc_io",
-                       .min_uV = 2692000,
-                       .max_uV = 3300000,
-               },
-       },
-       [vcc_sensor_1_8] = {
-               .constraints = { /* default 1.8V */
-                       .name = "vcc_sensor_1_8",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-               },
-       },
-       [vcc_sensor_3] = { /* curiously default 2.8V */
-               .constraints = {
-                       .name = "vcc_sensor_3",
-                       .min_uV = 2800000,
-                       .max_uV = 3000000,
-               },
-               .num_consumer_supplies = ARRAY_SIZE(imote2_sensor_3_con),
-               .consumer_supplies = imote2_sensor_3_con,
-       },
-       [vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
-               .constraints = {
-                       .name = "vcc_pxa_pll",
-                       .min_uV = 1170000,
-                       .max_uV = 1430000,
-               },
-       },
-       [vcc_pxa_usim] = {
-               .constraints = { /* default 1.8V */
-                       .name = "vcc_pxa_usim",
-                       .min_uV = 1710000,
-                       .max_uV = 2160000,
-               },
-       },
-       [vcc_pxa_mem] = {
-               .constraints = { /* default 1.8V */
-                       .name = "vcc_pxa_mem",
-                       .min_uV = 1800000,
-                       .max_uV = 1800000,
-               },
-       },
-};
-
-static struct da903x_subdev_info imote2_da9030_subdevs[] = {
-       {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO2,
-               .platform_data = &imote2_ldo_init_data[vcc_bbio],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO3,
-               .platform_data = &imote2_ldo_init_data[vcc_bb],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO4,
-               .platform_data = &imote2_ldo_init_data[vcc_pxa_flash],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO5,
-               .platform_data = &imote2_ldo_init_data[vcc_cc2420],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO6,
-               .platform_data = &imote2_ldo_init_data[vcc_vref],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO7,
-               .platform_data = &imote2_ldo_init_data[vcc_sram_ext],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO8,
-               .platform_data = &imote2_ldo_init_data[vcc_mica],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO9,
-               .platform_data = &imote2_ldo_init_data[vcc_bt],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO10,
-               .platform_data = &imote2_ldo_init_data[vcc_sensor_1_8],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO11,
-               .platform_data = &imote2_ldo_init_data[vcc_sensor_3],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO12,
-               .platform_data = &imote2_ldo_init_data[vcc_lcd],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO15,
-               .platform_data = &imote2_ldo_init_data[vcc_pxa_pll],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO17,
-               .platform_data = &imote2_ldo_init_data[vcc_pxa_usim],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO18,
-               .platform_data = &imote2_ldo_init_data[vcc_io],
-       }, {
-               .name = "da903x-regulator",
-               .id = DA9030_ID_LDO19,
-               .platform_data = &imote2_ldo_init_data[vcc_pxa_mem],
-       },
-};
-
-static struct da903x_platform_data imote2_da9030_pdata = {
-       .num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
-       .subdevs = imote2_da9030_subdevs,
-};
-
-/* As the the imote2 doesn't currently have a conventional SD slot
- * there is no option to hotplug cards, making all this rather simple
- */
-static int imote2_mci_get_ro(struct device *dev)
-{
-       return 0;
-}
-
-/* Rather simple case as hotplugging not possible */
-static struct pxamci_platform_data imote2_mci_platform_data = {
-       .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
-       .get_ro = imote2_mci_get_ro,
-       .gpio_card_detect = -1,
-       .gpio_card_ro   = -1,
-       .gpio_power = -1,
-};
-
-static struct mtd_partition imote2flash_partitions[] = {
-       {
-               .name = "Bootloader",
-               .size = 0x00040000,
-               .offset = 0,
-               .mask_flags = MTD_WRITEABLE,
-       }, {
-               .name = "Kernel",
-               .size = 0x00200000,
-               .offset = 0x00040000,
-               .mask_flags = 0,
-       }, {
-               .name = "Filesystem",
-               .size = 0x01DC0000,
-               .offset = 0x00240000,
-               .mask_flags = 0,
-       },
-};
-
-static struct resource flash_resources = {
-       .start = PXA_CS0_PHYS,
-       .end = PXA_CS0_PHYS + SZ_32M - 1,
-       .flags = IORESOURCE_MEM,
-};
-
-static struct flash_platform_data imote2_flash_data = {
-       .map_name = "cfi_probe",
-       .parts = imote2flash_partitions,
-       .nr_parts = ARRAY_SIZE(imote2flash_partitions),
-       .name = "PXA27xOnChipROM",
-       .width = 2,
-};
-
-static struct platform_device imote2_flash_device = {
-       .name = "pxa2xx-flash",
-       .id = 0,
-       .dev = {
-               .platform_data = &imote2_flash_data,
-       },
-       .resource = &flash_resources,
-       .num_resources = 1,
-};
-
-/* Some of the drivers here are out of kernel at the moment (parts of IIO)
- * and it may be a while before they are in the mainline.
- */
-static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
-       { /* UCAM sensor board */
-               .type = "max1239",
-               .addr = 0x35,
-       }, { /* ITS400 Sensor board only */
-               .type = "max1363",
-               .addr = 0x34,
-               /* Through a nand gate - Also beware, on V2 sensor board the
-                * pull up resistors are missing.
-                */
-               .irq = IRQ_GPIO(99),
-       }, { /* ITS400 Sensor board only */
-               .type = "tsl2561",
-               .addr = 0x49,
-               /* Through a nand gate - Also beware, on V2 sensor board the
-                * pull up resistors are missing.
-                */
-               .irq = IRQ_GPIO(99),
-       }, { /* ITS400 Sensor board only */
-               .type = "tmp175",
-               .addr = 0x4A,
-               .irq = IRQ_GPIO(96),
-       }, { /* IMB400 Multimedia board */
-               .type = "wm8940",
-               .addr = 0x1A,
-       },
-};
-
-static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
-       {
-               .type = "da9030",
-               .addr = 0x49,
-               .platform_data = &imote2_da9030_pdata,
-               .irq = gpio_to_irq(1),
-       },
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
-       .num_chipselect = 1,
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
-       .num_chipselect = 1,
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
-       .num_chipselect = 1,
-};
-
-static struct pxa2xx_spi_chip staccel_chip_info = {
-       .tx_threshold = 8,
-       .rx_threshold = 8,
-       .dma_burst_size = 8,
-       .timeout = 235,
-       .gpio_cs = 24,
-};
-
-static struct pxa2xx_spi_chip cc2420_info = {
-       .tx_threshold = 8,
-       .rx_threshold = 8,
-       .dma_burst_size = 8,
-       .timeout = 235,
-       .gpio_cs = 39,
-};
-
-static struct spi_board_info spi_board_info[] __initdata = {
-       { /* Driver in IIO */
-               .modalias = "lis3l02dq",
-               .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
-               .bus_num = 1,
-               .chip_select = 0,
-               .controller_data = &staccel_chip_info,
-               .irq = IRQ_GPIO(96),
-       }, { /* Driver out of kernel as it needs considerable rewriting */
-               .modalias = "cc2420",
-               .max_speed_hz = 6500000,
-               .bus_num = 3,
-               .chip_select = 0,
-               .controller_data = &cc2420_info,
-       },
-};
-
-static void im2_udc_command(int cmd)
-{
-       switch (cmd) {
-       case PXA2XX_UDC_CMD_CONNECT:
-               UP2OCR |=  UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE;
-               break;
-       case PXA2XX_UDC_CMD_DISCONNECT:
-               UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE);
-               break;
-       }
-}
-
-static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
-       .udc_command            = im2_udc_command,
-};
-
-static struct platform_device *imote2_devices[] = {
-       &imote2_flash_device,
-       &imote2_leds,
-       &sht15,
-};
-
-static struct i2c_pxa_platform_data i2c_pwr_pdata = {
-       .fast_mode = 1,
-};
-
-static struct i2c_pxa_platform_data i2c_pdata = {
-       .fast_mode = 1,
-};
-
-static void __init imote2_init(void)
-{
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
-
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
-
-       platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
-
-       pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
-       pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
-       pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
-
-       spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
-
-       i2c_register_board_info(0, imote2_i2c_board_info,
-                               ARRAY_SIZE(imote2_i2c_board_info));
-       i2c_register_board_info(1, imote2_pwr_i2c_board_info,
-                               ARRAY_SIZE(imote2_pwr_i2c_board_info));
-
-       pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
-       pxa_set_i2c_info(&i2c_pdata);
-
-       pxa_set_mci_info(&imote2_mci_platform_data);
-       pxa_set_udc_info(&imote2_udc_info);
-}
-
-MACHINE_START(INTELMOTE2, "IMOTE 2")
-       .phys_io        = 0x40000000,
-       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .map_io         = pxa_map_io,
-       .init_irq       = pxa27x_init_irq,
-       .timer          = &pxa_timer,
-       .init_machine   = imote2_init,
-       .boot_params    = 0xA0000100,
-MACHINE_END
index 1a741065045f1505083bcca06be3737b5c53a7b4..eec92e6fd7cf804f3ba611325cdbc491da3dcf96 100644 (file)
@@ -26,21 +26,55 @@ enum balloon3_features {
 #define BALLOON3_FPGA_VIRT     (0xf1000000)    /* as per balloon2 */
 #define BALLOON3_FPGA_LENGTH   0x01000000
 
-/* FPGA/CPLD registers */
-#define BALLOON3_PCMCIA0_REG           (BALLOON3_FPGA_VIRT + 0x00e00008)
-/* fixme - same for now */
-#define BALLOON3_PCMCIA1_REG           (BALLOON3_FPGA_VIRT + 0x00e00008)
-#define BALLOON3_NANDIO_IO_REG         (BALLOON3_FPGA_VIRT + 0x00e00000)
+/* FPGA / CPLD registers for CF socket */
+#define        BALLOON3_CF_STATUS_REG          (BALLOON3_FPGA_VIRT + 0x00e00008)
+#define        BALLOON3_CF_CONTROL_REG         (BALLOON3_FPGA_VIRT + 0x00e00008)
+/* FPGA / CPLD version register */
+#define        BALLOON3_FPGA_VER               (BALLOON3_FPGA_VIRT + 0x00e0001c)
+/* FPGA / CPLD registers for NAND flash */
+#define        BALLOON3_NAND_BASE              (PXA_CS4_PHYS + 0x00e00000)
+#define        BALLOON3_NAND_IO_REG            (BALLOON3_FPGA_VIRT + 0x00e00000)
+#define        BALLOON3_NAND_CONTROL2_REG      (BALLOON3_FPGA_VIRT + 0x00e00010)
+#define        BALLOON3_NAND_STAT_REG          (BALLOON3_FPGA_VIRT + 0x00e00010)
+#define        BALLOON3_NAND_CONTROL_REG       (BALLOON3_FPGA_VIRT + 0x00e00014)
+
 /* fpga/cpld interrupt control register */
 #define BALLOON3_INT_CONTROL_REG       (BALLOON3_FPGA_VIRT + 0x00e0000C)
-#define BALLOON3_NANDIO_CTL2_REG       (BALLOON3_FPGA_VIRT + 0x00e00010)
-#define BALLOON3_NANDIO_CTL_REG        (BALLOON3_FPGA_VIRT + 0x00e00014)
 #define BALLOON3_VERSION_REG           (BALLOON3_FPGA_VIRT + 0x00e0001c)
 
 #define BALLOON3_SAMOSA_ADDR_REG       (BALLOON3_FPGA_VIRT + 0x00c00000)
 #define BALLOON3_SAMOSA_DATA_REG       (BALLOON3_FPGA_VIRT + 0x00c00004)
 #define BALLOON3_SAMOSA_STATUS_REG     (BALLOON3_FPGA_VIRT + 0x00c0001c)
 
+/* CF Status Register bits (read-only) bits */
+#define BALLOON3_CF_nIRQ               (1 << 0)
+#define BALLOON3_CF_nSTSCHG_BVD1       (1 << 1)
+
+/* CF Control Set Register bits / CF Control Clear Register bits (write-only) */
+#define BALLOON3_CF_RESET              (1 << 0)
+#define BALLOON3_CF_ENABLE             (1 << 1)
+#define BALLOON3_CF_ADD_ENABLE         (1 << 2)
+
+/* CF Interrupt sources */
+#define BALLOON3_BP_CF_NRDY_IRQ                BALLOON3_IRQ(0)
+#define BALLOON3_BP_NSTSCHG_IRQ                BALLOON3_IRQ(1)
+
+/* NAND Control register */
+#define        BALLOON3_NAND_CONTROL_FLWP      (1 << 7)
+#define        BALLOON3_NAND_CONTROL_FLSE      (1 << 6)
+#define        BALLOON3_NAND_CONTROL_FLCE3     (1 << 5)
+#define        BALLOON3_NAND_CONTROL_FLCE2     (1 << 4)
+#define        BALLOON3_NAND_CONTROL_FLCE1     (1 << 3)
+#define        BALLOON3_NAND_CONTROL_FLCE0     (1 << 2)
+#define        BALLOON3_NAND_CONTROL_FLALE     (1 << 1)
+#define        BALLOON3_NAND_CONTROL_FLCLE     (1 << 0)
+
+/* NAND Status register */
+#define        BALLOON3_NAND_STAT_RNB          (1 << 0)
+
+/* NAND Control2 register */
+#define        BALLOON3_NAND_CONTROL2_16BIT    (1 << 0)
+
 /* GPIOs for irqs */
 #define BALLOON3_GPIO_AUX_NIRQ         (94)
 #define BALLOON3_GPIO_CODEC_IRQ                (95)
@@ -54,20 +88,24 @@ enum balloon3_features {
 
 #define BALLOON3_GPIO_S0_CD            (105)
 
+/* NAND */
+#define BALLOON3_GPIO_RUN_NAND         (102)
+
+/* PCF8574A Leds */
+#define        BALLOON3_PCF_GPIO_BASE          160
+#define        BALLOON3_PCF_GPIO_LED0          (BALLOON3_PCF_GPIO_BASE + 0)
+#define        BALLOON3_PCF_GPIO_LED1          (BALLOON3_PCF_GPIO_BASE + 1)
+#define        BALLOON3_PCF_GPIO_LED2          (BALLOON3_PCF_GPIO_BASE + 2)
+#define        BALLOON3_PCF_GPIO_LED3          (BALLOON3_PCF_GPIO_BASE + 3)
+#define        BALLOON3_PCF_GPIO_LED4          (BALLOON3_PCF_GPIO_BASE + 4)
+#define        BALLOON3_PCF_GPIO_LED5          (BALLOON3_PCF_GPIO_BASE + 5)
+#define        BALLOON3_PCF_GPIO_LED6          (BALLOON3_PCF_GPIO_BASE + 6)
+#define        BALLOON3_PCF_GPIO_LED7          (BALLOON3_PCF_GPIO_BASE + 7)
+
 /* FPGA Interrupt Mask/Acknowledge Register */
 #define BALLOON3_INT_S0_IRQ            (1 << 0)  /* PCMCIA 0 IRQ */
 #define BALLOON3_INT_S0_STSCHG         (1 << 1)  /* PCMCIA 0 status changed */
 
-/* CF Status Register */
-#define BALLOON3_PCMCIA_nIRQ           (1 << 0)  /* IRQ / ready signal */
-#define BALLOON3_PCMCIA_nSTSCHG_BVD1   (1 << 1)
-                                       /* VDD sense / card status changed */
-
-/* CF control register (write) */
-#define BALLOON3_PCMCIA_RESET          (1 << 0)   /* Card reset signal */
-#define BALLOON3_PCMCIA_ENABLE         (1 << 1)
-#define BALLOON3_PCMCIA_ADD_ENABLE     (1 << 2)
-
 /* CPLD (and FPGA) interface definitions */
 #define CPLD_LCD0_DATA_SET             0x00
 #define CPLD_LCD0_DATA_CLR             0x10
@@ -132,9 +170,6 @@ enum balloon3_features {
 /* Balloon3 Interrupts */
 #define BALLOON3_IRQ(x)                (IRQ_BOARD_START + (x))
 
-#define BALLOON3_BP_CF_NRDY_IRQ        BALLOON3_IRQ(0)
-#define BALLOON3_BP_NSTSCHG_IRQ        BALLOON3_IRQ(1)
-
 #define BALLOON3_AUX_NIRQ      IRQ_GPIO(BALLOON3_GPIO_AUX_NIRQ)
 #define BALLOON3_CODEC_IRQ     IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ)
 #define BALLOON3_S0_CD_IRQ     IRQ_GPIO(BALLOON3_GPIO_S0_CD)
index 5f2ba8d9015cfce31a02f901e7f41742dd1e1fa9..58dada11054f2deec0102baec6584bd68975b3d4 100644 (file)
@@ -4,6 +4,27 @@
 #include <net/ax88796.h>
 #include <mach/mfp.h>
 
+/*
+ * base board glue for PXA270 module
+ */
+
+enum {
+       COLIBRI_PXA270_EVALBOARD = 0,
+       COLIBRI_PXA270_INCOME,
+};
+
+#if defined(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD)
+extern void colibri_pxa270_evalboard_init(void);
+#else
+static inline void colibri_pxa270_evalboard_init(void) {}
+#endif
+
+#if defined(CONFIG_MACH_COLIBRI_PXA270_INCOME)
+extern void colibri_pxa270_income_boardinit(void);
+#else
+static inline void colibri_pxa270_income_boardinit(void) {}
+#endif
+
 /*
  * common settings for all modules
  */
@@ -33,13 +54,10 @@ static inline void colibri_pxa3xx_init_nand(void) {}
 /* physical memory regions */
 #define COLIBRI_SDRAM_BASE     0xa0000000      /* SDRAM region */
 
-/* definitions for Colibri PXA270 */
-
-#define COLIBRI_PXA270_FLASH_PHYS      (PXA_CS0_PHYS)  /* Flash region */
-#define COLIBRI_PXA270_ETH_PHYS                (PXA_CS2_PHYS)  /* Ethernet */
-#define COLIBRI_PXA270_ETH_IRQ_GPIO    114
-#define COLIBRI_PXA270_ETH_IRQ         \
-       gpio_to_irq(mfp_to_gpio(COLIBRI_PXA270_ETH_IRQ_GPIO))
+/* GPIO definitions for Colibri PXA270 */
+#define GPIO114_COLIBRI_PXA270_ETH_IRQ 114
+#define GPIO0_COLIBRI_PXA270_SD_DETECT 0
+#define GPIO113_COLIBRI_PXA270_TS_IRQ  113
 
 #endif /* _COLIBRI_H_ */
 
index 585970ef08cec208b3f70779f87cb85001ea5859..0011055bc3f9bb7cd387b06eb16fd399eabee59e 100644 (file)
 #define CORGI_GPIO_BACKLIGHT_CONT      (CORGI_SCOOP_GPIO_BASE + 7)
 #define CORGI_GPIO_MIC_BIAS            (CORGI_SCOOP_GPIO_BASE + 8)
 
-/*
- * Shared data structures
- */
-extern struct platform_device corgiscoop_device;
-
 #endif /* __ASM_ARCH_CORGI_H  */
 
index 06abd416060765497cf9ee047bc9f2293a88de53..9b898680b206a7d59ec5aacadf8dafa8dadc677a 100644 (file)
 
 /*
 GPIOn - Input from MAX823 (or equiv), normalizing USB +5V into a clean
-interrupt signal for determining cable presence. On the original gumstix,
-this is GPIO81, and GPIO83 needs to be defined as well. On the gumstix F,
+interrupt signal for determining cable presence. On the gumstix F,
 this moves to GPIO17 and GPIO37. */
 
 /* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
 has detected a cable insertion; driven low otherwise. */
 
-#ifdef CONFIG_ARCH_GUMSTIX_ORIG
-
-#define GPIO_GUMSTIX_USB_GPIOn         81
-#define GPIO_GUMSTIX_USB_GPIOx         83
-
-#else
-
 #define GPIO_GUMSTIX_USB_GPIOn         35
 #define GPIO_GUMSTIX_USB_GPIOx         41
 
-#endif
-
 /* usb state change */
 #define GUMSTIX_USB_INTR_IRQ           IRQ_GPIO(GPIO_GUMSTIX_USB_GPIOn)
 
diff --git a/arch/arm/mach-pxa/include/mach/palm27x.h b/arch/arm/mach-pxa/include/mach/palm27x.h
new file mode 100644 (file)
index 0000000..0a5e5ea
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Common functions for Palm LD, T5, TX, Z72
+ *
+ * Copyright (C) 2010
+ * Marek Vasut <marek.vasut@gmail.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.
+ *
+ */
+#ifndef        __INCLUDE_MACH_PALM27X__
+#define        __INCLUDE_MACH_PALM27X__
+
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+extern void __init palm27x_mmc_init(int detect, int ro, int power,
+                                       int power_inverted);
+#else
+static inline void palm27x_mmc_init(int detect, int ro, int power,
+                                       int power_inverted)
+{}
+#endif
+
+#if defined(CONFIG_SUSPEND)
+extern void __init palm27x_pm_init(unsigned long str_base);
+#else
+static inline void palm27x_pm_init(unsigned long str_base) {}
+#endif
+
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+extern struct pxafb_mode_info palm_320x480_lcd_mode;
+extern struct pxafb_mode_info palm_320x320_lcd_mode;
+extern struct pxafb_mode_info palm_320x320_new_lcd_mode;
+extern void __init palm27x_lcd_init(int power,
+                                       struct pxafb_mode_info *mode);
+#else
+static inline void palm27x_lcd_init(int power, struct pxafb_mode_info *mode) {}
+#endif
+
+#if    defined(CONFIG_USB_GADGET_PXA27X) || \
+       defined(CONFIG_USB_GADGET_PXA27X_MODULE)
+extern void __init palm27x_udc_init(int vbus, int pullup,
+                                       int vbus_inverted);
+#else
+static inline void palm27x_udc_init(int vbus, int pullup, int vbus_inverted) {}
+#endif
+
+#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
+extern void __init palm27x_irda_init(int pwdn);
+#else
+static inline void palm27x_irda_init(int pwdn) {}
+#endif
+
+#if    defined(CONFIG_TOUCHSCREEN_WM97XX) || \
+       defined(CONFIG_TOUCHSCREEN_WM97XX_MODULE)
+extern void __init palm27x_ac97_init(int minv, int maxv, int jack,
+                                       int reset);
+#else
+static inline void palm27x_ac97_init(int minv, int maxv, int jack, int reset) {}
+#endif
+
+#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
+extern void __init palm27x_pwm_init(int bl, int lcd);
+#else
+static inline void palm27x_pwm_init(int bl, int lcd) {}
+#endif
+
+#if defined(CONFIG_PDA_POWER) || defined(CONFIG_PDA_POWER_MODULE)
+extern void __init palm27x_power_init(int ac, int usb);
+#else
+static inline void palm27x_power_init(int ac, int usb) {}
+#endif
+
+#if defined(CONFIG_REGULATOR_MAX1586) || \
+    defined(CONFIG_REGULATOR_MAX1586_MODULE)
+extern void __init palm27x_pmic_init(void);
+#else
+static inline void palm27x_pmic_init(void) {}
+#endif
+
+#endif /* __INCLUDE_MACH_PALM27X__ */
diff --git a/arch/arm/mach-pxa/include/mach/pata_pxa.h b/arch/arm/mach-pxa/include/mach/pata_pxa.h
new file mode 100644 (file)
index 0000000..6cf7df1
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Generic PXA PATA driver
+ *
+ * Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef        __MACH_PATA_PXA_H__
+#define        __MACH_PATA_PXA_H__
+
+struct pata_pxa_pdata {
+       /* PXA DMA DREQ<0:2> pin */
+       uint32_t        dma_dreq;
+       /* Register shift */
+       uint32_t        reg_shift;
+       /* IRQ flags */
+       uint32_t        irq_flags;
+};
+
+#endif /* __MACH_PATA_PXA_H__ */
diff --git a/arch/arm/mach-pxa/include/mach/sharpsl.h b/arch/arm/mach-pxa/include/mach/sharpsl.h
deleted file mode 100644 (file)
index 8242e14..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * SharpSL SSP Driver
- */
-
-unsigned long corgi_ssp_ads7846_putget(unsigned long);
-unsigned long corgi_ssp_ads7846_get(void);
-void corgi_ssp_ads7846_put(unsigned long data);
-void corgi_ssp_ads7846_lock(void);
-void corgi_ssp_ads7846_unlock(void);
-void corgi_ssp_lcdtg_send (unsigned char adrs, unsigned char data);
-void corgi_ssp_blduty_set(int duty);
-int corgi_ssp_max1111_get(unsigned long data);
-
-/*
- * SharpSL Touchscreen Driver
- */
-
-struct corgits_machinfo {
-       unsigned long (*get_hsync_invperiod)(void);
-       void (*put_hsync)(void);
-       void (*wait_hsync)(void);
-};
-
-
-/*
- * SharpSL Backlight
- */
-extern void corgibl_limit_intensity(int limit);
-extern void corgi_lcd_limit_intensity(int limit);
-
-
-/*
- * SharpSL Battery/PM Driver
- */
-extern void sharpsl_battery_kick(void);
index 1920dc6b05dcf0f07dfcab2059f46b09679a9e52..905be6755f040fb390e630bc4f5a4b4caeba2dbc 100644 (file)
@@ -93,6 +93,8 @@ struct sharpsl_pm_status {
 
 extern struct sharpsl_pm_status sharpsl_pm;
 
+extern struct battery_thresh sharpsl_battery_levels_acin[];
+extern struct battery_thresh sharpsl_battery_levels_noac[];
 
 #define SHARPSL_LED_ERROR  2
 #define SHARPSL_LED_ON     1
@@ -101,4 +103,11 @@ extern struct sharpsl_pm_status sharpsl_pm;
 void sharpsl_battery_kick(void);
 void sharpsl_pm_led(int val);
 
+/* MAX1111 Channel Definitions */
+#define MAX1111_BATT_VOLT   4u
+#define MAX1111_BATT_TEMP   2u
+#define MAX1111_ACIN_VOLT   6u
+int sharpsl_pm_pxa_read_max1111(int channel);
+
+void corgi_lcd_limit_intensity(int limit);
 #endif
index fa1998caa78eff3a8b764e42ff79ed495168595f..685749a51c4284159324bee89c7a5e96e7404da2 100644 (file)
 /*
  * Shared data structures
  */
-extern struct platform_device spitzscoop_device;
-extern struct platform_device spitzscoop2_device;
 extern struct platform_device spitzssp_device;
 extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
index fa6a708b40997feb7ae0296c04d91d1afa8930c9..dc66942ef9ab47d6b911bfde28b70c1c43fb5feb 100644 (file)
@@ -34,7 +34,7 @@
 #include <linux/irq.h>
 #include <linux/pda_power.h>
 #include <linux/power_supply.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/mtd/physmap.h>
 #include <linux/usb/gpio_vbus.h>
 #include <linux/regulator/max1586.h>
@@ -636,7 +636,7 @@ static struct platform_device power_dev = {
        },
 };
 
-static struct wm97xx_batt_info mioa701_battery_data = {
+static struct wm97xx_batt_pdata mioa701_battery_data = {
        .batt_aux       = WM97XX_AUX_ID1,
        .temp_aux       = -1,
        .charge_gpio    = -1,
@@ -648,6 +648,10 @@ static struct wm97xx_batt_info mioa701_battery_data = {
        .batt_name      = "mioa701_battery",
 };
 
+static struct wm97xx_pdata mioa701_wm97xx_pdata = {
+       .batt_pdata     = &mioa701_battery_data,
+};
+
 /*
  * Voltage regulation
  */
@@ -716,6 +720,7 @@ struct i2c_pxa_platform_data i2c_pdata = {
 
 static pxa2xx_audio_ops_t mioa701_ac97_info = {
        .reset_gpio = 95,
+       .codec_pdata = { &mioa701_wm97xx_pdata, },
 };
 
 /*
@@ -794,7 +799,6 @@ static void __init mioa701_machine_init(void)
        set_pxa_fb_info(&mioa701_pxafb_info);
        pxa_set_mci_info(&mioa701_mci_info);
        pxa_set_keypad_info(&mioa701_keypad_info);
-       wm97xx_bat_set_pdata(&mioa701_battery_data);
        pxa_set_udc_info(&mioa701_udc_info);
        pxa_set_ac97_info(&mioa701_ac97_info);
        pm_power_off = mioa701_poweroff;
diff --git a/arch/arm/mach-pxa/palm27x.c b/arch/arm/mach-pxa/palm27x.c
new file mode 100644 (file)
index 0000000..77ad6d3
--- /dev/null
@@ -0,0 +1,477 @@
+/*
+ * Common code for Palm LD, T5, TX, Z72
+ *
+ * Copyright (C) 2010
+ * Marek Vasut <marek.vasut@gmail.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/platform_device.h>
+#include <linux/delay.h>
+#include <linux/irq.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/pda_power.h>
+#include <linux/pwm_backlight.h>
+#include <linux/gpio.h>
+#include <linux/wm97xx.h>
+#include <linux/power_supply.h>
+#include <linux/usb/gpio_vbus.h>
+#include <linux/regulator/max1586.h>
+
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+
+#include <mach/pxa27x.h>
+#include <mach/audio.h>
+#include <mach/mmc.h>
+#include <mach/pxafb.h>
+#include <mach/irda.h>
+#include <mach/udc.h>
+#include <mach/palmasoc.h>
+#include <mach/palm27x.h>
+
+#include <plat/i2c.h>
+
+#include "generic.h"
+#include "devices.h"
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
+static struct pxamci_platform_data palm27x_mci_platform_data = {
+       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .detect_delay_ms        = 200,
+};
+
+void __init palm27x_mmc_init(int detect, int ro, int power,
+                                       int power_inverted)
+{
+       palm27x_mci_platform_data.gpio_card_detect      = detect;
+       palm27x_mci_platform_data.gpio_card_ro          = ro;
+       palm27x_mci_platform_data.gpio_power            = power;
+       palm27x_mci_platform_data.gpio_power_invert     = power_inverted;
+
+       pxa_set_mci_info(&palm27x_mci_platform_data);
+}
+#endif
+
+/******************************************************************************
+ * Power management - standby
+ ******************************************************************************/
+#if defined(CONFIG_SUSPEND)
+void __init palm27x_pm_init(unsigned long str_base)
+{
+       static const unsigned long resume[] = {
+               0xe3a00101,     /* mov  r0,     #0x40000000 */
+               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
+               0xe590f008,     /* ldr  pc, [r0, #0x08] */
+       };
+
+       /*
+        * Copy the bootloader.
+        * NOTE: PalmZ72 uses a different wakeup method!
+        */
+       memcpy(phys_to_virt(str_base), resume, sizeof(resume));
+}
+#endif
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
+struct pxafb_mode_info palm_320x480_lcd_mode = {
+       .pixclock       = 57692,
+       .xres           = 320,
+       .yres           = 480,
+       .bpp            = 16,
+
+       .left_margin    = 32,
+       .right_margin   = 1,
+       .upper_margin   = 7,
+       .lower_margin   = 1,
+
+       .hsync_len      = 4,
+       .vsync_len      = 1,
+};
+
+struct pxafb_mode_info palm_320x320_lcd_mode = {
+       .pixclock       = 115384,
+       .xres           = 320,
+       .yres           = 320,
+       .bpp            = 16,
+
+       .left_margin    = 27,
+       .right_margin   = 7,
+       .upper_margin   = 7,
+       .lower_margin   = 8,
+
+       .hsync_len      = 6,
+       .vsync_len      = 1,
+};
+
+struct pxafb_mode_info palm_320x320_new_lcd_mode = {
+       .pixclock       = 86538,
+       .xres           = 320,
+       .yres           = 320,
+       .bpp            = 16,
+
+       .left_margin    = 20,
+       .right_margin   = 8,
+       .upper_margin   = 8,
+       .lower_margin   = 5,
+
+       .hsync_len      = 4,
+       .vsync_len      = 1,
+};
+
+static struct pxafb_mach_info palm27x_lcd_screen = {
+       .num_modes      = 1,
+       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
+};
+
+static int palm27x_lcd_power;
+static void palm27x_lcd_ctl(int on, struct fb_var_screeninfo *info)
+{
+       gpio_set_value(palm27x_lcd_power, on);
+}
+
+void __init palm27x_lcd_init(int power, struct pxafb_mode_info *mode)
+{
+       palm27x_lcd_screen.modes = mode;
+
+       if (gpio_is_valid(power)) {
+               if (!gpio_request(power, "LCD power")) {
+                       pr_err("Palm27x: failed to claim lcd power gpio!\n");
+                       return;
+               }
+               if (!gpio_direction_output(power, 1)) {
+                       pr_err("Palm27x: lcd power configuration failed!\n");
+                       return;
+               }
+               palm27x_lcd_power = power;
+               palm27x_lcd_screen.pxafb_lcd_power = palm27x_lcd_ctl;
+       }
+
+       set_pxa_fb_info(&palm27x_lcd_screen);
+}
+#endif
+
+/******************************************************************************
+ * USB Gadget
+ ******************************************************************************/
+#if    defined(CONFIG_USB_GADGET_PXA27X) || \
+       defined(CONFIG_USB_GADGET_PXA27X_MODULE)
+static struct gpio_vbus_mach_info palm27x_udc_info = {
+       .gpio_vbus_inverted     = 1,
+};
+
+static struct platform_device palm27x_gpio_vbus = {
+       .name   = "gpio-vbus",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &palm27x_udc_info,
+       },
+};
+
+void __init palm27x_udc_init(int vbus, int pullup, int vbus_inverted)
+{
+       palm27x_udc_info.gpio_vbus      = vbus;
+       palm27x_udc_info.gpio_pullup    = pullup;
+
+       palm27x_udc_info.gpio_vbus_inverted = vbus_inverted;
+
+       if (!gpio_request(pullup, "USB Pullup")) {
+               gpio_direction_output(pullup,
+                       palm27x_udc_info.gpio_vbus_inverted);
+               gpio_free(pullup);
+       } else
+               return;
+
+       platform_device_register(&palm27x_gpio_vbus);
+}
+#endif
+
+/******************************************************************************
+ * IrDA
+ ******************************************************************************/
+#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
+static struct pxaficp_platform_data palm27x_ficp_platform_data = {
+       .transceiver_cap        = IR_SIRMODE | IR_OFF,
+};
+
+void __init palm27x_irda_init(int pwdn)
+{
+       palm27x_ficp_platform_data.gpio_pwdown = pwdn;
+       pxa_set_ficp_info(&palm27x_ficp_platform_data);
+}
+#endif
+
+/******************************************************************************
+ * WM97xx audio, battery
+ ******************************************************************************/
+#if    defined(CONFIG_TOUCHSCREEN_WM97XX) || \
+       defined(CONFIG_TOUCHSCREEN_WM97XX_MODULE)
+static struct wm97xx_batt_pdata palm27x_batt_pdata = {
+       .batt_aux       = WM97XX_AUX_ID3,
+       .temp_aux       = WM97XX_AUX_ID2,
+       .charge_gpio    = -1,
+       .batt_mult      = 1000,
+       .batt_div       = 414,
+       .temp_mult      = 1,
+       .temp_div       = 1,
+       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
+       .batt_name      = "main-batt",
+};
+
+static struct wm97xx_pdata palm27x_wm97xx_pdata = {
+       .batt_pdata     = &palm27x_batt_pdata,
+};
+
+static pxa2xx_audio_ops_t palm27x_ac97_pdata = {
+       .codec_pdata    = { &palm27x_wm97xx_pdata, },
+};
+
+static struct palm27x_asoc_info palm27x_asoc_pdata = {
+       .jack_gpio      = -1,
+};
+
+static struct platform_device palm27x_asoc = {
+       .name = "palm27x-asoc",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &palm27x_asoc_pdata,
+       },
+};
+
+void __init palm27x_ac97_init(int minv, int maxv, int jack, int reset)
+{
+       palm27x_ac97_pdata.reset_gpio   = reset;
+       palm27x_asoc_pdata.jack_gpio    = jack;
+
+       if (minv < 0 || maxv < 0) {
+               palm27x_ac97_pdata.codec_pdata[0] = NULL;
+               pxa_set_ac97_info(&palm27x_ac97_pdata);
+       } else {
+               palm27x_batt_pdata.min_voltage  = minv,
+               palm27x_batt_pdata.max_voltage  = maxv,
+
+               pxa_set_ac97_info(&palm27x_ac97_pdata);
+               platform_device_register(&palm27x_asoc);
+       }
+}
+#endif
+
+/******************************************************************************
+ * Backlight
+ ******************************************************************************/
+#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
+static int palm_bl_power;
+static int palm_lcd_power;
+
+static int palm27x_backlight_init(struct device *dev)
+{
+       int ret;
+
+       ret = gpio_request(palm_bl_power, "BL POWER");
+       if (ret)
+               goto err;
+       ret = gpio_direction_output(palm_bl_power, 0);
+       if (ret)
+               goto err2;
+
+       if (gpio_is_valid(palm_lcd_power)) {
+               ret = gpio_request(palm_lcd_power, "LCD POWER");
+               if (ret)
+                       goto err2;
+               ret = gpio_direction_output(palm_lcd_power, 0);
+               if (ret)
+                       goto err3;
+       }
+
+       return 0;
+err3:
+       gpio_free(palm_lcd_power);
+err2:
+       gpio_free(palm_bl_power);
+err:
+       return ret;
+}
+
+static int palm27x_backlight_notify(struct device *dev, int brightness)
+{
+       gpio_set_value(palm_bl_power, brightness);
+       if (gpio_is_valid(palm_lcd_power))
+               gpio_set_value(palm_lcd_power, brightness);
+       return brightness;
+}
+
+static void palm27x_backlight_exit(struct device *dev)
+{
+       gpio_free(palm_bl_power);
+       if (gpio_is_valid(palm_lcd_power))
+               gpio_free(palm_lcd_power);
+}
+
+static struct platform_pwm_backlight_data palm27x_backlight_data = {
+       .pwm_id         = 0,
+       .max_brightness = 0xfe,
+       .dft_brightness = 0x7e,
+       .pwm_period_ns  = 3500,
+       .init           = palm27x_backlight_init,
+       .notify         = palm27x_backlight_notify,
+       .exit           = palm27x_backlight_exit,
+};
+
+static struct platform_device palm27x_backlight = {
+       .name   = "pwm-backlight",
+       .dev    = {
+               .parent         = &pxa27x_device_pwm0.dev,
+               .platform_data  = &palm27x_backlight_data,
+       },
+};
+
+void __init palm27x_pwm_init(int bl, int lcd)
+{
+       palm_bl_power   = bl;
+       palm_lcd_power  = lcd;
+       platform_device_register(&palm27x_backlight);
+}
+#endif
+
+/******************************************************************************
+ * Power supply
+ ******************************************************************************/
+#if defined(CONFIG_PDA_POWER) || defined(CONFIG_PDA_POWER_MODULE)
+static int palm_ac_state;
+static int palm_usb_state;
+
+static int palm27x_power_supply_init(struct device *dev)
+{
+       int ret;
+
+       ret = gpio_request(palm_ac_state, "AC state");
+       if (ret)
+               goto err1;
+       ret = gpio_direction_input(palm_ac_state);
+       if (ret)
+               goto err2;
+
+       if (gpio_is_valid(palm_usb_state)) {
+               ret = gpio_request(palm_usb_state, "USB state");
+               if (ret)
+                       goto err2;
+               ret = gpio_direction_input(palm_usb_state);
+               if (ret)
+                       goto err3;
+       }
+
+       return 0;
+err3:
+       gpio_free(palm_usb_state);
+err2:
+       gpio_free(palm_ac_state);
+err1:
+       return ret;
+}
+
+static void palm27x_power_supply_exit(struct device *dev)
+{
+       gpio_free(palm_usb_state);
+       gpio_free(palm_ac_state);
+}
+
+static int palm27x_is_ac_online(void)
+{
+       return gpio_get_value(palm_ac_state);
+}
+
+static int palm27x_is_usb_online(void)
+{
+       return !gpio_get_value(palm_usb_state);
+}
+static char *palm27x_supplicants[] = {
+       "main-battery",
+};
+
+static struct pda_power_pdata palm27x_ps_info = {
+       .init                   = palm27x_power_supply_init,
+       .exit                   = palm27x_power_supply_exit,
+       .is_ac_online           = palm27x_is_ac_online,
+       .is_usb_online          = palm27x_is_usb_online,
+       .supplied_to            = palm27x_supplicants,
+       .num_supplicants        = ARRAY_SIZE(palm27x_supplicants),
+};
+
+static struct platform_device palm27x_power_supply = {
+       .name = "pda-power",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &palm27x_ps_info,
+       },
+};
+
+void __init palm27x_power_init(int ac, int usb)
+{
+       palm_ac_state   = ac;
+       palm_usb_state  = usb;
+       platform_device_register(&palm27x_power_supply);
+}
+#endif
+
+/******************************************************************************
+ * Core power regulator
+ ******************************************************************************/
+#if defined(CONFIG_REGULATOR_MAX1586) || \
+    defined(CONFIG_REGULATOR_MAX1586_MODULE)
+static struct regulator_consumer_supply palm27x_max1587a_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data palm27x_max1587a_v3_info = {
+       .constraints = {
+               .name           = "vcc_core range",
+               .min_uV         = 900000,
+               .max_uV         = 1705000,
+               .always_on      = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+       },
+       .consumer_supplies      = palm27x_max1587a_consumers,
+       .num_consumer_supplies  = ARRAY_SIZE(palm27x_max1587a_consumers),
+};
+
+static struct max1586_subdev_data palm27x_max1587a_subdevs[] = {
+       {
+               .name           = "vcc_core",
+               .id             = MAX1586_V3,
+               .platform_data  = &palm27x_max1587a_v3_info,
+       }
+};
+
+static struct max1586_platform_data palm27x_max1587a_info = {
+       .subdevs     = palm27x_max1587a_subdevs,
+       .num_subdevs = ARRAY_SIZE(palm27x_max1587a_subdevs),
+       .v3_gain     = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
+};
+
+static struct i2c_board_info __initdata palm27x_pi2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data  = &palm27x_max1587a_info,
+       },
+};
+
+void __init palm27x_pmic_init(void)
+{
+       i2c_register_board_info(1, ARRAY_AND_SIZE(palm27x_pi2c_board_info));
+       pxa27x_set_i2c_power_info(NULL);
+}
+#endif
index 1963819dba98ea11469700adc2dc23db82acd06b..91038eeafe44c10680741f1266ed770d61755274 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/sysdev.h>
 #include <linux/mtd/mtd.h>
@@ -41,6 +41,7 @@
 #include <mach/irda.h>
 #include <mach/pxa27x_keypad.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -127,6 +128,7 @@ static unsigned long palmld_pin_config[] __initdata = {
 /******************************************************************************
  * NOR Flash
  ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
 static struct mtd_partition palmld_partitions[] = {
        {
                .name           = "Flash",
@@ -160,20 +162,18 @@ static struct platform_device palmld_flash = {
        },
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-static struct pxamci_platform_data palmld_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMLD_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMLD_SD_READONLY,
-       .gpio_power             = GPIO_NR_PALMLD_SD_POWER,
-       .detect_delay_ms        = 200,
-};
+static void __init palmld_nor_init(void)
+{
+       platform_device_register(&palmld_flash);
+}
+#else
+static inline void palmld_nor_init(void) {}
+#endif
 
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmld_matrix_keys[] = {
        KEY(0, 1, KEY_F2),
        KEY(0, 2, KEY_UP),
@@ -200,9 +200,18 @@ static struct pxa27x_keypad_platform_data palmld_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
+static void __init palmld_kpc_init(void)
+{
+       pxa_set_keypad_info(&palmld_keypad_platform_data);
+}
+#else
+static inline void palmld_kpc_init(void) {}
+#endif
+
 /******************************************************************************
  * GPIO keys
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button palmld_pxa_buttons[] = {
        {KEY_F8, GPIO_NR_PALMLD_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
        {KEY_F9, GPIO_NR_PALMLD_LOCK_SWITCH, 0, "Lock Switch" },
@@ -222,77 +231,18 @@ static struct platform_device palmld_pxa_keys = {
        },
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmld_backlight_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMLD_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMLD_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMLD_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMLD_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMLD_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMLD_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmld_backlight_notify(struct device *dev, int brightness)
+static void __init palmld_keys_init(void)
 {
-       gpio_set_value(GPIO_NR_PALMLD_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMLD_LCD_POWER, brightness);
-       return brightness;
+       platform_device_register(&palmld_pxa_keys);
 }
-
-static void palmld_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMLD_BL_POWER);
-       gpio_free(GPIO_NR_PALMLD_LCD_POWER);
-}
-
-static struct platform_pwm_backlight_data palmld_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMLD_MAX_INTENSITY,
-       .dft_brightness = PALMLD_MAX_INTENSITY,
-       .pwm_period_ns  = PALMLD_PERIOD_NS,
-       .init           = palmld_backlight_init,
-       .notify         = palmld_backlight_notify,
-       .exit           = palmld_backlight_exit,
-};
-
-static struct platform_device palmld_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmld_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmld_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMLD_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
+#else
+static inline void palmld_keys_init(void) {}
+#endif
 
 /******************************************************************************
  * LEDs
  ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
 struct gpio_led gpio_leds[] = {
 {
        .name                   = "palmld:green:led",
@@ -318,174 +268,34 @@ static struct platform_device palmld_leds = {
        }
 };
 
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMLD_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMLD_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       ret = gpio_request(GPIO_NR_PALMLD_USB_DETECT_N, "CABLE_STATE_USB");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_input(GPIO_NR_PALMLD_USB_DETECT_N);
-       if (ret)
-               goto err3;
-
-       return 0;
-
-err3:
-       gpio_free(GPIO_NR_PALMLD_USB_DETECT_N);
-err2:
-       gpio_free(GPIO_NR_PALMLD_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmld_is_ac_online(void)
+static void __init palmld_leds_init(void)
 {
-       return gpio_get_value(GPIO_NR_PALMLD_POWER_DETECT);
+       platform_device_register(&palmld_leds);
 }
-
-static int palmld_is_usb_online(void)
-{
-       return !gpio_get_value(GPIO_NR_PALMLD_USB_DETECT_N);
-}
-
-static void power_supply_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMLD_USB_DETECT_N);
-       gpio_free(GPIO_NR_PALMLD_POWER_DETECT);
-}
-
-static char *palmld_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmld_is_ac_online,
-       .is_usb_online   = palmld_is_usb_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmld_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmld_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx battery
- ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMLD_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMLD_BAT_MIN_VOLTAGE,
-       .batt_mult      = 1000,
-       .batt_div       = 414,
-       .temp_mult      = 1,
-       .temp_div       = 1,
-       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
-       .batt_name      = "main-batt",
-};
-
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-static struct palm27x_asoc_info palmld_asoc_pdata = {
-       .jack_gpio      = GPIO_NR_PALMLD_EARPHONE_DETECT,
-};
-
-static pxa2xx_audio_ops_t palmld_ac97_pdata = {
-       .reset_gpio     = 95,
-};
-
-static struct platform_device palmld_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &palmld_asoc_pdata,
-       },
-};
+#else
+static inline void palmld_leds_init(void) {}
+#endif
 
 /******************************************************************************
  * HDD
  ******************************************************************************/
-static struct platform_device palmld_hdd = {
+#if defined(CONFIG_PATA_PALMLD) || defined(CONFIG_PATA_PALMLD_MODULE)
+static struct platform_device palmld_ide_device = {
        .name   = "pata_palmld",
        .id     = -1,
 };
 
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmld_lcd_modes[] = {
-{
-       .pixclock       = 57692,
-       .xres           = 320,
-       .yres           = 480,
-       .bpp            = 16,
-
-       .left_margin    = 32,
-       .right_margin   = 1,
-       .upper_margin   = 7,
-       .lower_margin   = 1,
-
-       .hsync_len      = 4,
-       .vsync_len      = 1,
-},
-};
-
-static struct pxafb_mach_info palmld_lcd_screen = {
-       .modes          = palmld_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmld_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
-
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init palmld_pm_init(void)
+static void __init palmld_ide_init(void)
 {
-       static u32 resume[] = {
-               0xe3a00101,     /* mov  r0,     #0x40000000 */
-               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
-               0xe590f008,     /* ldr  pc, [r0, #0x08] */
-       };
-
-       /* copy the bootloader */
-       memcpy(phys_to_virt(PALMLD_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmld_ide_device);
 }
+#else
+static inline void palmld_ide_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-       &palmld_pxa_keys,
-#endif
-       &palmld_backlight,
-       &palmld_leds,
-       &power_supply,
-       &palmld_asoc,
-       &palmld_hdd,
-       &palmld_flash,
-};
-
 static struct map_desc palmld_io_desc[] __initdata = {
 {
        .virtual        = PALMLD_IDE_VIRT,
@@ -510,20 +320,26 @@ static void __init palmld_map_io(void)
 static void __init palmld_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palmld_pm_init();
-       set_pxa_fb_info(&palmld_lcd_screen);
-       pxa_set_mci_info(&palmld_mci_platform_data);
-       pxa_set_ac97_info(&palmld_ac97_pdata);
-       pxa_set_ficp_info(&palmld_ficp_platform_data);
-       pxa_set_keypad_info(&palmld_keypad_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMLD_SD_DETECT_N, GPIO_NR_PALMLD_SD_READONLY,
+                       GPIO_NR_PALMLD_SD_POWER, 0);
+       palm27x_pm_init(PALMLD_STR_BASE);
+       palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
+       palm27x_irda_init(GPIO_NR_PALMLD_IR_DISABLE);
+       palm27x_ac97_init(PALMLD_BAT_MIN_VOLTAGE, PALMLD_BAT_MAX_VOLTAGE,
+                       GPIO_NR_PALMLD_EARPHONE_DETECT, 95);
+       palm27x_pwm_init(GPIO_NR_PALMLD_BL_POWER, GPIO_NR_PALMLD_LCD_POWER);
+       palm27x_power_init(GPIO_NR_PALMLD_POWER_DETECT,
+                       GPIO_NR_PALMLD_USB_DETECT_N);
+       palm27x_pmic_init();
+       palmld_kpc_init();
+       palmld_keys_init();
+       palmld_nor_init();
+       palmld_leds_init();
+       palmld_ide_init();
 }
 
 MACHINE_START(PALMLD, "Palm LifeDrive")
index 5e92d84fe50d0805be94a07f583c40ee46f0e6c4..1c281995f6583faf34faa0e5daa1a5d294a7c3de 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/usb/gpio_vbus.h>
 
@@ -42,6 +42,7 @@
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -103,20 +104,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
        GPIO107_GPIO,   /* earphone detect */
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-static struct pxamci_platform_data palmt5_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMT5_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMT5_SD_READONLY,
-       .gpio_power             = GPIO_NR_PALMT5_SD_POWER,
-       .detect_delay_ms        = 200,
-};
-
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmt5_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
@@ -142,9 +133,18 @@ static struct pxa27x_keypad_platform_data palmt5_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
+static void __init palmt5_kpc_init(void)
+{
+       pxa_set_keypad_info(&palmt5_keypad_platform_data);
+}
+#else
+static inline void palmt5_kpc_init(void) {}
+#endif
+
 /******************************************************************************
  * GPIO keys
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button palmt5_pxa_buttons[] = {
        {KEY_F8, GPIO_NR_PALMT5_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
 };
@@ -162,241 +162,17 @@ static struct platform_device palmt5_pxa_keys = {
        },
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmt5_backlight_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMT5_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMT5_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMT5_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMT5_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMT5_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMT5_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmt5_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_PALMT5_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMT5_LCD_POWER, brightness);
-       return brightness;
-}
-
-static void palmt5_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMT5_BL_POWER);
-       gpio_free(GPIO_NR_PALMT5_LCD_POWER);
-}
-
-static struct platform_pwm_backlight_data palmt5_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMT5_MAX_INTENSITY,
-       .dft_brightness = PALMT5_MAX_INTENSITY,
-       .pwm_period_ns  = PALMT5_PERIOD_NS,
-       .init           = palmt5_backlight_init,
-       .notify         = palmt5_backlight_notify,
-       .exit           = palmt5_backlight_exit,
-};
-
-static struct platform_device palmt5_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmt5_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmt5_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMT5_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
-
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct gpio_vbus_mach_info palmt5_udc_info = {
-       .gpio_vbus              = GPIO_NR_PALMT5_USB_DETECT_N,
-       .gpio_vbus_inverted     = 1,
-       .gpio_pullup            = GPIO_NR_PALMT5_USB_PULLUP,
-};
-
-static struct platform_device palmt5_gpio_vbus = {
-       .name   = "gpio-vbus",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &palmt5_udc_info,
-       },
-};
-
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMT5_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMT5_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       return 0;
-err2:
-       gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmt5_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_PALMT5_POWER_DETECT);
-}
-
-static void power_supply_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
-}
-
-static char *palmt5_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmt5_is_ac_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmt5_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmt5_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx battery
- ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMT5_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMT5_BAT_MIN_VOLTAGE,
-       .batt_mult      = 1000,
-       .batt_div       = 414,
-       .temp_mult      = 1,
-       .temp_div       = 1,
-       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
-       .batt_name      = "main-batt",
-};
-
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-static struct palm27x_asoc_info palmt5_asoc_pdata = {
-       .jack_gpio      = GPIO_NR_PALMT5_EARPHONE_DETECT,
-};
-
-static pxa2xx_audio_ops_t palmt5_ac97_pdata = {
-       .reset_gpio     = 95,
-};
-
-static struct platform_device palmt5_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &palmt5_asoc_pdata,
-       },
-};
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmt5_lcd_modes[] = {
-{
-       .pixclock       = 57692,
-       .xres           = 320,
-       .yres           = 480,
-       .bpp            = 16,
-
-       .left_margin    = 32,
-       .right_margin   = 1,
-       .upper_margin   = 7,
-       .lower_margin   = 1,
-
-       .hsync_len      = 4,
-       .vsync_len      = 1,
-},
-};
-
-static struct pxafb_mach_info palmt5_lcd_screen = {
-       .modes          = palmt5_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmt5_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
-
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init palmt5_pm_init(void)
+static void __init palmt5_keys_init(void)
 {
-       static u32 resume[] = {
-               0xe3a00101,     /* mov  r0,     #0x40000000 */
-               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
-               0xe590f008,     /* ldr  pc, [r0, #0x08] */
-       };
-
-       /* copy the bootloader */
-       memcpy(phys_to_virt(PALMT5_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmt5_pxa_keys);
 }
+#else
+static inline void palmt5_keys_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-       &palmt5_pxa_keys,
-#endif
-       &palmt5_backlight,
-       &power_supply,
-       &palmt5_asoc,
-       &palmt5_gpio_vbus,
-};
-
-/* setup udc GPIOs initial state */
-static void __init palmt5_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_PALMT5_USB_PULLUP, "UDC Vbus")) {
-               gpio_direction_output(GPIO_NR_PALMT5_USB_PULLUP, 1);
-               gpio_free(GPIO_NR_PALMT5_USB_PULLUP);
-       }
-}
-
 static void __init palmt5_reserve(void)
 {
        memblock_reserve(0xa0200000, 0x1000);
@@ -405,21 +181,24 @@ static void __init palmt5_reserve(void)
 static void __init palmt5_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palmt5_pm_init();
-       set_pxa_fb_info(&palmt5_lcd_screen);
-       pxa_set_mci_info(&palmt5_mci_platform_data);
-       palmt5_udc_init();
-       pxa_set_ac97_info(&palmt5_ac97_pdata);
-       pxa_set_ficp_info(&palmt5_ficp_platform_data);
-       pxa_set_keypad_info(&palmt5_keypad_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMT5_SD_DETECT_N, GPIO_NR_PALMT5_SD_READONLY,
+                       GPIO_NR_PALMT5_SD_POWER, 0);
+       palm27x_pm_init(PALMT5_STR_BASE);
+       palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
+       palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
+                       GPIO_NR_PALMT5_USB_PULLUP, 1);
+       palm27x_irda_init(GPIO_NR_PALMT5_IR_DISABLE);
+       palm27x_ac97_init(PALMT5_BAT_MIN_VOLTAGE, PALMT5_BAT_MAX_VOLTAGE,
+                       GPIO_NR_PALMT5_EARPHONE_DETECT, 95);
+       palm27x_pwm_init(GPIO_NR_PALMT5_BL_POWER, GPIO_NR_PALMT5_LCD_POWER);
+       palm27x_power_init(GPIO_NR_PALMT5_POWER_DETECT, -1);
+       palm27x_pmic_init();
+       palmt5_kpc_init();
+       palmt5_keys_init();
 }
 
 MACHINE_START(PALMT5, "Palm Tungsten|T5")
index 3d284ff1a64e35f6c2c0a06e68c7ea8df161c47b..93c11a0438d5ac5b04705e67a1a0d5919854c0b4 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/usb/gpio_vbus.h>
 
@@ -271,9 +271,9 @@ static struct platform_device power_supply = {
 };
 
 /******************************************************************************
- * WM97xx battery
+ * WM97xx audio, battery
  ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
+static struct wm97xx_batt_pdata palmte2_batt_pdata = {
        .batt_aux       = WM97XX_AUX_ID3,
        .temp_aux       = WM97XX_AUX_ID2,
        .charge_gpio    = -1,
@@ -287,9 +287,14 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
        .batt_name      = "main-batt",
 };
 
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
+static struct wm97xx_pdata palmte2_wm97xx_pdata = {
+       .batt_pdata     = &palmte2_batt_pdata,
+};
+
+static pxa2xx_audio_ops_t palmte2_ac97_pdata = {
+       .codec_pdata    = { &palmte2_wm97xx_pdata, },
+};
+
 static struct palm27x_asoc_info palmte2_asoc_pdata = {
        .jack_gpio      = GPIO_NR_PALMTE2_EARPHONE_DETECT,
 };
@@ -361,9 +366,8 @@ static void __init palmte2_init(void)
        set_pxa_fb_info(&palmte2_lcd_screen);
        pxa_set_mci_info(&palmte2_mci_platform_data);
        palmte2_udc_init();
-       pxa_set_ac97_info(NULL);
+       pxa_set_ac97_info(&palmte2_ac97_pdata);
        pxa_set_ficp_info(&palmte2_ficp_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
 
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
index 3d0c9cc2a40648a049a3ccc81a34c5f03f4126de..52defd5e42e520edb4912dbbaf676d6beb15d6d6 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
 #include <linux/power_supply.h>
 #include <linux/sysdev.h>
 #include <linux/w1-gpio.h>
@@ -46,6 +45,7 @@
 #include <mach/pxa2xx-regs.h>
 #include <mach/palmasoc.h>
 #include <mach/camera.h>
+#include <mach/palm27x.h>
 
 #include <sound/pxa2xx-lib.h>
 
@@ -159,32 +159,10 @@ static unsigned long centro685_pin_config[] __initdata = {
 };
 #endif /* CONFIG_MACH_CENTRO */
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-#ifdef CONFIG_MACH_TREO680
-static struct pxamci_platform_data treo680_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_TREO_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_TREO680_SD_READONLY,
-       .gpio_power             = GPIO_NR_TREO680_SD_POWER,
-};
-#endif /* CONFIG_MACH_TREO680 */
-
-#ifdef CONFIG_MACH_CENTRO
-static struct pxamci_platform_data centro_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_TREO_SD_DETECT_N,
-       .gpio_card_ro           = -1,
-       .gpio_power             = GPIO_NR_CENTRO_SD_POWER,
-       .gpio_power_invert      = 1,
-};
-#endif /* CONFIG_MACH_CENTRO */
-
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
-#ifdef CONFIG_MACH_TREO680
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int treo680_matrix_keys[] = {
        KEY(0, 0, KEY_F8),              /* Red/Off/Power */
        KEY(0, 1, KEY_LEFT),
@@ -244,19 +222,6 @@ static unsigned int treo680_matrix_keys[] = {
        KEY(7, 5, KEY_I),
 };
 
-static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = {
-       .matrix_key_rows        = 8,
-       .matrix_key_cols        = 7,
-       .matrix_key_map         = treo680_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(treo680_matrix_keys),
-       .direct_key_map         = { KEY_CONNECT },
-       .direct_key_num         = 1,
-
-       .debounce_interval      = 30,
-};
-#endif /* CONFIG_MACH_TREO680 */
-
-#ifdef CONFIG_MACH_CENTRO
 static unsigned int centro_matrix_keys[] = {
        KEY(0, 0, KEY_F9),              /* Home */
        KEY(0, 1, KEY_LEFT),
@@ -316,157 +281,50 @@ static unsigned int centro_matrix_keys[] = {
        KEY(7, 5, KEY_I),
 };
 
-static struct pxa27x_keypad_platform_data centro_keypad_platform_data = {
+static struct pxa27x_keypad_platform_data treo680_keypad_pdata = {
        .matrix_key_rows        = 8,
        .matrix_key_cols        = 7,
-       .matrix_key_map         = centro_matrix_keys,
-       .matrix_key_map_size    = ARRAY_SIZE(centro_matrix_keys),
+       .matrix_key_map         = treo680_matrix_keys,
+       .matrix_key_map_size    = ARRAY_SIZE(treo680_matrix_keys),
        .direct_key_map         = { KEY_CONNECT },
        .direct_key_num         = 1,
 
        .debounce_interval      = 30,
 };
-#endif /* CONFIG_MACH_CENTRO */
 
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-
-static pxa2xx_audio_ops_t treo_ac97_pdata = {
-       .reset_gpio     = 95,
-};
-
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int treo_backlight_init(struct device *dev)
+static void __init palmtreo_kpc_init(void)
 {
-       int ret;
-
-       ret = gpio_request(GPIO_NR_TREO_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_TREO_BL_POWER, 0);
-       if (ret)
-               goto err2;
-
-       return 0;
+       static struct pxa27x_keypad_platform_data *data = &treo680_keypad_pdata;
 
-err2:
-       gpio_free(GPIO_NR_TREO_BL_POWER);
-err:
-       return ret;
-}
-
-static int treo_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_TREO_BL_POWER, brightness);
-       return TREO_MAX_INTENSITY - brightness;
-};
+       if (machine_is_centro()) {
+               data->matrix_key_map = centro_matrix_keys;
+               data->matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys);
+       }
 
-static void treo_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_TREO_BL_POWER);
+       pxa_set_keypad_info(&treo680_keypad_pdata);
 }
-
-static struct platform_pwm_backlight_data treo_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = TREO_MAX_INTENSITY,
-       .dft_brightness = TREO_DEFAULT_INTENSITY,
-       .pwm_period_ns  = TREO_PERIOD_NS,
-       .init           = treo_backlight_init,
-       .notify         = treo_backlight_notify,
-       .exit           = treo_backlight_exit,
-};
-
-static struct platform_device treo_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &treo_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data treo_ficp_info = {
-       .gpio_pwdown            = GPIO_NR_TREO_IR_EN,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
-
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct pxa2xx_udc_mach_info treo_udc_info __initdata = {
-       .gpio_vbus              = GPIO_NR_TREO_USB_DETECT,
-       .gpio_vbus_inverted     = 1,
-       .gpio_pullup            = GPIO_NR_TREO_USB_PULLUP,
-};
-
+#else
+static inline void palmtreo_kpc_init(void) {}
+#endif
 
 /******************************************************************************
  * USB host
  ******************************************************************************/
-#ifdef CONFIG_MACH_TREO680
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
 static struct pxaohci_platform_data treo680_ohci_info = {
        .port_mode    = PMM_PERPORT_MODE,
        .flags        = ENABLE_PORT1 | ENABLE_PORT3,
        .power_budget = 0,
 };
-#endif /* CONFIG_MACH_TREO680 */
 
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
+static void __init palmtreo_uhc_init(void)
 {
-       int ret;
-
-       ret = gpio_request(GPIO_NR_TREO_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_TREO_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       return 0;
-
-err2:
-       gpio_free(GPIO_NR_TREO_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int treo_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_TREO_POWER_DETECT);
+       if (machine_is_treo680())
+               pxa_set_ohci_info(&treo680_ohci_info);
 }
-
-static void power_supply_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_TREO_POWER_DETECT);
-}
-
-static char *treo_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = treo_is_ac_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = treo_supplicants,
-       .num_supplicants = ARRAY_SIZE(treo_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
+#else
+static inline void palmtreo_uhc_init(void) {}
+#endif
 
 /******************************************************************************
  * Vibra and LEDs
@@ -495,16 +353,6 @@ static struct gpio_led_platform_data treo680_gpio_led_info = {
        .num_leds       = ARRAY_SIZE(treo680_gpio_leds),
 };
 
-static struct platform_device treo680_leds = {
-       .name   = "leds-gpio",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &treo680_gpio_led_info,
-       }
-};
-#endif /* CONFIG_MACH_TREO680 */
-
-#ifdef CONFIG_MACH_CENTRO
 static struct gpio_led centro_gpio_leds[] = {
        {
                .name                   = "centro:vibra:vibra",
@@ -529,145 +377,67 @@ static struct gpio_led_platform_data centro_gpio_led_info = {
        .num_leds       = ARRAY_SIZE(centro_gpio_leds),
 };
 
-static struct platform_device centro_leds = {
+static struct platform_device palmtreo_leds = {
        .name   = "leds-gpio",
        .id     = -1,
        .dev    = {
-               .platform_data  = &centro_gpio_led_info,
+               .platform_data  = &treo680_gpio_led_info,
        }
 };
-#endif /* CONFIG_MACH_CENTRO */
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-/* TODO: add support for 324x324 */
-static struct pxafb_mode_info treo_lcd_modes[] = {
-{
-       .pixclock               = 86538,
-       .xres                   = 320,
-       .yres                   = 320,
-       .bpp                    = 16,
-
-       .left_margin            = 20,
-       .right_margin           = 8,
-       .upper_margin           = 8,
-       .lower_margin           = 5,
-
-       .hsync_len              = 4,
-       .vsync_len              = 1,
-},
-};
 
-static void treo_lcd_power(int on, struct fb_var_screeninfo *info)
+static void __init palmtreo_leds_init(void)
 {
-       gpio_set_value(GPIO_NR_TREO_BL_POWER, on);
-}
-
-static struct pxafb_mach_info treo_lcd_screen = {
-       .modes          = treo_lcd_modes,
-       .num_modes      = ARRAY_SIZE(treo_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
+       if (machine_is_centro())
+               palmtreo_leds.dev.platform_data = &centro_gpio_led_info;
 
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init treo_pm_init(void)
-{
-       static u32 resume[] = {
-               0xe3a00101,     /* mov  r0,     #0x40000000 */
-               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
-               0xe590f008,     /* ldr  pc, [r0, #0x08] */
-       };
-
-       /* this is where the bootloader jumps */
-       memcpy(phys_to_virt(TREO_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmtreo_leds);
 }
+#else
+static inline void palmtreo_leds_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *treo_devices[] __initdata = {
-       &treo_backlight,
-       &power_supply,
-};
-
-#ifdef CONFIG_MACH_TREO680
-static struct platform_device *treo680_devices[] __initdata = {
-       &treo680_leds,
-};
-#endif /* CONFIG_MACH_TREO680 */
-
-#ifdef CONFIG_MACH_CENTRO
-static struct platform_device *centro_devices[] __initdata = {
-       &centro_leds,
-};
-#endif /* CONFIG_MACH_CENTRO */
-
-/* setup udc GPIOs initial state */
-static void __init treo_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_TREO_USB_PULLUP, "UDC Vbus")) {
-               gpio_direction_output(GPIO_NR_TREO_USB_PULLUP, 1);
-               gpio_free(GPIO_NR_TREO_USB_PULLUP);
-       }
-}
-
-static void __init treo_lcd_power_init(void)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_TREO_LCD_POWER, "LCD POWER");
-       if (ret) {
-               pr_err("Treo680: LCD power GPIO request failed!\n");
-               return;
-       }
-
-       ret = gpio_direction_output(GPIO_NR_TREO_LCD_POWER, 0);
-       if (ret) {
-               pr_err("Treo680: setting LCD power GPIO direction failed!\n");
-               gpio_free(GPIO_NR_TREO_LCD_POWER);
-               return;
-       }
-
-       treo_lcd_screen.pxafb_lcd_power = treo_lcd_power;
-}
-
 static void __init treo_reserve(void)
 {
        memblock_reserve(0xa0000000, 0x1000);
        memblock_reserve(0xa2000000, 0x1000);
 }
 
-static void __init treo_init(void)
+static void __init palmphone_common_init(void)
 {
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
-
-       treo_pm_init();
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
-       treo_lcd_power_init();
-       set_pxa_fb_info(&treo_lcd_screen);
-       treo_udc_init();
-       pxa_set_udc_info(&treo_udc_info);
-       pxa_set_ac97_info(&treo_ac97_pdata);
-       pxa_set_ficp_info(&treo_ficp_info);
-
-       platform_add_devices(ARRAY_AND_SIZE(treo_devices));
+       palm27x_pm_init(TREO_STR_BASE);
+       palm27x_lcd_init(GPIO_NR_TREO_BL_POWER, &palm_320x320_new_lcd_mode);
+       palm27x_udc_init(GPIO_NR_TREO_USB_DETECT, GPIO_NR_TREO_USB_PULLUP, 1);
+       palm27x_irda_init(GPIO_NR_TREO_IR_EN);
+       palm27x_ac97_init(-1, -1, -1, 95);
+       palm27x_pwm_init(GPIO_NR_TREO_BL_POWER, -1);
+       palm27x_power_init(GPIO_NR_TREO_POWER_DETECT, -1);
+       palm27x_pmic_init();
+       palmtreo_kpc_init();
+       palmtreo_uhc_init();
+       palmtreo_leds_init();
 }
 
-#ifdef CONFIG_MACH_TREO680
 static void __init treo680_init(void)
 {
-       treo_init();
        pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
-       pxa_set_mci_info(&treo680_mci_platform_data);
-       pxa_set_keypad_info(&treo680_keypad_platform_data);
-       pxa_set_ohci_info(&treo680_ohci_info);
+       palmphone_common_init();
+       palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY,
+                       GPIO_NR_TREO680_SD_POWER, 0);
+}
 
-       platform_add_devices(ARRAY_AND_SIZE(treo680_devices));
+static void __init centro_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(centro685_pin_config));
+       palmphone_common_init();
+       palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, -1,
+                       GPIO_NR_CENTRO_SD_POWER, 1);
 }
 
 MACHINE_START(TREO680, "Palm Treo 680")
@@ -680,19 +450,6 @@ MACHINE_START(TREO680, "Palm Treo 680")
        .timer          = &pxa_timer,
        .init_machine   = treo680_init,
 MACHINE_END
-#endif /* CONFIG_MACH_TREO680 */
-
-#ifdef CONFIG_MACH_CENTRO
-static void __init centro_init(void)
-{
-       treo_init();
-       pxa2xx_mfp_config(ARRAY_AND_SIZE(centro685_pin_config));
-       pxa_set_mci_info(&centro_mci_platform_data);
-
-       pxa_set_keypad_info(&centro_keypad_platform_data);
-
-       platform_add_devices(ARRAY_AND_SIZE(centro_devices));
-}
 
 MACHINE_START(CENTRO, "Palm Centro 685")
        .phys_io        = TREO_PHYS_IO_START,
@@ -702,6 +459,5 @@ MACHINE_START(CENTRO, "Palm Centro 685")
        .reserve        = treo_reserve,
        .init_irq       = pxa27x_init_irq,
        .timer          = &pxa_timer,
-       .init_machine   = centro_init,
+       .init_machine   = centro_init,
 MACHINE_END
-#endif /* CONFIG_MACH_CENTRO */
index ecc1a401598e07d2cc11b007b78499e864cc4932..144dc2b6911f784f6630c8966f60d57befc7a330 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/usb/gpio_vbus.h>
 #include <linux/mtd/nand.h>
@@ -46,6 +46,7 @@
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -129,6 +130,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
 /******************************************************************************
  * NOR Flash
  ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
 static struct mtd_partition palmtx_partitions[] = {
        {
                .name           = "Flash",
@@ -162,20 +164,18 @@ static struct platform_device palmtx_flash = {
        },
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-static struct pxamci_platform_data palmtx_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMTX_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMTX_SD_READONLY,
-       .gpio_power             = GPIO_NR_PALMTX_SD_POWER,
-       .detect_delay_ms        = 200,
-};
+static void __init palmtx_nor_init(void)
+{
+       platform_device_register(&palmtx_flash);
+}
+#else
+static inline void palmtx_nor_init(void) {}
+#endif
 
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmtx_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
@@ -201,9 +201,18 @@ static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
+static void __init palmtx_kpc_init(void)
+{
+       pxa_set_keypad_info(&palmtx_keypad_platform_data);
+}
+#else
+static inline void palmtx_kpc_init(void) {}
+#endif
+
 /******************************************************************************
  * GPIO keys
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button palmtx_pxa_buttons[] = {
        {KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
 };
@@ -221,208 +230,18 @@ static struct platform_device palmtx_pxa_keys = {
        },
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmtx_backlight_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMTX_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMTX_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMTX_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMTX_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmtx_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_PALMTX_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMTX_LCD_POWER, brightness);
-       return brightness;
-}
-
-static void palmtx_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMTX_BL_POWER);
-       gpio_free(GPIO_NR_PALMTX_LCD_POWER);
-}
-
-static struct platform_pwm_backlight_data palmtx_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMTX_MAX_INTENSITY,
-       .dft_brightness = PALMTX_MAX_INTENSITY,
-       .pwm_period_ns  = PALMTX_PERIOD_NS,
-       .init           = palmtx_backlight_init,
-       .notify         = palmtx_backlight_notify,
-       .exit           = palmtx_backlight_exit,
-};
-
-static struct platform_device palmtx_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmtx_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmtx_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMTX_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
-
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct gpio_vbus_mach_info palmtx_udc_info = {
-       .gpio_vbus              = GPIO_NR_PALMTX_USB_DETECT_N,
-       .gpio_vbus_inverted     = 1,
-       .gpio_pullup            = GPIO_NR_PALMTX_USB_PULLUP,
-};
-
-static struct platform_device palmtx_gpio_vbus = {
-       .name   = "gpio-vbus",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &palmtx_udc_info,
-       },
-};
-
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMTX_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       return 0;
-
-err2:
-       gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmtx_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT);
-}
-
-static void power_supply_exit(struct device *dev)
+static void __init palmtx_keys_init(void)
 {
-       gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
+       platform_device_register(&palmtx_pxa_keys);
 }
-
-static char *palmtx_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmtx_is_ac_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmtx_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmtx_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx battery
- ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMTX_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMTX_BAT_MIN_VOLTAGE,
-       .batt_mult      = 1000,
-       .batt_div       = 414,
-       .temp_mult      = 1,
-       .temp_div       = 1,
-       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
-       .batt_name      = "main-batt",
-};
-
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-static struct palm27x_asoc_info palmtx_asoc_pdata = {
-       .jack_gpio      = GPIO_NR_PALMTX_EARPHONE_DETECT,
-};
-
-static pxa2xx_audio_ops_t palmtx_ac97_pdata = {
-       .reset_gpio     = 95,
-};
-
-static struct platform_device palmtx_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &palmtx_asoc_pdata,
-       },
-};
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmtx_lcd_modes[] = {
-{
-       .pixclock       = 57692,
-       .xres           = 320,
-       .yres           = 480,
-       .bpp            = 16,
-
-       .left_margin    = 32,
-       .right_margin   = 1,
-       .upper_margin   = 7,
-       .lower_margin   = 1,
-
-       .hsync_len      = 4,
-       .vsync_len      = 1,
-},
-};
-
-static struct pxafb_mach_info palmtx_lcd_screen = {
-       .modes          = palmtx_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmtx_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
+#else
+static inline void palmtx_keys_init(void) {}
+#endif
 
 /******************************************************************************
  * NAND Flash
  ******************************************************************************/
+#if defined(CONFIG_MTD_NAND_GPIO) || defined(CONFIG_MTD_NAND_GPIO_MODULE)
 static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
                                 unsigned int ctrl)
 {
@@ -482,36 +301,17 @@ static struct platform_device palmtx_nand = {
        }
 };
 
-/******************************************************************************
- * Power management - standby
- ******************************************************************************/
-static void __init palmtx_pm_init(void)
+static void __init palmtx_nand_init(void)
 {
-       static u32 resume[] = {
-               0xe3a00101,     /* mov  r0,     #0x40000000 */
-               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
-               0xe590f008,     /* ldr  pc, [r0, #0x08] */
-       };
-
-       /* copy the bootloader */
-       memcpy(phys_to_virt(PALMTX_STR_BASE), resume, sizeof(resume));
+       platform_device_register(&palmtx_nand);
 }
+#else
+static inline void palmtx_nand_init(void) {}
+#endif
 
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-       &palmtx_pxa_keys,
-#endif
-       &palmtx_backlight,
-       &power_supply,
-       &palmtx_asoc,
-       &palmtx_gpio_vbus,
-       &palmtx_flash,
-       &palmtx_nand,
-};
-
 static struct map_desc palmtx_io_desc[] __initdata = {
 {
        .virtual        = PALMTX_PCMCIA_VIRT,
@@ -537,34 +337,29 @@ static void __init palmtx_map_io(void)
        iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
 }
 
-/* setup udc GPIOs initial state */
-static void __init palmtx_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_PALMTX_USB_PULLUP, "UDC Vbus")) {
-               gpio_direction_output(GPIO_NR_PALMTX_USB_PULLUP, 1);
-               gpio_free(GPIO_NR_PALMTX_USB_PULLUP);
-       }
-}
-
-
 static void __init palmtx_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       palmtx_pm_init();
-       set_pxa_fb_info(&palmtx_lcd_screen);
-       pxa_set_mci_info(&palmtx_mci_platform_data);
-       palmtx_udc_init();
-       pxa_set_ac97_info(&palmtx_ac97_pdata);
-       pxa_set_ficp_info(&palmtx_ficp_platform_data);
-       pxa_set_keypad_info(&palmtx_keypad_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMTX_SD_DETECT_N, GPIO_NR_PALMTX_SD_READONLY,
+                       GPIO_NR_PALMTX_SD_POWER, 0);
+       palm27x_pm_init(PALMTX_STR_BASE);
+       palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
+       palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
+                       GPIO_NR_PALMTX_USB_PULLUP, 1);
+       palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
+       palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
+                       GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
+       palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
+       palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
+       palm27x_pmic_init();
+       palmtx_kpc_init();
+       palmtx_keys_init();
+       palmtx_nor_init();
+       palmtx_nand_init();
 }
 
 MACHINE_START(PALMTX, "Palm T|X")
index 3a7925ca39440f4f2c6ea87d4df87146271a6c7f..87e4b1044e0b68564c12f27646453123c8eea16c 100644 (file)
@@ -27,7 +27,7 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
-#include <linux/wm97xx_batt.h>
+#include <linux/wm97xx.h>
 #include <linux/power_supply.h>
 #include <linux/usb/gpio_vbus.h>
 
@@ -44,6 +44,7 @@
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
+#include <mach/palm27x.h>
 
 #include <mach/pm.h>
 
@@ -108,22 +109,10 @@ static unsigned long palmz72_pin_config[] __initdata = {
        GPIO27_GPIO,                            /* WM9712 IRQ */
 };
 
-/******************************************************************************
- * SD/MMC card controller
- ******************************************************************************/
-/* SD_POWER is not actually power, but it is more like chip
- * select, i.e. it is inverted */
-static struct pxamci_platform_data palmz72_mci_platform_data = {
-       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
-       .gpio_card_detect       = GPIO_NR_PALMZ72_SD_DETECT_N,
-       .gpio_card_ro           = GPIO_NR_PALMZ72_SD_RO,
-       .gpio_power             = GPIO_NR_PALMZ72_SD_POWER_N,
-       .gpio_power_invert      = 1,
-};
-
 /******************************************************************************
  * GPIO keyboard
  ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 static unsigned int palmz72_matrix_keys[] = {
        KEY(0, 0, KEY_POWER),
        KEY(0, 1, KEY_F1),
@@ -149,77 +138,18 @@ static struct pxa27x_keypad_platform_data palmz72_keypad_platform_data = {
        .debounce_interval      = 30,
 };
 
-/******************************************************************************
- * Backlight
- ******************************************************************************/
-static int palmz72_backlight_init(struct device *dev)
+static void __init palmz72_kpc_init(void)
 {
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMZ72_BL_POWER, "BL POWER");
-       if (ret)
-               goto err;
-       ret = gpio_direction_output(GPIO_NR_PALMZ72_BL_POWER, 0);
-       if (ret)
-               goto err2;
-       ret = gpio_request(GPIO_NR_PALMZ72_LCD_POWER, "LCD POWER");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_output(GPIO_NR_PALMZ72_LCD_POWER, 0);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMZ72_LCD_POWER);
-err2:
-       gpio_free(GPIO_NR_PALMZ72_BL_POWER);
-err:
-       return ret;
-}
-
-static int palmz72_backlight_notify(struct device *dev, int brightness)
-{
-       gpio_set_value(GPIO_NR_PALMZ72_BL_POWER, brightness);
-       gpio_set_value(GPIO_NR_PALMZ72_LCD_POWER, brightness);
-       return brightness;
-}
-
-static void palmz72_backlight_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMZ72_BL_POWER);
-       gpio_free(GPIO_NR_PALMZ72_LCD_POWER);
+       pxa_set_keypad_info(&palmz72_keypad_platform_data);
 }
-
-static struct platform_pwm_backlight_data palmz72_backlight_data = {
-       .pwm_id         = 0,
-       .max_brightness = PALMZ72_MAX_INTENSITY,
-       .dft_brightness = PALMZ72_MAX_INTENSITY,
-       .pwm_period_ns  = PALMZ72_PERIOD_NS,
-       .init           = palmz72_backlight_init,
-       .notify         = palmz72_backlight_notify,
-       .exit           = palmz72_backlight_exit,
-};
-
-static struct platform_device palmz72_backlight = {
-       .name   = "pwm-backlight",
-       .dev    = {
-               .parent         = &pxa27x_device_pwm0.dev,
-               .platform_data  = &palmz72_backlight_data,
-       },
-};
-
-/******************************************************************************
- * IrDA
- ******************************************************************************/
-static struct pxaficp_platform_data palmz72_ficp_platform_data = {
-       .gpio_pwdown            = GPIO_NR_PALMZ72_IR_DISABLE,
-       .transceiver_cap        = IR_SIRMODE | IR_OFF,
-};
+#else
+static inline void palmz72_kpc_init(void) {}
+#endif
 
 /******************************************************************************
  * LEDs
  ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
 static struct gpio_led gpio_leds[] = {
        {
                .name                   = "palmz72:green:led",
@@ -241,139 +171,13 @@ static struct platform_device palmz72_leds = {
        }
 };
 
-/******************************************************************************
- * UDC
- ******************************************************************************/
-static struct gpio_vbus_mach_info palmz72_udc_info = {
-       .gpio_vbus              = GPIO_NR_PALMZ72_USB_DETECT_N,
-       .gpio_pullup            = GPIO_NR_PALMZ72_USB_PULLUP,
-};
-
-static struct platform_device palmz72_gpio_vbus = {
-       .name   = "gpio-vbus",
-       .id     = -1,
-       .dev    = {
-               .platform_data  = &palmz72_udc_info,
-       },
-};
-
-/******************************************************************************
- * Power supply
- ******************************************************************************/
-static int power_supply_init(struct device *dev)
-{
-       int ret;
-
-       ret = gpio_request(GPIO_NR_PALMZ72_POWER_DETECT, "CABLE_STATE_AC");
-       if (ret)
-               goto err1;
-       ret = gpio_direction_input(GPIO_NR_PALMZ72_POWER_DETECT);
-       if (ret)
-               goto err2;
-
-       ret = gpio_request(GPIO_NR_PALMZ72_USB_DETECT_N, "CABLE_STATE_USB");
-       if (ret)
-               goto err2;
-       ret = gpio_direction_input(GPIO_NR_PALMZ72_USB_DETECT_N);
-       if (ret)
-               goto err3;
-
-       return 0;
-err3:
-       gpio_free(GPIO_NR_PALMZ72_USB_DETECT_N);
-err2:
-       gpio_free(GPIO_NR_PALMZ72_POWER_DETECT);
-err1:
-       return ret;
-}
-
-static int palmz72_is_ac_online(void)
-{
-       return gpio_get_value(GPIO_NR_PALMZ72_POWER_DETECT);
-}
-
-static int palmz72_is_usb_online(void)
+static void __init palmz72_leds_init(void)
 {
-       return !gpio_get_value(GPIO_NR_PALMZ72_USB_DETECT_N);
+       platform_device_register(&palmz72_leds);
 }
-
-static void power_supply_exit(struct device *dev)
-{
-       gpio_free(GPIO_NR_PALMZ72_USB_DETECT_N);
-       gpio_free(GPIO_NR_PALMZ72_POWER_DETECT);
-}
-
-static char *palmz72_supplicants[] = {
-       "main-battery",
-};
-
-static struct pda_power_pdata power_supply_info = {
-       .init            = power_supply_init,
-       .is_ac_online    = palmz72_is_ac_online,
-       .is_usb_online   = palmz72_is_usb_online,
-       .exit            = power_supply_exit,
-       .supplied_to     = palmz72_supplicants,
-       .num_supplicants = ARRAY_SIZE(palmz72_supplicants),
-};
-
-static struct platform_device power_supply = {
-       .name = "pda-power",
-       .id   = -1,
-       .dev  = {
-               .platform_data = &power_supply_info,
-       },
-};
-
-/******************************************************************************
- * WM97xx battery
- ******************************************************************************/
-static struct wm97xx_batt_info wm97xx_batt_pdata = {
-       .batt_aux       = WM97XX_AUX_ID3,
-       .temp_aux       = WM97XX_AUX_ID2,
-       .charge_gpio    = -1,
-       .max_voltage    = PALMZ72_BAT_MAX_VOLTAGE,
-       .min_voltage    = PALMZ72_BAT_MIN_VOLTAGE,
-       .batt_mult      = 1000,
-       .batt_div       = 414,
-       .temp_mult      = 1,
-       .temp_div       = 1,
-       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
-       .batt_name      = "main-batt",
-};
-
-/******************************************************************************
- * aSoC audio
- ******************************************************************************/
-static struct platform_device palmz72_asoc = {
-       .name = "palm27x-asoc",
-       .id   = -1,
-};
-
-/******************************************************************************
- * Framebuffer
- ******************************************************************************/
-static struct pxafb_mode_info palmz72_lcd_modes[] = {
-{
-       .pixclock       = 115384,
-       .xres           = 320,
-       .yres           = 320,
-       .bpp            = 16,
-
-       .left_margin    = 27,
-       .right_margin   = 7,
-       .upper_margin   = 7,
-       .lower_margin   = 8,
-
-       .hsync_len      = 6,
-       .vsync_len      = 1,
-},
-};
-
-static struct pxafb_mach_info palmz72_lcd_screen = {
-       .modes          = palmz72_lcd_modes,
-       .num_modes      = ARRAY_SIZE(palmz72_lcd_modes),
-       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
-};
+#else
+static inline void palmz72_leds_init(void) {}
+#endif
 
 #ifdef CONFIG_PM
 
@@ -452,40 +256,26 @@ device_initcall(palmz72_pm_init);
 /******************************************************************************
  * Machine init
  ******************************************************************************/
-static struct platform_device *devices[] __initdata = {
-       &palmz72_backlight,
-       &palmz72_leds,
-       &palmz72_asoc,
-       &power_supply,
-       &palmz72_gpio_vbus,
-};
-
-/* setup udc GPIOs initial state */
-static void __init palmz72_udc_init(void)
-{
-       if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) {
-               gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0);
-               gpio_free(GPIO_NR_PALMZ72_USB_PULLUP);
-       }
-}
-
 static void __init palmz72_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
-
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       set_pxa_fb_info(&palmz72_lcd_screen);
-       pxa_set_mci_info(&palmz72_mci_platform_data);
-       palmz72_udc_init();
-       pxa_set_ac97_info(NULL);
-       pxa_set_ficp_info(&palmz72_ficp_platform_data);
-       pxa_set_keypad_info(&palmz72_keypad_platform_data);
-       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
+       palm27x_mmc_init(GPIO_NR_PALMZ72_SD_DETECT_N, GPIO_NR_PALMZ72_SD_RO,
+                       GPIO_NR_PALMZ72_SD_POWER_N, 1);
+       palm27x_lcd_init(-1, &palm_320x320_lcd_mode);
+       palm27x_udc_init(GPIO_NR_PALMZ72_USB_DETECT_N,
+                       GPIO_NR_PALMZ72_USB_PULLUP, 0);
+       palm27x_irda_init(GPIO_NR_PALMZ72_IR_DISABLE);
+       palm27x_ac97_init(PALMZ72_BAT_MIN_VOLTAGE, PALMZ72_BAT_MAX_VOLTAGE,
+                       -1, 113);
+       palm27x_pwm_init(-1, -1);
+       palm27x_power_init(-1, -1);
+       palm27x_pmic_init();
+       palmz72_kpc_init();
+       palmz72_leds_init();
 }
 
 MACHINE_START(PALMZ72, "Palm Zire72")
index bc2758b54446fc5cc38db451fc70a9ed77d0511a..55e8fcde0141df75dccd32b49c6a452e4f2daaea 100644 (file)
@@ -43,7 +43,6 @@
 #include <mach/irda.h>
 #include <mach/poodle.h>
 #include <mach/pxafb.h>
-#include <mach/sharpsl.h>
 #include <mach/pxa2xx_spi.h>
 #include <plat/i2c.h>
 
@@ -53,7 +52,6 @@
 
 #include "generic.h"
 #include "devices.h"
-#include "sharpsl.h"
 
 static unsigned long poodle_pin_config[] __initdata = {
        /* I/O */
index 0b9ad30bfd51cd659359dfbf2ded2412095033ad..de53f2e4aa390d1cc58b3667f7422aaaeeee81ef 100644 (file)
@@ -322,6 +322,7 @@ void __init pxa26x_init_irq(void)
 
 static struct platform_device *pxa25x_devices[] __initdata = {
        &pxa25x_device_udc,
+       &pxa_device_pmu,
        &pxa_device_i2s,
        &sa1100_device_rtc,
        &pxa25x_device_ssp,
index c059dac02b61412b64b22f869d2e8913404236ed..12e5b9f01e6f6271f73623aa47f5be826b86bd2a 100644 (file)
@@ -383,6 +383,7 @@ void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info)
 
 static struct platform_device *devices[] __initdata = {
        &pxa27x_device_udc,
+       &pxa_device_pmu,
        &pxa_device_i2s,
        &sa1100_device_rtc,
        &pxa_device_rtc,
index f544e58e1536047a30dbe91414e055f4008a6e7e..fa0014847c71503f4f929870cce2622deb0abd9d 100644 (file)
@@ -52,7 +52,7 @@
 static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
 
 /* crystal frequency to HSIO bus frequency multiplier (HSS) */
-static unsigned char hss_mult[4] = { 8, 12, 16, 0 };
+static unsigned char hss_mult[4] = { 8, 12, 16, 24 };
 
 /*
  * Get the clock frequency as reflected by CCSR and the turbo flag.
@@ -552,11 +552,23 @@ static void pxa_unmask_ext_wakeup(unsigned int irq)
        PECR |= PECR_IE(irq - IRQ_WAKEUP0);
 }
 
+static int pxa_set_ext_wakeup_type(unsigned int irq, unsigned int flow_type)
+{
+       if (flow_type & IRQ_TYPE_EDGE_RISING)
+               PWER |= 1 << (irq - IRQ_WAKEUP0);
+
+       if (flow_type & IRQ_TYPE_EDGE_FALLING)
+               PWER |= 1 << (irq - IRQ_WAKEUP0 + 2);
+
+       return 0;
+}
+
 static struct irq_chip pxa_ext_wakeup_chip = {
        .name           = "WAKEUP",
        .ack            = pxa_ack_ext_wakeup,
        .mask           = pxa_mask_ext_wakeup,
        .unmask         = pxa_unmask_ext_wakeup,
+       .set_type       = pxa_set_ext_wakeup_type,
 };
 
 static void __init pxa_init_ext_wakeup_irq(set_wake_t fn)
@@ -596,6 +608,7 @@ void __init pxa3xx_set_i2c_power_info(struct i2c_pxa_platform_data *info)
 
 static struct platform_device *devices[] __initdata = {
        &pxa27x_device_udc,
+       &pxa_device_pmu,
        &pxa_device_i2s,
        &sa1100_device_rtc,
        &pxa_device_rtc,
index d4b61b3f08f3e851969a0215e634da86b455e80c..67e04f4e07c122781e42ca184c30f1e7b4329e7e 100644 (file)
@@ -745,13 +745,32 @@ static int raumfeld_is_usb_online(void)
 
 static char *raumfeld_power_supplicants[] = { "ds2760-battery.0" };
 
+static void raumfeld_power_signal_charged(void)
+{
+       struct power_supply *psy =
+               power_supply_get_by_name(raumfeld_power_supplicants[0]);
+
+       if (psy)
+               power_supply_set_battery_charged(psy);
+}
+
+static int raumfeld_power_resume(void)
+{
+       /* check if GPIO_CHARGE_DONE went low while we were sleeping */
+       if (!gpio_get_value(GPIO_CHARGE_DONE))
+               raumfeld_power_signal_charged();
+
+       return 0;
+}
+
 static struct pda_power_pdata power_supply_info = {
        .init                   = power_supply_init,
        .is_ac_online           = raumfeld_is_ac_online,
        .is_usb_online          = raumfeld_is_usb_online,
        .exit                   = power_supply_exit,
        .supplied_to            = raumfeld_power_supplicants,
-       .num_supplicants        = ARRAY_SIZE(raumfeld_power_supplicants)
+       .num_supplicants        = ARRAY_SIZE(raumfeld_power_supplicants),
+       .resume                 = raumfeld_power_resume,
 };
 
 static struct resource power_supply_resources[] = {
@@ -766,13 +785,7 @@ static struct resource power_supply_resources[] = {
 
 static irqreturn_t charge_done_irq(int irq, void *dev_id)
 {
-       struct power_supply *psy;
-
-       psy = power_supply_get_by_name("ds2760-battery.0");
-
-       if (psy)
-               power_supply_set_battery_charged(psy);
-
+       raumfeld_power_signal_charged();
        return IRQ_HANDLED;
 }
 
diff --git a/arch/arm/mach-pxa/sharpsl.h b/arch/arm/mach-pxa/sharpsl.h
deleted file mode 100644 (file)
index 0cc1203..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 2004-2005 Richard Purdie
- *
- * 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 <mach/sharpsl_pm.h>
-
-/*
- * SharpSL Battery/PM Driver
- */
-#define READ_GPIO_BIT(x)    (GPLR(x) & GPIO_bit(x))
-
-/* MAX1111 Channel Definitions */
-#define MAX1111_BATT_VOLT   4u
-#define MAX1111_BATT_TEMP   2u
-#define MAX1111_ACIN_VOLT   6u
-
-extern struct battery_thresh sharpsl_battery_levels_acin[];
-extern struct battery_thresh sharpsl_battery_levels_noac[];
-int sharpsl_pm_pxa_read_max1111(int channel);
-
-
index cb4767251f3c58f04ab141690a004e3e433113ee..8fed027b12dcee3edd70cc9e9968e465e7a84dd1 100644 (file)
 #include <mach/pm.h>
 #include <mach/pxa2xx-regs.h>
 #include <mach/regs-rtc.h>
-#include <mach/sharpsl.h>
 #include <mach/sharpsl_pm.h>
 
-#include "sharpsl.h"
-
 /*
  * Constants
  */
@@ -180,17 +177,12 @@ int sharpsl_pm_pxa_read_max1111(int channel)
        if (machine_is_tosa())
            return 0;
 
-#ifdef CONFIG_CORGI_SSP_DEPRECATED
-       return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1
-                       | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
-#else
        extern int max1111_read_channel(int);
 
        /* max1111 accepts channels from 0-3, however,
         * it is encoded from 0-7 here in the code.
         */
        return max1111_read_channel(channel >> 1);
-#endif
 }
 
 static int get_percentage(int voltage)
@@ -277,21 +269,6 @@ static void sharpsl_battery_thread(struct work_struct *private_)
        dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %ld\n", voltage,
                        sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies);
 
-#ifdef CONFIG_BACKLIGHT_CORGI
-       /* If battery is low. limit backlight intensity to save power. */
-       if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
-           && ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW)
-           || (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) {
-               if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) {
-                       sharpsl_pm.machinfo->backlight_limit(1);
-                       sharpsl_pm.flags |= SHARPSL_BL_LIMIT;
-               }
-       } else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) {
-               sharpsl_pm.machinfo->backlight_limit(0);
-               sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT;
-       }
-#endif
-
        /* Suspend if critical battery level */
        if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
             && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
index 2ed95f369cfc9a8ebb357b713f866e20842f3d86..52c30b01a67139e88fdb71af7dd7371525167bfd 100644 (file)
@@ -339,10 +339,6 @@ ENTRY(pxa_cpu_resume)
        mcr     p15, 0, r1, c8, c7, 0           @ invalidate I & D TLBs
        mcr     p15, 0, r1, c7, c7, 0           @ invalidate I & D caches, BTB
 
-#ifdef CONFIG_XSCALE_CACHE_ERRATA
-       bic     r9, r9, #0x0004                 @ see cpu_xscale_proc_init
-#endif
-
        mcr     p14, 0, r3, c6, c0, 0           @ clock configuration, turbo mode.
        mcr     p15, 0, r4, c15, c1, 0          @ CP access reg
        mcr     p15, 0, r5, c13, c0, 0          @ PID
@@ -368,9 +364,6 @@ sleep_save_sp:
 
        .text
 resume_after_mmu:
-#ifdef CONFIG_XSCALE_CACHE_ERRATA
-       bl      cpu_xscale_proc_init
-#endif
        ldmfd   sp!, {r2, r3}
 #ifndef CONFIG_IWMMXT
        mar     acc0, r2, r3
index 51756c723557e8c25eee690aa57e252a1aa08376..1cd99cb87bb1ff19cd9bc02e72706db89e0318a8 100644 (file)
 #include <linux/gpio_keys.h>
 #include <linux/gpio.h>
 #include <linux/leds.h>
-#include <linux/mtd/physmap.h>
 #include <linux/i2c.h>
 #include <linux/i2c/pca953x.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
 #include <linux/spi/corgi_lcd.h>
+#include <linux/mtd/physmap.h>
 #include <linux/mtd/sharpsl.h>
 #include <linux/input/matrix_keypad.h>
+#include <linux/regulator/machine.h>
 
 #include <asm/setup.h>
 #include <asm/mach-types.h>
 #include <asm/mach/sharpsl_param.h>
 #include <asm/hardware/scoop.h>
 
-
 #include <mach/pxa27x.h>
 #include <mach/pxa27x-udc.h>
 #include <mach/reset.h>
-#include <plat/i2c.h>
 #include <mach/irda.h>
 #include <mach/mmc.h>
 #include <mach/ohci.h>
 #include <mach/pxafb.h>
 #include <mach/pxa2xx_spi.h>
 #include <mach/spitz.h>
+#include <mach/sharpsl_pm.h>
+
+#include <plat/i2c.h>
 
 #include "generic.h"
 #include "devices.h"
-#include "sharpsl.h"
 
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
 static unsigned long spitz_pin_config[] __initdata = {
        /* Chip Selects */
        GPIO78_nCS_2,   /* SCOOP #2 */
@@ -124,10 +128,13 @@ static unsigned long spitz_pin_config[] __initdata = {
        GPIO1_GPIO | WAKEUP_ON_EDGE_FALL,       /* SPITZ_GPIO_RESET */
 };
 
-/*
- * Spitz SCOOP Device #1
- */
-static struct resource spitz_scoop_resources[] = {
+
+/******************************************************************************
+ * Scoop GPIO expander
+ ******************************************************************************/
+#if defined(CONFIG_SHARP_SCOOP) || defined(CONFIG_SHARP_SCOOP_MODULE)
+/* SCOOP Device #1 */
+static struct resource spitz_scoop_1_resources[] = {
        [0] = {
                .start          = 0x10800000,
                .end            = 0x10800fff,
@@ -135,7 +142,7 @@ static struct resource spitz_scoop_resources[] = {
        },
 };
 
-static struct scoop_config spitz_scoop_setup = {
+static struct scoop_config spitz_scoop_1_setup = {
        .io_dir         = SPITZ_SCP_IO_DIR,
        .io_out         = SPITZ_SCP_IO_OUT,
        .suspend_clr    = SPITZ_SCP_SUS_CLR,
@@ -143,20 +150,18 @@ static struct scoop_config spitz_scoop_setup = {
        .gpio_base      = SPITZ_SCP_GPIO_BASE,
 };
 
-struct platform_device spitzscoop_device = {
+struct platform_device spitz_scoop_1_device = {
        .name           = "sharp-scoop",
        .id             = 0,
        .dev            = {
-               .platform_data  = &spitz_scoop_setup,
+               .platform_data  = &spitz_scoop_1_setup,
        },
-       .num_resources  = ARRAY_SIZE(spitz_scoop_resources),
-       .resource       = spitz_scoop_resources,
+       .num_resources  = ARRAY_SIZE(spitz_scoop_1_resources),
+       .resource       = spitz_scoop_1_resources,
 };
 
-/*
- * Spitz SCOOP Device #2
- */
-static struct resource spitz_scoop2_resources[] = {
+/* SCOOP Device #2 */
+static struct resource spitz_scoop_2_resources[] = {
        [0] = {
                .start          = 0x08800040,
                .end            = 0x08800fff,
@@ -164,7 +169,7 @@ static struct resource spitz_scoop2_resources[] = {
        },
 };
 
-static struct scoop_config spitz_scoop2_setup = {
+static struct scoop_config spitz_scoop_2_setup = {
        .io_dir         = SPITZ_SCP2_IO_DIR,
        .io_out         = SPITZ_SCP2_IO_OUT,
        .suspend_clr    = SPITZ_SCP2_SUS_CLR,
@@ -172,82 +177,110 @@ static struct scoop_config spitz_scoop2_setup = {
        .gpio_base      = SPITZ_SCP2_GPIO_BASE,
 };
 
-struct platform_device spitzscoop2_device = {
+struct platform_device spitz_scoop_2_device = {
        .name           = "sharp-scoop",
        .id             = 1,
        .dev            = {
-               .platform_data  = &spitz_scoop2_setup,
+               .platform_data  = &spitz_scoop_2_setup,
        },
-       .num_resources  = ARRAY_SIZE(spitz_scoop2_resources),
-       .resource       = spitz_scoop2_resources,
+       .num_resources  = ARRAY_SIZE(spitz_scoop_2_resources),
+       .resource       = spitz_scoop_2_resources,
 };
 
-#define SPITZ_PWR_SD 0x01
-#define SPITZ_PWR_CF 0x02
+static void __init spitz_scoop_init(void)
+{
+       platform_device_register(&spitz_scoop_1_device);
+
+       /* Akita doesn't have the second SCOOP chip */
+       if (!machine_is_akita())
+               platform_device_register(&spitz_scoop_2_device);
+}
 
 /* Power control is shared with between one of the CF slots and SD */
-static void spitz_card_pwr_ctrl(int device, unsigned short new_cpr)
+static void spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr)
 {
-       unsigned short cpr = read_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR);
+       unsigned short cpr;
+       unsigned long flags;
 
-       if (new_cpr & 0x0007) {
+       if (new_cpr & 0x7) {
                gpio_set_value(SPITZ_GPIO_CF_POWER, 1);
-               if (!(cpr & 0x0002) && !(cpr & 0x0004))
-                       mdelay(5);
-               if (device == SPITZ_PWR_CF)
-                       cpr |= 0x0002;
-               if (device == SPITZ_PWR_SD)
-                       cpr |= 0x0004;
-               write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr);
-       } else {
-               if (device == SPITZ_PWR_CF)
-                       cpr &= ~0x0002;
-               if (device == SPITZ_PWR_SD)
-                       cpr &= ~0x0004;
-               if (!(cpr & 0x0002) && !(cpr & 0x0004)) {
-                       write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, 0x0000);
-                       mdelay(1);
-                       gpio_set_value(SPITZ_GPIO_CF_POWER, 0);
-               } else {
-                       write_scoop_reg(&spitzscoop_device.dev, SCOOP_CPR, cpr | new_cpr);
-               }
+               mdelay(5);
+       }
+
+       local_irq_save(flags);
+
+       cpr = read_scoop_reg(&spitz_scoop_1_device.dev, SCOOP_CPR);
+
+       if (enable & new_cpr)
+               cpr |= new_cpr;
+       else
+               cpr &= ~enable;
+
+       write_scoop_reg(&spitz_scoop_1_device.dev, SCOOP_CPR, cpr);
+
+       local_irq_restore(flags);
+
+       if (!(cpr & 0x7)) {
+               mdelay(1);
+               gpio_set_value(SPITZ_GPIO_CF_POWER, 0);
        }
 }
 
-static void spitz_pcmcia_pwr(struct device *scoop, unsigned short cpr, int nr)
+#else
+static inline void spitz_scoop_init(void) {}
+static inline void spitz_card_pwr_ctrl(uint8_t enable, uint8_t new_cpr) {}
+#endif
+
+/******************************************************************************
+ * PCMCIA
+ ******************************************************************************/
+#if defined(CONFIG_PCMCIA_PXA2XX) || defined(CONFIG_PCMCIA_PXA2XX_MODULE)
+static void spitz_pcmcia_pwr(struct device *scoop, uint16_t cpr, int nr)
 {
        /* Only need to override behaviour for slot 0 */
        if (nr == 0)
-               spitz_card_pwr_ctrl(SPITZ_PWR_CF, cpr);
+               spitz_card_pwr_ctrl(
+                       cpr & (SCOOP_CPR_CF_3V | SCOOP_CPR_CF_XV), cpr);
        else
                write_scoop_reg(scoop, SCOOP_CPR, cpr);
 }
 
 static struct scoop_pcmcia_dev spitz_pcmcia_scoop[] = {
-{
-       .dev        = &spitzscoop_device.dev,
-       .irq        = SPITZ_IRQ_GPIO_CF_IRQ,
-       .cd_irq     = SPITZ_IRQ_GPIO_CF_CD,
-       .cd_irq_str = "PCMCIA0 CD",
-},{
-       .dev        = &spitzscoop2_device.dev,
-       .irq        = SPITZ_IRQ_GPIO_CF2_IRQ,
-       .cd_irq     = -1,
-},
+       {
+               .dev            = &spitz_scoop_1_device.dev,
+               .irq            = SPITZ_IRQ_GPIO_CF_IRQ,
+               .cd_irq         = SPITZ_IRQ_GPIO_CF_CD,
+               .cd_irq_str     = "PCMCIA0 CD",
+       }, {
+               .dev            = &spitz_scoop_2_device.dev,
+               .irq            = SPITZ_IRQ_GPIO_CF2_IRQ,
+               .cd_irq         = -1,
+       },
 };
 
 static struct scoop_pcmcia_config spitz_pcmcia_config = {
-       .devs         = &spitz_pcmcia_scoop[0],
-       .num_devs     = 2,
-       .power_ctrl   = spitz_pcmcia_pwr,
+       .devs           = &spitz_pcmcia_scoop[0],
+       .num_devs       = 2,
+       .power_ctrl     = spitz_pcmcia_pwr,
 };
 
-EXPORT_SYMBOL(spitzscoop_device);
-EXPORT_SYMBOL(spitzscoop2_device);
+static void __init spitz_pcmcia_init(void)
+{
+       /* Akita has only one PCMCIA slot used */
+       if (machine_is_akita())
+               spitz_pcmcia_config.num_devs = 1;
+
+       platform_scoop_config = &spitz_pcmcia_config;
+}
+#else
+static inline void spitz_pcmcia_init(void) {}
+#endif
+
+/******************************************************************************
+ * GPIO keyboard
+ ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE)
 
-/*
- * Spitz Keyboard Device
- */
 #define SPITZ_KEY_CALENDAR     KEY_F1
 #define SPITZ_KEY_ADDRESS      KEY_F2
 #define SPITZ_KEY_FN           KEY_F3
@@ -263,7 +296,7 @@ EXPORT_SYMBOL(spitzscoop2_device);
 #define SPITZ_KEY_OK           KEY_F11
 #define SPITZ_KEY_MENU         KEY_F12
 
-static const uint32_t spitzkbd_keymap[] = {
+static const uint32_t spitz_keymap[] = {
        KEY(0, 0, KEY_LEFTCTRL),
        KEY(0, 1, KEY_1),
        KEY(0, 2, KEY_3),
@@ -330,36 +363,47 @@ static const uint32_t spitzkbd_keymap[] = {
        KEY(6, 8, KEY_RIGHT),
 };
 
-static const struct matrix_keymap_data spitzkbd_keymap_data = {
-       .keymap         = spitzkbd_keymap,
-       .keymap_size    = ARRAY_SIZE(spitzkbd_keymap),
+static const struct matrix_keymap_data spitz_keymap_data = {
+       .keymap         = spitz_keymap,
+       .keymap_size    = ARRAY_SIZE(spitz_keymap),
 };
 
-static const uint32_t spitzkbd_row_gpios[] =
+static const uint32_t spitz_row_gpios[] =
                { 12, 17, 91, 34, 36, 38, 39 };
-static const uint32_t spitzkbd_col_gpios[] =
+static const uint32_t spitz_col_gpios[] =
                { 88, 23, 24, 25, 26, 27, 52, 103, 107, 108, 114 };
 
-static struct matrix_keypad_platform_data spitzkbd_pdata = {
-       .keymap_data            = &spitzkbd_keymap_data,
-       .row_gpios              = spitzkbd_row_gpios,
-       .col_gpios              = spitzkbd_col_gpios,
-       .num_row_gpios          = ARRAY_SIZE(spitzkbd_row_gpios),
-       .num_col_gpios          = ARRAY_SIZE(spitzkbd_col_gpios),
+static struct matrix_keypad_platform_data spitz_mkp_pdata = {
+       .keymap_data            = &spitz_keymap_data,
+       .row_gpios              = spitz_row_gpios,
+       .col_gpios              = spitz_col_gpios,
+       .num_row_gpios          = ARRAY_SIZE(spitz_row_gpios),
+       .num_col_gpios          = ARRAY_SIZE(spitz_col_gpios),
        .col_scan_delay_us      = 10,
        .debounce_ms            = 10,
        .wakeup                 = 1,
 };
 
-static struct platform_device spitzkbd_device = {
+static struct platform_device spitz_mkp_device = {
        .name           = "matrix-keypad",
        .id             = -1,
        .dev            = {
-               .platform_data = &spitzkbd_pdata,
+               .platform_data  = &spitz_mkp_pdata,
        },
 };
 
+static void __init spitz_mkp_init(void)
+{
+       platform_device_register(&spitz_mkp_device);
+}
+#else
+static inline void spitz_mkp_init(void) {}
+#endif
 
+/******************************************************************************
+ * GPIO keys
+ ******************************************************************************/
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 static struct gpio_keys_button spitz_gpio_keys[] = {
        {
                .type   = EV_PWR,
@@ -396,10 +440,18 @@ static struct platform_device spitz_gpio_keys_device = {
        },
 };
 
+static void __init spitz_keys_init(void)
+{
+       platform_device_register(&spitz_gpio_keys_device);
+}
+#else
+static inline void spitz_keys_init(void) {}
+#endif
 
-/*
- * Spitz LEDs
- */
+/******************************************************************************
+ * LEDs
+ ******************************************************************************/
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
 static struct gpio_led spitz_gpio_leds[] = {
        {
                .name                   = "spitz:amber:charge",
@@ -418,20 +470,27 @@ static struct gpio_led_platform_data spitz_gpio_leds_info = {
        .num_leds       = ARRAY_SIZE(spitz_gpio_leds),
 };
 
-static struct platform_device spitzled_device = {
+static struct platform_device spitz_led_device = {
        .name           = "leds-gpio",
        .id             = -1,
        .dev            = {
-               .platform_data = &spitz_gpio_leds_info,
+               .platform_data  = &spitz_gpio_leds_info,
        },
 };
 
-#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE)
-static struct pxa2xx_spi_master spitz_spi_info = {
-       .num_chipselect = 3,
-};
+static void __init spitz_leds_init(void)
+{
+       platform_device_register(&spitz_led_device);
+}
+#else
+static inline void spitz_leds_init(void) {}
+#endif
 
-static void spitz_wait_for_hsync(void)
+/******************************************************************************
+ * SSP Devices
+ ******************************************************************************/
+#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE)
+static void spitz_ads7846_wait_for_hsync(void)
 {
        while (gpio_get_value(SPITZ_GPIO_HSYNC))
                cpu_relax();
@@ -447,7 +506,7 @@ static struct ads7846_platform_data spitz_ads7846_info = {
        .y_plate_ohms           = 486,
        .pressure_max           = 1024,
        .gpio_pendown           = SPITZ_GPIO_TP_INT,
-       .wait_for_sync          = spitz_wait_for_hsync,
+       .wait_for_sync          = spitz_ads7846_wait_for_hsync,
 };
 
 static struct pxa2xx_spi_chip spitz_ads7846_chip = {
@@ -485,72 +544,88 @@ static struct pxa2xx_spi_chip spitz_max1111_chip = {
 
 static struct spi_board_info spitz_spi_devices[] = {
        {
-               .modalias       = "ads7846",
-               .max_speed_hz   = 1200000,
-               .bus_num        = 2,
-               .chip_select    = 0,
-               .platform_data  = &spitz_ads7846_info,
-               .controller_data= &spitz_ads7846_chip,
-               .irq            = gpio_to_irq(SPITZ_GPIO_TP_INT),
+               .modalias               = "ads7846",
+               .max_speed_hz           = 1200000,
+               .bus_num                = 2,
+               .chip_select            = 0,
+               .platform_data          = &spitz_ads7846_info,
+               .controller_data        = &spitz_ads7846_chip,
+               .irq                    = gpio_to_irq(SPITZ_GPIO_TP_INT),
        }, {
-               .modalias       = "corgi-lcd",
-               .max_speed_hz   = 50000,
-               .bus_num        = 2,
-               .chip_select    = 1,
-               .platform_data  = &spitz_lcdcon_info,
-               .controller_data= &spitz_lcdcon_chip,
+               .modalias               = "corgi-lcd",
+               .max_speed_hz           = 50000,
+               .bus_num                = 2,
+               .chip_select            = 1,
+               .platform_data          = &spitz_lcdcon_info,
+               .controller_data        = &spitz_lcdcon_chip,
        }, {
-               .modalias       = "max1111",
-               .max_speed_hz   = 450000,
-               .bus_num        = 2,
-               .chip_select    = 2,
-               .controller_data= &spitz_max1111_chip,
+               .modalias               = "max1111",
+               .max_speed_hz           = 450000,
+               .bus_num                = 2,
+               .chip_select            = 2,
+               .controller_data        = &spitz_max1111_chip,
        },
 };
 
-static void __init spitz_init_spi(void)
+static struct pxa2xx_spi_master spitz_spi_info = {
+       .num_chipselect = 3,
+};
+
+static void __init spitz_spi_init(void)
 {
+       struct corgi_lcd_platform_data *lcd_data = &spitz_lcdcon_info;
+
        if (machine_is_akita()) {
-               spitz_lcdcon_info.gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT;
-               spitz_lcdcon_info.gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON;
+               lcd_data->gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT;
+               lcd_data->gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON;
        }
 
        pxa2xx_set_spi_info(2, &spitz_spi_info);
        spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices));
 }
 #else
-static inline void spitz_init_spi(void) {}
+static inline void spitz_spi_init(void) {}
 #endif
 
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 /*
- * MMC/SD Device
- *
- * The card detect interrupt isn't debounced so we delay it by 250ms
- * to give the card a chance to fully insert/eject.
+ * NOTE: The card detect interrupt isn't debounced so we delay it by 250ms to
+ * give the card a chance to fully insert/eject.
  */
 static void spitz_mci_setpower(struct device *dev, unsigned int vdd)
 {
        struct pxamci_platform_data* p_d = dev->platform_data;
 
-       if (( 1 << vdd) & p_d->ocr_mask)
-               spitz_card_pwr_ctrl(SPITZ_PWR_SD, 0x0004);
+       if ((1 << vdd) & p_d->ocr_mask)
+               spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, SCOOP_CPR_SD_3V);
        else
-               spitz_card_pwr_ctrl(SPITZ_PWR_SD, 0x0000);
+               spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, 0x0);
 }
 
 static struct pxamci_platform_data spitz_mci_platform_data = {
        .detect_delay_ms        = 250,
        .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
-       .setpower               = spitz_mci_setpower,
+       .setpower               = spitz_mci_setpower,
        .gpio_card_detect       = SPITZ_GPIO_nSD_DETECT,
        .gpio_card_ro           = SPITZ_GPIO_nSD_WP,
        .gpio_power             = -1,
 };
 
+static void __init spitz_mmc_init(void)
+{
+       pxa_set_mci_info(&spitz_mci_platform_data);
+}
+#else
+static inline void spitz_mmc_init(void) {}
+#endif
 
-/*
- * USB Host (OHCI)
- */
+/******************************************************************************
+ * USB Host
+ ******************************************************************************/
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
 static int spitz_ohci_init(struct device *dev)
 {
        int err;
@@ -559,9 +634,7 @@ static int spitz_ohci_init(struct device *dev)
        if (err)
                return err;
 
-       /* Only Port 2 is connected
-        * Setup USB Port 2 Output Control Register
-        */
+       /* Only Port 2 is connected, setup USB Port 2 Output Control Register */
        UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
 
        return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
@@ -580,67 +653,95 @@ static struct pxaohci_platform_data spitz_ohci_platform_data = {
        .power_budget   = 150,
 };
 
+static void __init spitz_uhc_init(void)
+{
+       pxa_set_ohci_info(&spitz_ohci_platform_data);
+}
+#else
+static inline void spitz_uhc_init(void) {}
+#endif
 
-/*
- * Irda
- */
-
+/******************************************************************************
+ * IrDA
+ ******************************************************************************/
+#if defined(CONFIG_PXA_FICP) || defined(CONFIG_PXA_FICP_MODULE)
 static struct pxaficp_platform_data spitz_ficp_platform_data = {
-/* .gpio_pwdown is set in spitz_init() and akita_init() accordingly */
        .transceiver_cap        = IR_SIRMODE | IR_OFF,
 };
 
+static void __init spitz_irda_init(void)
+{
+       if (machine_is_akita())
+               spitz_ficp_platform_data.gpio_pwdown = AKITA_GPIO_IR_ON;
+       else
+               spitz_ficp_platform_data.gpio_pwdown = SPITZ_GPIO_IR_ON;
 
-/*
- * Spitz PXA Framebuffer
- */
+       pxa_set_ficp_info(&spitz_ficp_platform_data);
+}
+#else
+static inline void spitz_irda_init(void) {}
+#endif
 
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
 static struct pxafb_mode_info spitz_pxafb_modes[] = {
-{
-       .pixclock       = 19231,
-       .xres           = 480,
-       .yres           = 640,
-       .bpp            = 16,
-       .hsync_len      = 40,
-       .left_margin    = 46,
-       .right_margin   = 125,
-       .vsync_len      = 3,
-       .upper_margin   = 1,
-       .lower_margin   = 0,
-       .sync           = 0,
-},{
-       .pixclock       = 134617,
-       .xres           = 240,
-       .yres           = 320,
-       .bpp            = 16,
-       .hsync_len      = 20,
-       .left_margin    = 20,
-       .right_margin   = 46,
-       .vsync_len      = 2,
-       .upper_margin   = 1,
-       .lower_margin   = 0,
-       .sync           = 0,
-},
+       {
+               .pixclock       = 19231,
+               .xres           = 480,
+               .yres           = 640,
+               .bpp            = 16,
+               .hsync_len      = 40,
+               .left_margin    = 46,
+               .right_margin   = 125,
+               .vsync_len      = 3,
+               .upper_margin   = 1,
+               .lower_margin   = 0,
+               .sync           = 0,
+       }, {
+               .pixclock       = 134617,
+               .xres           = 240,
+               .yres           = 320,
+               .bpp            = 16,
+               .hsync_len      = 20,
+               .left_margin    = 20,
+               .right_margin   = 46,
+               .vsync_len      = 2,
+               .upper_margin   = 1,
+               .lower_margin   = 0,
+               .sync           = 0,
+       },
 };
 
 static struct pxafb_mach_info spitz_pxafb_info = {
-       .modes          = &spitz_pxafb_modes[0],
-       .num_modes      = 2,
+       .modes          = spitz_pxafb_modes,
+       .num_modes      = ARRAY_SIZE(spitz_pxafb_modes),
        .fixed_modes    = 1,
        .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING,
 };
 
-static struct mtd_partition sharpsl_nand_partitions[] = {
+static void __init spitz_lcd_init(void)
+{
+       set_pxa_fb_info(&spitz_pxafb_info);
+}
+#else
+static inline void spitz_lcd_init(void) {}
+#endif
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+#if defined(CONFIG_MTD_NAND_SHARPSL) || defined(CONFIG_MTD_NAND_SHARPSL_MODULE)
+static struct mtd_partition spitz_nand_partitions[] = {
        {
                .name = "System Area",
                .offset = 0,
                .size = 7 * 1024 * 1024,
-       },
-       {
+       }, {
                .name = "Root Filesystem",
                .offset = 7 * 1024 * 1024,
-       },
-       {
+       }, {
                .name = "Home Filesystem",
                .offset = MTDPART_OFS_APPEND,
                .size = MTDPART_SIZ_FULL,
@@ -649,37 +750,72 @@ static struct mtd_partition sharpsl_nand_partitions[] = {
 
 static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
 
-static struct nand_bbt_descr sharpsl_bbt = {
-       .options = 0,
-       .offs = 4,
-       .len = 2,
-       .pattern = scan_ff_pattern
+static struct nand_bbt_descr spitz_nand_bbt = {
+       .options        = 0,
+       .offs           = 4,
+       .len            = 2,
+       .pattern        = scan_ff_pattern
+};
+
+static struct nand_ecclayout akita_oobinfo = {
+       .oobfree        = { {0x08, 0x09} },
+       .eccbytes       = 24,
+       .eccpos         = {
+                       0x05, 0x01, 0x02, 0x03, 0x06, 0x07, 0x15, 0x11,
+                       0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23,
+                       0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37,
+       },
 };
 
-static struct sharpsl_nand_platform_data sharpsl_nand_platform_data = {
-       .badblock_pattern       = &sharpsl_bbt,
-       .partitions             = sharpsl_nand_partitions,
-       .nr_partitions          = ARRAY_SIZE(sharpsl_nand_partitions),
+static struct sharpsl_nand_platform_data spitz_nand_pdata = {
+       .badblock_pattern       = &spitz_nand_bbt,
+       .partitions             = spitz_nand_partitions,
+       .nr_partitions          = ARRAY_SIZE(spitz_nand_partitions),
 };
 
-static struct resource sharpsl_nand_resources[] = {
+static struct resource spitz_nand_resources[] = {
        {
-               .start  = 0x0C000000,
-               .end    = 0x0C000FFF,
+               .start  = PXA_CS3_PHYS,
+               .end    = PXA_CS3_PHYS + SZ_4K - 1,
                .flags  = IORESOURCE_MEM,
        },
 };
 
-static struct platform_device sharpsl_nand_device = {
+static struct platform_device spitz_nand_device = {
        .name           = "sharpsl-nand",
        .id             = -1,
-       .resource       = sharpsl_nand_resources,
-       .num_resources  = ARRAY_SIZE(sharpsl_nand_resources),
-       .dev.platform_data      = &sharpsl_nand_platform_data,
+       .resource       = spitz_nand_resources,
+       .num_resources  = ARRAY_SIZE(spitz_nand_resources),
+       .dev            = {
+               .platform_data  = &spitz_nand_pdata,
+       }
 };
 
+static void __init spitz_nand_init(void)
+{
+       if (machine_is_spitz()) {
+               spitz_nand_partitions[1].size = 5 * 1024 * 1024;
+       } else if (machine_is_akita()) {
+               spitz_nand_partitions[1].size = 58 * 1024 * 1024;
+               spitz_nand_bbt.len = 1;
+               spitz_nand_pdata.ecc_layout = &akita_oobinfo;
+       } else if (machine_is_borzoi()) {
+               spitz_nand_partitions[1].size = 32 * 1024 * 1024;
+               spitz_nand_bbt.len = 1;
+               spitz_nand_pdata.ecc_layout = &akita_oobinfo;
+       }
+
+       platform_device_register(&spitz_nand_device);
+}
+#else
+static inline void spitz_nand_init(void) {}
+#endif
 
-static struct mtd_partition sharpsl_rom_parts[] = {
+/******************************************************************************
+ * NOR Flash
+ ******************************************************************************/
+#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
+static struct mtd_partition spitz_rom_parts[] = {
        {
                .name   ="Boot PROM Filesystem",
                .offset = 0x00140000,
@@ -687,37 +823,105 @@ static struct mtd_partition sharpsl_rom_parts[] = {
        },
 };
 
-static struct physmap_flash_data sharpsl_rom_data = {
+static struct physmap_flash_data spitz_rom_data = {
        .width          = 2,
-       .nr_parts       = ARRAY_SIZE(sharpsl_rom_parts),
-       .parts          = sharpsl_rom_parts,
+       .nr_parts       = ARRAY_SIZE(spitz_rom_parts),
+       .parts          = spitz_rom_parts,
 };
 
-static struct resource sharpsl_rom_resources[] = {
+static struct resource spitz_rom_resources[] = {
        {
-               .start  = 0x00000000,
-               .end    = 0x007fffff,
+               .start  = PXA_CS0_PHYS,
+               .end    = PXA_CS0_PHYS + SZ_8M - 1,
                .flags  = IORESOURCE_MEM,
        },
 };
 
-static struct platform_device sharpsl_rom_device = {
-       .name   = "physmap-flash",
-       .id     = -1,
-       .resource = sharpsl_rom_resources,
-       .num_resources = ARRAY_SIZE(sharpsl_rom_resources),
-       .dev.platform_data = &sharpsl_rom_data,
+static struct platform_device spitz_rom_device = {
+       .name           = "physmap-flash",
+       .id             = -1,
+       .resource       = spitz_rom_resources,
+       .num_resources  = ARRAY_SIZE(spitz_rom_resources),
+       .dev            = {
+               .platform_data  = &spitz_rom_data,
+       },
 };
 
-static struct platform_device *devices[] __initdata = {
-       &spitzscoop_device,
-       &spitzkbd_device,
-       &spitz_gpio_keys_device,
-       &spitzled_device,
-       &sharpsl_nand_device,
-       &sharpsl_rom_device,
+static void __init spitz_nor_init(void)
+{
+       platform_device_register(&spitz_rom_device);
+}
+#else
+static inline void spitz_nor_init(void) {}
+#endif
+
+/******************************************************************************
+ * GPIO expander
+ ******************************************************************************/
+#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
+static struct pca953x_platform_data akita_pca953x_pdata = {
+       .gpio_base              = AKITA_IOEXP_GPIO_BASE,
 };
 
+static struct i2c_board_info spitz_i2c_devs[] = {
+       {
+               .type           = "wm8750",
+               .addr           = 0x1b,
+       }, {
+               .type           = "max7310",
+               .addr           = 0x18,
+               .platform_data  = &akita_pca953x_pdata,
+       },
+};
+
+static struct regulator_consumer_supply isl6271a_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data isl6271a_info[] = {
+       {
+               .constraints = {
+                       .name           = "vcc_core range",
+                       .min_uV         = 850000,
+                       .max_uV         = 1600000,
+                       .always_on      = 1,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+               },
+       .consumer_supplies      = isl6271a_consumers,
+       .num_consumer_supplies  = ARRAY_SIZE(isl6271a_consumers),
+       }
+};
+
+static struct i2c_board_info spitz_pi2c_devs[] = {
+       {
+               .type           = "isl6271a",
+               .addr           = 0x0c,
+               .platform_data  = &isl6271a_info,
+       },
+};
+
+static void __init spitz_i2c_init(void)
+{
+       int size = ARRAY_SIZE(spitz_i2c_devs);
+
+       /* Only Akita has the max7310 chip */
+       if (!machine_is_akita())
+               size--;
+
+       pxa_set_i2c_info(NULL);
+       pxa27x_set_i2c_power_info(NULL);
+       i2c_register_board_info(0, spitz_i2c_devs, size);
+       i2c_register_board_info(1, ARRAY_AND_SIZE(spitz_pi2c_devs));
+}
+#else
+static inline void spitz_i2c_init(void) {}
+#endif
+
+/******************************************************************************
+ * Machine init
+ ******************************************************************************/
 static void spitz_poweroff(void)
 {
        arm_machine_restart('g', NULL);
@@ -726,26 +930,18 @@ static void spitz_poweroff(void)
 static void spitz_restart(char mode, const char *cmd)
 {
        /* Bootloader magic for a reboot */
-       if((MSC0 & 0xffff0000) == 0x7ff00000)
+       if ((MSC0 & 0xffff0000) == 0x7ff00000)
                MSC0 = (MSC0 & 0xffff) | 0x7ee00000;
 
        spitz_poweroff();
 }
 
-static void __init common_init(void)
+static void __init spitz_init(void)
 {
        init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0);
        pm_power_off = spitz_poweroff;
        arm_pm_restart = spitz_restart;
 
-       if (machine_is_spitz()) {
-               sharpsl_nand_partitions[1].size = 5 * 1024 * 1024;
-       } else if (machine_is_akita()) {
-               sharpsl_nand_partitions[1].size = 58 * 1024 * 1024;
-       } else if (machine_is_borzoi()) {
-               sharpsl_nand_partitions[1].size = 32 * 1024 * 1024;
-       }
-
        PMCR = 0x00;
 
        /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
@@ -757,91 +953,22 @@ static void __init common_init(void)
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
 
-       spitz_init_spi();
-
-       platform_add_devices(devices, ARRAY_SIZE(devices));
-       pxa_set_mci_info(&spitz_mci_platform_data);
-       pxa_set_ohci_info(&spitz_ohci_platform_data);
-       pxa_set_ficp_info(&spitz_ficp_platform_data);
-       set_pxa_fb_info(&spitz_pxafb_info);
-       pxa_set_i2c_info(NULL);
+       spitz_spi_init();
+       spitz_scoop_init();
+       spitz_mkp_init();
+       spitz_keys_init();
+       spitz_leds_init();
+       spitz_mmc_init();
+       spitz_pcmcia_init();
+       spitz_irda_init();
+       spitz_uhc_init();
+       spitz_lcd_init();
+       spitz_nor_init();
+       spitz_nand_init();
+       spitz_i2c_init();
 }
 
-#if defined(CONFIG_MACH_AKITA) || defined(CONFIG_MACH_BORZOI)
-static struct nand_bbt_descr sharpsl_akita_bbt = {
-       .options = 0,
-       .offs = 4,
-       .len = 1,
-       .pattern = scan_ff_pattern
-};
-
-static struct nand_ecclayout akita_oobinfo = {
-       .eccbytes = 24,
-       .eccpos = {
-                  0x5, 0x1, 0x2, 0x3, 0x6, 0x7, 0x15, 0x11,
-                  0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23,
-                  0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37},
-       .oobfree = {{0x08, 0x09}}
-};
-#endif
-
-#if defined(CONFIG_MACH_SPITZ) || defined(CONFIG_MACH_BORZOI)
-static void __init spitz_init(void)
-{
-       spitz_ficp_platform_data.gpio_pwdown = SPITZ_GPIO_IR_ON;
-
-#ifdef CONFIG_MACH_BORZOI
-       if (machine_is_borzoi()) {
-               sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt;
-               sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo;
-       }
-#endif
-
-       platform_scoop_config = &spitz_pcmcia_config;
-
-       common_init();
-
-       platform_device_register(&spitzscoop2_device);
-}
-#endif
-
-#ifdef CONFIG_MACH_AKITA
-/*
- * Akita IO Expander
- */
-static struct pca953x_platform_data akita_ioexp = {
-       .gpio_base              = AKITA_IOEXP_GPIO_BASE,
-};
-
-static struct i2c_board_info akita_i2c_board_info[] = {
-       {
-               .type           = "max7310",
-               .addr           = 0x18,
-               .platform_data  = &akita_ioexp,
-       }, {
-               .type           = "wm8750",
-               .addr           = 0x1b,
-       },
-};
-
-static void __init akita_init(void)
-{
-       spitz_ficp_platform_data.gpio_pwdown = AKITA_GPIO_IR_ON;
-
-       sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt;
-       sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo;
-
-       /* We just pretend the second element of the array doesn't exist */
-       spitz_pcmcia_config.num_devs = 1;
-       platform_scoop_config = &spitz_pcmcia_config;
-
-       i2c_register_board_info(0, ARRAY_AND_SIZE(akita_i2c_board_info));
-
-       common_init();
-}
-#endif
-
-static void __init fixup_spitz(struct machine_desc *desc,
+static void __init spitz_fixup(struct machine_desc *desc,
                struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        sharpsl_save_param();
@@ -854,7 +981,7 @@ static void __init fixup_spitz(struct machine_desc *desc,
 MACHINE_START(SPITZ, "SHARP Spitz")
        .phys_io        = 0x40000000,
        .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .fixup          = fixup_spitz,
+       .fixup          = spitz_fixup,
        .map_io         = pxa_map_io,
        .init_irq       = pxa27x_init_irq,
        .init_machine   = spitz_init,
@@ -866,7 +993,7 @@ MACHINE_END
 MACHINE_START(BORZOI, "SHARP Borzoi")
        .phys_io        = 0x40000000,
        .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .fixup          = fixup_spitz,
+       .fixup          = spitz_fixup,
        .map_io         = pxa_map_io,
        .init_irq       = pxa27x_init_irq,
        .init_machine   = spitz_init,
@@ -878,10 +1005,10 @@ MACHINE_END
 MACHINE_START(AKITA, "SHARP Akita")
        .phys_io        = 0x40000000,
        .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
-       .fixup          = fixup_spitz,
+       .fixup          = spitz_fixup,
        .map_io         = pxa_map_io,
        .init_irq       = pxa27x_init_irq,
-       .init_machine   = akita_init,
+       .init_machine   = spitz_init,
        .timer          = &pxa_timer,
 MACHINE_END
 #endif
index 4209ddf6da612e128e6c1ba605993e458dbc351f..7fe74067d85fc7e2aeb1469878f28c8cd73b3456 100644 (file)
 #include <asm/mach-types.h>
 #include <mach/hardware.h>
 
-#include <mach/sharpsl.h>
 #include <mach/spitz.h>
 #include <mach/pxa27x.h>
+#include <mach/sharpsl_pm.h>
 
-#include "sharpsl.h"
 #include "generic.h"
 
 #define SHARPSL_CHARGE_ON_VOLT         0x99  /* 2.9V */
@@ -178,11 +177,11 @@ unsigned long spitzpm_read_devdata(int type)
        case SHARPSL_STATUS_ACIN:
                return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
        case SHARPSL_STATUS_LOCK:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_batlock);
        case SHARPSL_STATUS_CHRGFULL:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_batfull);
        case SHARPSL_STATUS_FATAL:
-               return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
+               return gpio_get_value(sharpsl_pm.machinfo->gpio_fatal);
        case SHARPSL_ACIN_VOLT:
                return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
        case SHARPSL_BATT_TEMP:
@@ -212,8 +211,6 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
        .should_wakeup    = spitz_should_wakeup,
 #if defined(CONFIG_LCD_CORGI)
        .backlight_limit = corgi_lcd_limit_intensity,
-#elif defined(CONFIG_BACKLIGHT_CORGI)
-       .backlight_limit  = corgibl_limit_intensity,
 #endif
        .charge_on_volt   = SHARPSL_CHARGE_ON_VOLT,
        .charge_on_temp   = SHARPSL_CHARGE_ON_TEMP,
index af40d2a12d373ac98d923ab71015e015bdd5b774..a654d1e6b38ad11eb6420667028c8395ab10c1ae 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/i2c/at24.h>
 #include <linux/smc91x.h>
 #include <linux/gpio.h>
+#include <linux/leds.h>
 
 #include <asm/types.h>
 #include <asm/setup.h>
 #define SG2_GPIO_nSD_DETECT    90
 #define SG2_SD_POWER_ENABLE    89
 
-static unsigned long stargate2_pin_config[] __initdata = {
-
-       GPIO15_nCS_1, /* SRAM */
-       /* SMC91x */
-       GPIO80_nCS_4,
-       GPIO40_GPIO, /*cable detect?*/
+static unsigned long sg2_im2_unified_pin_config[] __initdata = {
        /* Device Identification for wakeup*/
        GPIO102_GPIO,
-
-       /* Button */
-       GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH,
-
        /* DA9030 */
        GPIO1_GPIO,
 
-       /* Compact Flash */
-       GPIO79_PSKTSEL,
-       GPIO48_nPOE,
-       GPIO49_nPWE,
-       GPIO50_nPIOR,
-       GPIO51_nPIOW,
-       GPIO85_nPCE_1,
-       GPIO54_nPCE_2,
-       GPIO55_nPREG,
-       GPIO56_nPWAIT,
-       GPIO57_nIOIS16,
-       GPIO120_GPIO, /* Buff ctrl */
-       GPIO108_GPIO, /* Power ctrl */
-       GPIO82_GPIO, /* Reset */
-       GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */
-
        /* MMC */
        GPIO32_MMC_CLK,
        GPIO112_MMC_CMD,
@@ -100,49 +76,44 @@ static unsigned long stargate2_pin_config[] __initdata = {
        GPIO109_MMC_DAT_1,
        GPIO110_MMC_DAT_2,
        GPIO111_MMC_DAT_3,
-       GPIO90_GPIO, /* nSD detect */
-       GPIO89_GPIO, /* SD_POWER_ENABLE */
 
-       /* Bluetooth */
-       GPIO81_GPIO, /* reset */
-
-       /* cc2420 802.15.4 radio */
-       GPIO22_GPIO,            /* CC_RSTN  (out)*/
-       GPIO114_GPIO,           /* CC_FIFO (in) */
-       GPIO116_GPIO,           /* CC_CCA (in) */
-       GPIO0_GPIO,             /* CC_FIFOP (in) */
-       GPIO16_GPIO,            /* CCSFD (in) */
-       GPIO39_GPIO,            /* CSn (out) */
+       /* 802.15.4 radio - driver out of mainline */
+       GPIO22_GPIO,                    /* CC_RSTN */
+       GPIO114_GPIO,                   /* CC_FIFO */
+       GPIO116_GPIO,                   /* CC_CCA */
+       GPIO0_GPIO,                     /* CC_FIFOP */
+       GPIO16_GPIO,                    /* CCSFD */
+       GPIO115_GPIO,                   /* Power enable */
 
        /* I2C */
        GPIO117_I2C_SCL,
        GPIO118_I2C_SDA,
 
        /* SSP 3 - 802.15.4 radio */
-       GPIO39_GPIO, /* chip select */
+       GPIO39_GPIO,                    /* Chip Select */
        GPIO34_SSP3_SCLK,
        GPIO35_SSP3_TXD,
        GPIO41_SSP3_RXD,
 
-       /* SSP 2 */
+       /* SSP 2 to daughter boards */
        GPIO11_SSP2_RXD,
        GPIO38_SSP2_TXD,
        GPIO36_SSP2_SCLK,
        GPIO37_GPIO, /* chip select */
 
-       /* SSP 1 */
-       GPIO26_SSP1_RXD,
-       GPIO25_SSP1_TXD,
+       /* SSP 1 - to daughter boards */
+       GPIO24_GPIO,                    /* Chip Select */
        GPIO23_SSP1_SCLK,
-       GPIO24_GPIO, /* chip select */
+       GPIO25_SSP1_TXD,
+       GPIO26_SSP1_RXD,
 
-       /* BTUART */
+       /* BTUART Basic Connector*/
        GPIO42_BTUART_RXD,
        GPIO43_BTUART_TXD,
        GPIO44_BTUART_CTS,
        GPIO45_BTUART_RTS,
 
-       /* STUART */
+       /* STUART  - IM2 via debug board not sure on SG2*/
        GPIO46_STUART_RXD,
        GPIO47_STUART_TXD,
 
@@ -150,47 +121,17 @@ static unsigned long stargate2_pin_config[] __initdata = {
        GPIO96_GPIO,    /* accelerometer interrupt */
        GPIO99_GPIO,    /* ADC interrupt */
 
-       /* Connector pins specified as gpios */
-       GPIO94_GPIO, /* large basic connector pin 14 */
-       GPIO10_GPIO, /* large basic connector pin 23 */
-
        /* SHT15 */
        GPIO100_GPIO,
        GPIO98_GPIO,
-};
 
-/**
- * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state
- **/
-static int stargate2_reset_bluetooth(void)
-{
-       int err;
-       err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET");
-       if (err) {
-               printk(KERN_ERR "Could not get gpio for bluetooth reset \n");
-               return err;
-       }
-       gpio_direction_output(SG2_BT_RESET, 1);
-       mdelay(5);
-       /* now reset it - 5 msec minimum */
-       gpio_set_value(SG2_BT_RESET, 0);
-       mdelay(10);
-       gpio_set_value(SG2_BT_RESET, 1);
-       gpio_free(SG2_BT_RESET);
-       return 0;
-}
+       /* Basic sensor board */
+       GPIO96_GPIO,    /* accelerometer interrupt */
+       GPIO99_GPIO,    /* ADC interrupt */
 
-static struct led_info stargate2_leds[] = {
-       {
-               .name = "sg2:red",
-               .flags = DA9030_LED_RATE_ON,
-       }, {
-               .name = "sg2:blue",
-               .flags = DA9030_LED_RATE_ON,
-       }, {
-               .name = "sg2:green",
-               .flags = DA9030_LED_RATE_ON,
-       },
+       /* Connector pins specified as gpios */
+       GPIO94_GPIO, /* large basic connector pin 14 */
+       GPIO10_GPIO, /* large basic connector pin 23 */
 };
 
 static struct sht15_platform_data platform_data_sht15 = {
@@ -352,20 +293,184 @@ static struct regulator_init_data stargate2_ldo_init_data[] = {
        },
 };
 
-static struct da903x_subdev_info stargate2_da9030_subdevs[] = {
+static struct mtd_partition stargate2flash_partitions[] = {
        {
-               .name = "da903x-led",
-               .id = DA9030_ID_LED_2,
-               .platform_data = &stargate2_leds[0],
+               .name = "Bootloader",
+               .size = 0x00040000,
+               .offset = 0,
+               .mask_flags = 0,
        }, {
-               .name = "da903x-led",
-               .id = DA9030_ID_LED_3,
-               .platform_data = &stargate2_leds[2],
+               .name = "Kernel",
+               .size = 0x00200000,
+               .offset = 0x00040000,
+               .mask_flags = 0
        }, {
-               .name = "da903x-led",
-               .id = DA9030_ID_LED_4,
-               .platform_data = &stargate2_leds[1],
+               .name = "Filesystem",
+               .size = 0x01DC0000,
+               .offset = 0x00240000,
+               .mask_flags = 0
+       },
+};
+
+static struct resource flash_resources = {
+       .start = PXA_CS0_PHYS,
+       .end = PXA_CS0_PHYS + SZ_32M - 1,
+       .flags = IORESOURCE_MEM,
+};
+
+static struct flash_platform_data stargate2_flash_data = {
+       .map_name = "cfi_probe",
+       .parts = stargate2flash_partitions,
+       .nr_parts = ARRAY_SIZE(stargate2flash_partitions),
+       .name = "PXA27xOnChipROM",
+       .width = 2,
+};
+
+static struct platform_device stargate2_flash_device = {
+       .name = "pxa2xx-flash",
+       .id = 0,
+       .dev = {
+               .platform_data = &stargate2_flash_data,
+       },
+       .resource = &flash_resources,
+       .num_resources = 1,
+};
+
+static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
+       .num_chipselect = 1,
+};
+
+static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
+       .num_chipselect = 1,
+};
+
+static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
+       .num_chipselect = 1,
+};
+
+/* An upcoming kernel change will scrap SFRM usage so these
+ * drivers have been moved to use gpio's via cs_control */
+static struct pxa2xx_spi_chip staccel_chip_info = {
+       .tx_threshold = 8,
+       .rx_threshold = 8,
+       .dma_burst_size = 8,
+       .timeout = 235,
+       .gpio_cs = 24,
+};
+
+static struct pxa2xx_spi_chip cc2420_info = {
+       .tx_threshold = 8,
+       .rx_threshold = 8,
+       .dma_burst_size = 8,
+       .timeout = 235,
+       .gpio_cs = 39,
+};
+
+static struct spi_board_info spi_board_info[] __initdata = {
+       {
+               .modalias = "lis3l02dq",
+               .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
+               .bus_num = 1,
+               .chip_select = 0,
+               .controller_data = &staccel_chip_info,
+               .irq = IRQ_GPIO(96),
+       }, {
+               .modalias = "cc2420",
+               .max_speed_hz = 6500000,
+               .bus_num = 3,
+               .chip_select = 0,
+               .controller_data = &cc2420_info,
+       },
+};
+
+static void sg2_udc_command(int cmd)
+{
+       switch (cmd) {
+       case PXA2XX_UDC_CMD_CONNECT:
+               UP2OCR |=  UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE;
+               break;
+       case PXA2XX_UDC_CMD_DISCONNECT:
+               UP2OCR &= ~(UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE);
+               break;
+       }
+}
+
+static struct i2c_pxa_platform_data i2c_pwr_pdata = {
+       .fast_mode = 1,
+};
+
+static struct i2c_pxa_platform_data i2c_pdata = {
+       .fast_mode = 1,
+};
+
+static void __init imote2_stargate2_init(void)
+{
+
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(sg2_im2_unified_pin_config));
+
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+
+       pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
+       pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
+       pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
+       spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
+
+
+       pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
+       pxa_set_i2c_info(&i2c_pdata);
+}
+
+#ifdef CONFIG_MACH_INTELMOTE2
+/* As the the imote2 doesn't currently have a conventional SD slot
+ * there is no option to hotplug cards, making all this rather simple
+ */
+static int imote2_mci_get_ro(struct device *dev)
+{
+       return 0;
+}
+
+/* Rather simple case as hotplugging not possible */
+static struct pxamci_platform_data imote2_mci_platform_data = {
+       .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
+       .get_ro = imote2_mci_get_ro,
+       .gpio_card_detect = -1,
+       .gpio_card_ro   = -1,
+       .gpio_power = -1,
+};
+
+static struct gpio_led imote2_led_pins[] = {
+       {
+               .name       =  "imote2:red",
+               .gpio       = 103,
+               .active_low = 1,
        }, {
+               .name       = "imote2:green",
+               .gpio       = 104,
+               .active_low = 1,
+       }, {
+               .name       = "imote2:blue",
+               .gpio       = 105,
+               .active_low = 1,
+       },
+};
+
+static struct gpio_led_platform_data imote2_led_data = {
+       .num_leds = ARRAY_SIZE(imote2_led_pins),
+       .leds     = imote2_led_pins,
+};
+
+static struct platform_device imote2_leds = {
+       .name = "leds-gpio",
+       .id   = -1,
+       .dev = {
+               .platform_data = &imote2_led_data,
+       },
+};
+
+static struct da903x_subdev_info imote2_da9030_subdevs[] = {
+       {
                .name = "da903x-regulator",
                .id = DA9030_ID_LDO2,
                .platform_data = &stargate2_ldo_init_data[vcc_bbio],
@@ -428,34 +533,146 @@ static struct da903x_subdev_info stargate2_da9030_subdevs[] = {
        },
 };
 
-static struct da903x_platform_data stargate2_da9030_pdata = {
-       .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs),
-       .subdevs = stargate2_da9030_subdevs,
+static struct da903x_platform_data imote2_da9030_pdata = {
+       .num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
+       .subdevs = imote2_da9030_subdevs,
 };
 
-static struct resource smc91x_resources[] = {
-       [0] = {
-               .name = "smc91x-regs",
-               .start = (PXA_CS4_PHYS + 0x300),
-               .end = (PXA_CS4_PHYS + 0xfffff),
-               .flags = IORESOURCE_MEM,
+static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
+       {
+               .type = "da9030",
+               .addr = 0x49,
+               .platform_data = &imote2_da9030_pdata,
+               .irq = gpio_to_irq(1),
        },
-       [1] = {
-               .start = IRQ_GPIO(40),
-               .end = IRQ_GPIO(40),
-               .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
-       }
-};
-
-static struct smc91x_platdata stargate2_smc91x_info = {
-       .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT
-       | SMC91X_NOWAIT | SMC91X_USE_DMA,
 };
 
-static struct platform_device smc91x_device = {
-       .name = "smc91x",
-       .id = -1,
-       .num_resources = ARRAY_SIZE(smc91x_resources),
+static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
+       { /* UCAM sensor board */
+               .type = "max1239",
+               .addr = 0x35,
+       }, { /* ITS400 Sensor board only */
+               .type = "max1363",
+               .addr = 0x34,
+               /* Through a nand gate - Also beware, on V2 sensor board the
+                * pull up resistors are missing.
+                */
+               .irq = IRQ_GPIO(99),
+       }, { /* ITS400 Sensor board only */
+               .type = "tsl2561",
+               .addr = 0x49,
+               /* Through a nand gate - Also beware, on V2 sensor board the
+                * pull up resistors are missing.
+                */
+               .irq = IRQ_GPIO(99),
+       }, { /* ITS400 Sensor board only */
+               .type = "tmp175",
+               .addr = 0x4A,
+               .irq = IRQ_GPIO(96),
+       }, { /* IMB400 Multimedia board */
+               .type = "wm8940",
+               .addr = 0x1A,
+       },
+};
+
+static unsigned long imote2_pin_config[] __initdata = {
+
+       /* Button */
+       GPIO91_GPIO,
+
+       /* LEDS */
+       GPIO103_GPIO, /* red led */
+       GPIO104_GPIO, /* green led */
+       GPIO105_GPIO, /* blue led */
+};
+
+static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
+       .udc_command            = sg2_udc_command,
+};
+
+static struct platform_device *imote2_devices[] = {
+       &stargate2_flash_device,
+       &imote2_leds,
+       &sht15,
+};
+
+static void __init imote2_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
+
+       imote2_stargate2_init();
+
+       platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
+
+       i2c_register_board_info(0, imote2_i2c_board_info,
+                               ARRAY_SIZE(imote2_i2c_board_info));
+       i2c_register_board_info(1, imote2_pwr_i2c_board_info,
+                               ARRAY_SIZE(imote2_pwr_i2c_board_info));
+
+       pxa_set_mci_info(&imote2_mci_platform_data);
+       pxa_set_udc_info(&imote2_udc_info);
+}
+#endif
+
+#ifdef CONFIG_MACH_STARGATE2
+
+static unsigned long stargate2_pin_config[] __initdata = {
+
+       GPIO15_nCS_1, /* SRAM */
+       /* SMC91x */
+       GPIO80_nCS_4,
+       GPIO40_GPIO, /*cable detect?*/
+
+       /* Button */
+       GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH,
+
+       /* Compact Flash */
+       GPIO79_PSKTSEL,
+       GPIO48_nPOE,
+       GPIO49_nPWE,
+       GPIO50_nPIOR,
+       GPIO51_nPIOW,
+       GPIO85_nPCE_1,
+       GPIO54_nPCE_2,
+       GPIO55_nPREG,
+       GPIO56_nPWAIT,
+       GPIO57_nIOIS16,
+       GPIO120_GPIO, /* Buff ctrl */
+       GPIO108_GPIO, /* Power ctrl */
+       GPIO82_GPIO, /* Reset */
+       GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */
+
+       /* MMC not shared with imote2 */
+       GPIO90_GPIO, /* nSD detect */
+       GPIO89_GPIO, /* SD_POWER_ENABLE */
+
+       /* Bluetooth */
+       GPIO81_GPIO, /* reset */
+};
+
+static struct resource smc91x_resources[] = {
+       [0] = {
+               .name = "smc91x-regs",
+               .start = (PXA_CS4_PHYS + 0x300),
+               .end = (PXA_CS4_PHYS + 0xfffff),
+               .flags = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start = IRQ_GPIO(40),
+               .end = IRQ_GPIO(40),
+               .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
+       }
+};
+
+static struct smc91x_platdata stargate2_smc91x_info = {
+       .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT
+       | SMC91X_NOWAIT | SMC91X_USE_DMA,
+};
+
+static struct platform_device smc91x_device = {
+       .name = "smc91x",
+       .id = -1,
+       .num_resources = ARRAY_SIZE(smc91x_resources),
        .resource = smc91x_resources,
        .dev = {
                .platform_data = &stargate2_smc91x_info,
@@ -463,7 +680,6 @@ static struct platform_device smc91x_device = {
 };
 
 
-
 /*
  * The card detect interrupt isn't debounced so we delay it by 250ms
  * to give the card a chance to fully insert / eject.
@@ -532,48 +748,6 @@ static struct pxamci_platform_data stargate2_mci_platform_data = {
        .exit = stargate2_mci_exit,
 };
 
-static struct mtd_partition stargate2flash_partitions[] = {
-       {
-               .name = "Bootloader",
-               .size = 0x00040000,
-               .offset = 0,
-               .mask_flags = 0,
-       }, {
-               .name = "Kernel",
-               .size = 0x00200000,
-               .offset = 0x00040000,
-               .mask_flags = 0
-       }, {
-               .name = "Filesystem",
-               .size = 0x01DC0000,
-               .offset = 0x00240000,
-               .mask_flags = 0
-       },
-};
-
-static struct resource flash_resources = {
-       .start = PXA_CS0_PHYS,
-       .end = PXA_CS0_PHYS + SZ_32M - 1,
-       .flags = IORESOURCE_MEM,
-};
-
-static struct flash_platform_data stargate2_flash_data = {
-       .map_name = "cfi_probe",
-       .parts = stargate2flash_partitions,
-       .nr_parts = ARRAY_SIZE(stargate2flash_partitions),
-       .name = "PXA27xOnChipROM",
-       .width = 2,
-};
-
-static struct platform_device stargate2_flash_device = {
-       .name = "pxa2xx-flash",
-       .id = 0,
-       .dev = {
-               .platform_data = &stargate2_flash_data,
-       },
-       .resource = &flash_resources,
-       .num_resources = 1,
-};
 
 /*
  * SRAM - The Stargate 2 has 32MB of SRAM.
@@ -616,6 +790,129 @@ static struct at24_platform_data pca9500_eeprom_pdata = {
        .page_size = 4,
 };
 
+/**
+ * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state
+ **/
+static int stargate2_reset_bluetooth(void)
+{
+       int err;
+       err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET");
+       if (err) {
+               printk(KERN_ERR "Could not get gpio for bluetooth reset\n");
+               return err;
+       }
+       gpio_direction_output(SG2_BT_RESET, 1);
+       mdelay(5);
+       /* now reset it - 5 msec minimum */
+       gpio_set_value(SG2_BT_RESET, 0);
+       mdelay(10);
+       gpio_set_value(SG2_BT_RESET, 1);
+       gpio_free(SG2_BT_RESET);
+       return 0;
+}
+
+static struct led_info stargate2_leds[] = {
+       {
+               .name = "sg2:red",
+               .flags = DA9030_LED_RATE_ON,
+       }, {
+               .name = "sg2:blue",
+               .flags = DA9030_LED_RATE_ON,
+       }, {
+               .name = "sg2:green",
+               .flags = DA9030_LED_RATE_ON,
+       },
+};
+
+static struct da903x_subdev_info stargate2_da9030_subdevs[] = {
+       {
+               .name = "da903x-led",
+               .id = DA9030_ID_LED_2,
+               .platform_data = &stargate2_leds[0],
+       }, {
+               .name = "da903x-led",
+               .id = DA9030_ID_LED_3,
+               .platform_data = &stargate2_leds[2],
+       }, {
+               .name = "da903x-led",
+               .id = DA9030_ID_LED_4,
+               .platform_data = &stargate2_leds[1],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO2,
+               .platform_data = &stargate2_ldo_init_data[vcc_bbio],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO3,
+               .platform_data = &stargate2_ldo_init_data[vcc_bb],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO4,
+               .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO5,
+               .platform_data = &stargate2_ldo_init_data[vcc_cc2420],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO6,
+               .platform_data = &stargate2_ldo_init_data[vcc_vref],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO7,
+               .platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO8,
+               .platform_data = &stargate2_ldo_init_data[vcc_mica],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO9,
+               .platform_data = &stargate2_ldo_init_data[vcc_bt],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO10,
+               .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO11,
+               .platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO12,
+               .platform_data = &stargate2_ldo_init_data[vcc_lcd],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO15,
+               .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO17,
+               .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
+       }, {
+               .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
+               .id = DA9030_ID_LDO18,
+               .platform_data = &stargate2_ldo_init_data[vcc_io],
+       }, {
+               .name = "da903x-regulator",
+               .id = DA9030_ID_LDO19,
+               .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
+       },
+};
+
+static struct da903x_platform_data stargate2_da9030_pdata = {
+       .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs),
+       .subdevs = stargate2_da9030_subdevs,
+};
+
+static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = {
+       {
+               .type = "da9030",
+               .addr = 0x49,
+               .platform_data = &stargate2_da9030_pdata,
+               .irq = gpio_to_irq(1),
+       },
+};
 
 static struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
        /* Techically this a pca9500 - but it's compatible with the 8574
@@ -653,74 +950,6 @@ static struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
        },
 };
 
-static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = {
-       {
-               .type = "da9030",
-               .addr = 0x49,
-               .platform_data = &stargate2_da9030_pdata,
-               .irq = gpio_to_irq(1),
-       },
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
-       .num_chipselect = 1,
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
-       .num_chipselect = 1,
-};
-
-static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
-       .num_chipselect = 1,
-};
-
-/* An upcoming kernel change will scrap SFRM usage so these
- * drivers have been moved to use gpio's via cs_control */
-static struct pxa2xx_spi_chip staccel_chip_info = {
-       .tx_threshold = 8,
-       .rx_threshold = 8,
-       .dma_burst_size = 8,
-       .timeout = 235,
-       .gpio_cs = 24,
-};
-
-static struct pxa2xx_spi_chip cc2420_info = {
-       .tx_threshold = 8,
-       .rx_threshold = 8,
-       .dma_burst_size = 8,
-       .timeout = 235,
-       .gpio_cs = 39,
-};
-
-static struct spi_board_info spi_board_info[] __initdata = {
-       {
-               .modalias = "lis3l02dq",
-               .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
-               .bus_num = 1,
-               .chip_select = 0,
-               .controller_data = &staccel_chip_info,
-               .irq = IRQ_GPIO(96),
-       }, {
-               .modalias = "cc2420",
-               .max_speed_hz = 6500000,
-               .bus_num = 3,
-               .chip_select = 0,
-               .controller_data = &cc2420_info,
-       },
-};
-
-static void sg2_udc_command(int cmd)
-{
-       switch (cmd) {
-       case PXA2XX_UDC_CMD_CONNECT:
-               UP2OCR |=  UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE;
-               break;
-       case PXA2XX_UDC_CMD_DISCONNECT:
-               UP2OCR &= ~(UP2OCR_HXOE  | UP2OCR_DPPUE | UP2OCR_DPPUBE);
-               break;
-       }
-}
-
 /* Board doesn't support cable detection - so always lie and say
  * something is there.
  */
@@ -741,14 +970,6 @@ static struct platform_device *stargate2_devices[] = {
        &sht15,
 };
 
-static struct i2c_pxa_platform_data i2c_pwr_pdata = {
-       .fast_mode = 1,
-};
-
-static struct i2c_pxa_platform_data i2c_pdata = {
-       .fast_mode = 1,
-};
-
 static void __init stargate2_init(void)
 {
        /* This is probably a board specific hack as this must be set
@@ -757,22 +978,13 @@ static void __init stargate2_init(void)
 
        pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config));
 
-       pxa_set_ffuart_info(NULL);
-       pxa_set_btuart_info(NULL);
-       pxa_set_stuart_info(NULL);
+       imote2_stargate2_init();
 
        platform_add_devices(ARRAY_AND_SIZE(stargate2_devices));
 
-       pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
-       pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
-       pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
-       spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
-
        i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info));
-       i2c_register_board_info(1,
-                               ARRAY_AND_SIZE(stargate2_pwr_i2c_board_info));
-       pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
-       pxa_set_i2c_info(&i2c_pdata);
+       i2c_register_board_info(1, stargate2_pwr_i2c_board_info,
+                               ARRAY_SIZE(stargate2_pwr_i2c_board_info));
 
        pxa_set_mci_info(&stargate2_mci_platform_data);
 
@@ -780,7 +992,21 @@ static void __init stargate2_init(void)
 
        stargate2_reset_bluetooth();
 }
+#endif
+
+#ifdef CONFIG_MACH_INTELMOTE2
+MACHINE_START(INTELMOTE2, "IMOTE 2")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = imote2_init,
+       .boot_params    = 0xA0000100,
+MACHINE_END
+#endif
 
+#ifdef CONFIG_MACH_STARGATE2
 MACHINE_START(STARGATE2, "Stargate 2")
        .phys_io = 0x40000000,
        .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
@@ -790,3 +1016,4 @@ MACHINE_START(STARGATE2, "Stargate 2")
        .init_machine = stargate2_init,
        .boot_params = 0xA0000100,
 MACHINE_END
+#endif
index 69689112eae7901603447d948d428280531a51e9..0acff172ef228eae96dfdc7e9dec36a2188c2430 100644 (file)
@@ -530,13 +530,9 @@ static void __init trizeps4_init(void)
        i2c_register_board_info(0, trizeps4_i2c_devices,
                                        ARRAY_SIZE(trizeps4_i2c_devices));
 
-#ifdef CONFIG_IDE_PXA_CF
-       /* if boot direct from compact flash dont disable power */
-       trizeps_conxs_bcr = 0x0009;
-#else
        /* this is the reset value */
        trizeps_conxs_bcr = 0x00A0;
-#endif
+
        BCR_writew(trizeps_conxs_bcr);
        board_backlight_power(1);
 }
index 9884fa978f1648262127489ab7ff9e1bb2d539a2..c9b747cedea8fb48a4a9615d52394fa5d2e77fcc 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/dm9000.h>
 #include <linux/ucb1400.h>
 #include <linux/ata_platform.h>
+#include <linux/regulator/max1586.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -37,6 +38,7 @@
 #include <mach/ohci.h>
 #include <mach/pxa27x-udc.h>
 #include <mach/udc.h>
+#include <mach/pata_pxa.h>
 
 #include <plat/i2c.h>
 
@@ -464,7 +466,6 @@ static struct i2c_board_info __initdata vpac270_i2c_devs[] = {
 
 static void __init vpac270_rtc_init(void)
 {
-       pxa_set_i2c_info(NULL);
        i2c_register_board_info(0, ARRAY_AND_SIZE(vpac270_i2c_devs));
 }
 #else
@@ -492,7 +493,55 @@ static struct pxafb_mode_info vpac270_lcd_modes[] = {
        .vsync_len      = 2,
 
        .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-},
+}, {   /* CRT 640x480 */
+       .pixclock       = 35000,
+       .xres           = 640,
+       .yres           = 480,
+       .bpp            = 16,
+       .depth          = 16,
+
+       .left_margin    = 96,
+       .right_margin   = 48,
+       .upper_margin   = 33,
+       .lower_margin   = 10,
+
+       .hsync_len      = 48,
+       .vsync_len      = 1,
+
+       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+}, {   /* CRT 800x600 H=30kHz V=48HZ */
+       .pixclock       = 25000,
+       .xres           = 800,
+       .yres           = 600,
+       .bpp            = 16,
+       .depth          = 16,
+
+       .left_margin    = 50,
+       .right_margin   = 1,
+       .upper_margin   = 21,
+       .lower_margin   = 12,
+
+       .hsync_len      = 8,
+       .vsync_len      = 1,
+
+       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+}, {   /* CRT 1024x768 H=40kHz V=50Hz */
+       .pixclock       = 15000,
+       .xres           = 1024,
+       .yres           = 768,
+       .bpp            = 16,
+       .depth          = 16,
+
+       .left_margin    = 220,
+       .right_margin   = 8,
+       .upper_margin   = 33,
+       .lower_margin   = 2,
+
+       .hsync_len      = 48,
+       .vsync_len      = 1,
+
+       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+}
 };
 
 static struct pxafb_mach_info vpac270_lcd_screen = {
@@ -538,9 +587,10 @@ static inline void vpac270_lcd_init(void) {}
 /******************************************************************************
  * PATA IDE
  ******************************************************************************/
-#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
-static struct pata_platform_info vpac270_pata_pdata = {
-       .ioport_shift   = 1,
+#if defined(CONFIG_PATA_PXA) || defined(CONFIG_PATA_PXA_MODULE)
+static struct pata_pxa_pdata vpac270_pata_pdata = {
+       .reg_shift      = 1,
+       .dma_dreq       = 1,
        .irq_flags      = IRQF_TRIGGER_RISING,
 };
 
@@ -555,7 +605,12 @@ static struct resource vpac270_ide_resources[] = {
               .end     = PXA_CS3_PHYS + 0x15f,
               .flags   = IORESOURCE_MEM
        },
-       [2] = { /* IDE IRQ pin */
+       [2] = { /* DMA Base address */
+              .start   = PXA_CS3_PHYS + 0x20,
+              .end     = PXA_CS3_PHYS + 0x2f,
+              .flags   = IORESOURCE_DMA
+       },
+       [3] = { /* IDE IRQ pin */
               .start   = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
               .end     = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
               .flags   = IORESOURCE_IRQ
@@ -563,11 +618,12 @@ static struct resource vpac270_ide_resources[] = {
 };
 
 static struct platform_device vpac270_ide_device = {
-       .name           = "pata_platform",
+       .name           = "pata_pxa",
        .num_resources  = ARRAY_SIZE(vpac270_ide_resources),
        .resource       = vpac270_ide_resources,
        .dev            = {
                .platform_data  = &vpac270_pata_pdata,
+               .coherent_dma_mask      = 0xffffffff,
        }
 };
 
@@ -579,6 +635,59 @@ static void __init vpac270_ide_init(void)
 static inline void vpac270_ide_init(void) {}
 #endif
 
+/******************************************************************************
+ * Core power regulator
+ ******************************************************************************/
+#if defined(CONFIG_REGULATOR_MAX1586) || \
+    defined(CONFIG_REGULATOR_MAX1586_MODULE)
+static struct regulator_consumer_supply vpac270_max1587a_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data vpac270_max1587a_v3_info = {
+       .constraints = {
+               .name           = "vcc_core range",
+               .min_uV         = 900000,
+               .max_uV         = 1705000,
+               .always_on      = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+       },
+       .consumer_supplies      = vpac270_max1587a_consumers,
+       .num_consumer_supplies  = ARRAY_SIZE(vpac270_max1587a_consumers),
+};
+
+static struct max1586_subdev_data vpac270_max1587a_subdevs[] = {
+       {
+               .name           = "vcc_core",
+               .id             = MAX1586_V3,
+               .platform_data  = &vpac270_max1587a_v3_info,
+       }
+};
+
+static struct max1586_platform_data vpac270_max1587a_info = {
+       .subdevs     = vpac270_max1587a_subdevs,
+       .num_subdevs = ARRAY_SIZE(vpac270_max1587a_subdevs),
+       .v3_gain     = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
+};
+
+static struct i2c_board_info __initdata vpac270_pi2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data  = &vpac270_max1587a_info,
+       },
+};
+
+static void __init vpac270_pmic_init(void)
+{
+       i2c_register_board_info(1, ARRAY_AND_SIZE(vpac270_pi2c_board_info));
+}
+#else
+static inline void vpac270_pmic_init(void) {}
+#endif
+
+
 /******************************************************************************
  * Machine init
  ******************************************************************************/
@@ -589,7 +698,10 @@ static void __init vpac270_init(void)
        pxa_set_ffuart_info(NULL);
        pxa_set_btuart_info(NULL);
        pxa_set_stuart_info(NULL);
+       pxa_set_i2c_info(NULL);
+       pxa27x_set_i2c_power_info(NULL);
 
+       vpac270_pmic_init();
        vpac270_lcd_init();
        vpac270_mmc_init();
        vpac270_nor_init();
index d303c6929d3282803e3b547e9509e7b7aab3b177..f0d02288b4ca3089e754dce9396ff28f23ceb3d4 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/pwm_backlight.h>
+#include <linux/z2_battery.h>
 #include <linux/dma-mapping.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/libertas_spi.h>
@@ -26,6 +27,7 @@
 #include <linux/gpio.h>
 #include <linux/gpio_keys.h>
 #include <linux/delay.h>
+#include <linux/regulator/machine.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -162,7 +164,7 @@ static struct mtd_partition z2_flash_parts[] = {
        }, {
                .name   = "U-Boot Environment",
                .offset = 0x40000,
-               .size   = 0x60000,
+               .size   = 0x20000,
        }, {
                .name   = "Flash",
                .offset = 0x60000,
@@ -451,6 +453,42 @@ static void __init z2_keys_init(void)
 static inline void z2_keys_init(void) {}
 #endif
 
+/******************************************************************************
+ * Battery
+ ******************************************************************************/
+#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
+static struct z2_battery_info batt_chip_info = {
+       .batt_I2C_bus   = 0,
+       .batt_I2C_addr  = 0x55,
+       .batt_I2C_reg   = 2,
+       .charge_gpio    = GPIO0_ZIPITZ2_AC_DETECT,
+       .min_voltage    = 2400000,
+       .max_voltage    = 3700000,
+       .batt_div       = 69,
+       .batt_mult      = 1000000,
+       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LION,
+       .batt_name      = "Z2",
+};
+
+static struct i2c_board_info __initdata z2_i2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("aer915", 0x55),
+               .platform_data  = &batt_chip_info,
+       }, {
+               I2C_BOARD_INFO("wm8750", 0x1b),
+       },
+
+};
+
+static void __init z2_i2c_init(void)
+{
+       pxa_set_i2c_info(NULL);
+       i2c_register_board_info(0, ARRAY_AND_SIZE(z2_i2c_board_info));
+}
+#else
+static inline void z2_i2c_init(void) {}
+#endif
+
 /******************************************************************************
  * SSP Devices - WiFi and LCD control
  ******************************************************************************/
@@ -572,6 +610,75 @@ static void __init z2_spi_init(void)
 static inline void z2_spi_init(void) {}
 #endif
 
+/******************************************************************************
+ * Core power regulator
+ ******************************************************************************/
+#if defined(CONFIG_REGULATOR_TPS65023) || \
+       defined(CONFIG_REGULATOR_TPS65023_MODULE)
+static struct regulator_consumer_supply z2_tps65021_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data z2_tps65021_info[] = {
+       {
+               .constraints = {
+                       .name           = "vcc_core range",
+                       .min_uV         = 800000,
+                       .max_uV         = 1600000,
+                       .always_on      = 1,
+                       .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+               },
+               .consumer_supplies      = z2_tps65021_consumers,
+               .num_consumer_supplies  = ARRAY_SIZE(z2_tps65021_consumers),
+       }, {
+               .constraints = {
+                       .name           = "DCDC2",
+                       .min_uV         = 3300000,
+                       .max_uV         = 3300000,
+                       .always_on      = 1,
+               },
+       }, {
+               .constraints = {
+                       .name           = "DCDC3",
+                       .min_uV         = 1800000,
+                       .max_uV         = 1800000,
+                       .always_on      = 1,
+               },
+       }, {
+               .constraints = {
+                       .name           = "LDO1",
+                       .min_uV         = 1000000,
+                       .max_uV         = 3150000,
+                       .always_on      = 1,
+               },
+       }, {
+               .constraints = {
+                       .name           = "LDO2",
+                       .min_uV         = 1050000,
+                       .max_uV         = 3300000,
+                       .always_on      = 1,
+               },
+       }
+};
+
+static struct i2c_board_info __initdata z2_pi2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("tps65021", 0x48),
+               .platform_data  = &z2_tps65021_info,
+       },
+};
+
+static void __init z2_pmic_init(void)
+{
+       pxa27x_set_i2c_power_info(NULL);
+       i2c_register_board_info(1, ARRAY_AND_SIZE(z2_pi2c_board_info));
+}
+#else
+static inline void z2_pmic_init(void) {}
+#endif
+
 /******************************************************************************
  * Machine init
  ******************************************************************************/
@@ -579,17 +686,20 @@ static void __init z2_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(z2_pin_config));
 
+       pxa_set_ffuart_info(NULL);
+       pxa_set_btuart_info(NULL);
+       pxa_set_stuart_info(NULL);
+
        z2_lcd_init();
        z2_mmc_init();
        z2_mkp_init();
-
-       pxa_set_i2c_info(NULL);
-
+       z2_i2c_init();
        z2_spi_init();
        z2_nor_init();
        z2_pwm_init();
        z2_leds_init();
        z2_keys_init();
+       z2_pmic_init();
 }
 
 MACHINE_START(ZIPIT2, "Zipit Z2")
index 8c8845b5ae5be6af8e5cb20c71e0af61d01e6595..d18f21abef80f51275922fc2ec9f5975720edd8b 100644 (file)
@@ -77,7 +77,7 @@
  */
 #ifdef CONFIG_SA1111
 #define NR_IRQS                        (IRQ_BOARD_END + 55)
-#elif defined(CONFIG_SHARPSL_LOCOMO)
+#elif defined(CONFIG_SHARP_LOCOMO)
 #define NR_IRQS                        (IRQ_BOARD_START + 4)
 #else
 #define NR_IRQS                        (IRQ_BOARD_START)
index a17cc0c6a6b0117f1a590f3d773bf10c69e2581a..4aacdd12c9ccb276d3c4b1809317ee7f104bf0ea 100644 (file)
@@ -4,7 +4,6 @@
 
 obj-y  := dma.o
 
-obj-$(CONFIG_ARCH_PXA)         += pmu.o
 obj-$(CONFIG_GENERIC_GPIO)     += gpio.o
 obj-$(CONFIG_PXA3xx)           += mfp.o
 obj-$(CONFIG_ARCH_MMP)         += mfp.o
diff --git a/arch/arm/plat-pxa/pmu.c b/arch/arm/plat-pxa/pmu.c
deleted file mode 100644 (file)
index 267ceb6..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * PMU IRQ registration for the PXA xscale PMU families.
- * Copyright (C) 2010 Will Deacon, ARM Ltd.
- *
- * 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/platform_device.h>
-#include <asm/pmu.h>
-#include <mach/irqs.h>
-
-static struct resource pmu_resource = {
-       .start  = IRQ_PMU,
-       .end    = IRQ_PMU,
-       .flags  = IORESOURCE_IRQ,
-};
-
-static struct platform_device pmu_device = {
-       .name           = "arm-pmu",
-       .id             = ARM_PMU_DEVICE_CPU,
-       .resource       = &pmu_resource,
-       .num_resources  = 1,
-};
-
-static int __init pxa_pmu_init(void)
-{
-       platform_device_register(&pmu_device);
-       return 0;
-}
-arch_initcall(pxa_pmu_init);
index aa85a98d3a4ff7da59a23d95fb7e361d4bcfa7b3..25e030f9a3e616ae121e38074a96e640855b1574 100644 (file)
@@ -642,6 +642,17 @@ config PATA_VIA
 
          If unsure, say N.
 
+config PATA_PXA
+       tristate "PXA DMA-capable PATA support"
+       depends on ARCH_PXA
+       help
+         This option enables support for harddrive attached to PXA CPU's bus.
+
+         NOTE: This driver utilizes PXA DMA controller, in case your hardware
+               is not capable of doing MWDMA, use pata_platform instead.
+
+         If unsure, say N.
+
 config PATA_WINBOND
        tristate "Winbond SL82C105 PATA support"
        depends on PCI
index 7ef89d73df63d21323e4e47786e33ed51039ca5b..e87d644b8ed27504178fd004e7ccf1d79238f1b0 100644 (file)
@@ -89,6 +89,8 @@ obj-$(CONFIG_PATA_RB532)      += pata_rb532_cf.o
 obj-$(CONFIG_PATA_RZ1000)      += pata_rz1000.o
 obj-$(CONFIG_PATA_WINBOND_VLB) += pata_winbond.o
 
+obj-$(CONFIG_PATA_PXA)         += pata_pxa.o
+
 # Should be last but two libata driver
 obj-$(CONFIG_PATA_ACPI)                += pata_acpi.o
 # Should be last but one libata driver
diff --git a/drivers/ata/pata_pxa.c b/drivers/ata/pata_pxa.c
new file mode 100644 (file)
index 0000000..1898c6e
--- /dev/null
@@ -0,0 +1,411 @@
+/*
+ * Generic PXA PATA driver
+ *
+ * Copyright (C) 2010 Marek Vasut <marek.vasut@gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2, or (at your option)
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/blkdev.h>
+#include <linux/ata.h>
+#include <linux/libata.h>
+#include <linux/platform_device.h>
+#include <linux/gpio.h>
+#include <linux/slab.h>
+#include <linux/completion.h>
+
+#include <scsi/scsi_host.h>
+
+#include <mach/pxa2xx-regs.h>
+#include <mach/pata_pxa.h>
+#include <mach/dma.h>
+
+#define DRV_NAME       "pata_pxa"
+#define DRV_VERSION    "0.1"
+
+struct pata_pxa_data {
+       uint32_t                dma_channel;
+       struct pxa_dma_desc     *dma_desc;
+       dma_addr_t              dma_desc_addr;
+       uint32_t                dma_desc_id;
+
+       /* DMA IO physical address */
+       uint32_t                dma_io_addr;
+       /* PXA DREQ<0:2> pin selector */
+       uint32_t                dma_dreq;
+       /* DMA DCSR register value */
+       uint32_t                dma_dcsr;
+
+       struct completion       dma_done;
+};
+
+/*
+ * Setup the DMA descriptors. The size is transfer capped at 4k per descriptor,
+ * if the transfer is longer, it is split into multiple chained descriptors.
+ */
+static void pxa_load_dmac(struct scatterlist *sg, struct ata_queued_cmd *qc)
+{
+       struct pata_pxa_data *pd = qc->ap->private_data;
+
+       uint32_t cpu_len, seg_len;
+       dma_addr_t cpu_addr;
+
+       cpu_addr = sg_dma_address(sg);
+       cpu_len = sg_dma_len(sg);
+
+       do {
+               seg_len = (cpu_len > 0x1000) ? 0x1000 : cpu_len;
+
+               pd->dma_desc[pd->dma_desc_id].ddadr = pd->dma_desc_addr +
+                       ((pd->dma_desc_id + 1) * sizeof(struct pxa_dma_desc));
+
+               pd->dma_desc[pd->dma_desc_id].dcmd = DCMD_BURST32 |
+                                       DCMD_WIDTH2 | (DCMD_LENGTH & seg_len);
+
+               if (qc->tf.flags & ATA_TFLAG_WRITE) {
+                       pd->dma_desc[pd->dma_desc_id].dsadr = cpu_addr;
+                       pd->dma_desc[pd->dma_desc_id].dtadr = pd->dma_io_addr;
+                       pd->dma_desc[pd->dma_desc_id].dcmd |= DCMD_INCSRCADDR |
+                                               DCMD_FLOWTRG;
+               } else {
+                       pd->dma_desc[pd->dma_desc_id].dsadr = pd->dma_io_addr;
+                       pd->dma_desc[pd->dma_desc_id].dtadr = cpu_addr;
+                       pd->dma_desc[pd->dma_desc_id].dcmd |= DCMD_INCTRGADDR |
+                                               DCMD_FLOWSRC;
+               }
+
+               cpu_len -= seg_len;
+               cpu_addr += seg_len;
+               pd->dma_desc_id++;
+
+       } while (cpu_len);
+
+       /* Should not happen */
+       if (seg_len & 0x1f)
+               DALGN |= (1 << pd->dma_dreq);
+}
+
+/*
+ * Prepare taskfile for submission.
+ */
+static void pxa_qc_prep(struct ata_queued_cmd *qc)
+{
+       struct pata_pxa_data *pd = qc->ap->private_data;
+       int si = 0;
+       struct scatterlist *sg;
+
+       if (!(qc->flags & ATA_QCFLAG_DMAMAP))
+               return;
+
+       pd->dma_desc_id = 0;
+
+       DCSR(pd->dma_channel) = 0;
+       DALGN &= ~(1 << pd->dma_dreq);
+
+       for_each_sg(qc->sg, sg, qc->n_elem, si)
+               pxa_load_dmac(sg, qc);
+
+       pd->dma_desc[pd->dma_desc_id - 1].ddadr = DDADR_STOP;
+
+       /* Fire IRQ only at the end of last block */
+       pd->dma_desc[pd->dma_desc_id - 1].dcmd |= DCMD_ENDIRQEN;
+
+       DDADR(pd->dma_channel) = pd->dma_desc_addr;
+       DRCMR(pd->dma_dreq) = DRCMR_MAPVLD | pd->dma_channel;
+
+}
+
+/*
+ * Configure the DMA controller, load the DMA descriptors, but don't start the
+ * DMA controller yet. Only issue the ATA command.
+ */
+static void pxa_bmdma_setup(struct ata_queued_cmd *qc)
+{
+       qc->ap->ops->sff_exec_command(qc->ap, &qc->tf);
+}
+
+/*
+ * Execute the DMA transfer.
+ */
+static void pxa_bmdma_start(struct ata_queued_cmd *qc)
+{
+       struct pata_pxa_data *pd = qc->ap->private_data;
+       init_completion(&pd->dma_done);
+       DCSR(pd->dma_channel) = DCSR_RUN;
+}
+
+/*
+ * Wait until the DMA transfer completes, then stop the DMA controller.
+ */
+static void pxa_bmdma_stop(struct ata_queued_cmd *qc)
+{
+       struct pata_pxa_data *pd = qc->ap->private_data;
+
+       if ((DCSR(pd->dma_channel) & DCSR_RUN) &&
+               wait_for_completion_timeout(&pd->dma_done, HZ))
+               dev_err(qc->ap->dev, "Timeout waiting for DMA completion!");
+
+       DCSR(pd->dma_channel) = 0;
+}
+
+/*
+ * Read DMA status. The bmdma_stop() will take care of properly finishing the
+ * DMA transfer so we always have DMA-complete interrupt here.
+ */
+static unsigned char pxa_bmdma_status(struct ata_port *ap)
+{
+       struct pata_pxa_data *pd = ap->private_data;
+       unsigned char ret = ATA_DMA_INTR;
+
+       if (pd->dma_dcsr & DCSR_BUSERR)
+               ret |= ATA_DMA_ERR;
+
+       return ret;
+}
+
+/*
+ * No IRQ register present so we do nothing.
+ */
+static void pxa_irq_clear(struct ata_port *ap)
+{
+}
+
+/*
+ * Check for ATAPI DMA. ATAPI DMA is unsupported by this driver. It's still
+ * unclear why ATAPI has DMA issues.
+ */
+static int pxa_check_atapi_dma(struct ata_queued_cmd *qc)
+{
+       return -EOPNOTSUPP;
+}
+
+static struct scsi_host_template pxa_ata_sht = {
+       ATA_BMDMA_SHT(DRV_NAME),
+};
+
+static struct ata_port_operations pxa_ata_port_ops = {
+       .inherits               = &ata_bmdma_port_ops,
+       .cable_detect           = ata_cable_40wire,
+
+       .bmdma_setup            = pxa_bmdma_setup,
+       .bmdma_start            = pxa_bmdma_start,
+       .bmdma_stop             = pxa_bmdma_stop,
+       .bmdma_status           = pxa_bmdma_status,
+
+       .check_atapi_dma        = pxa_check_atapi_dma,
+
+       .sff_irq_clear          = pxa_irq_clear,
+
+       .qc_prep                = pxa_qc_prep,
+};
+
+/*
+ * DMA interrupt handler.
+ */
+static void pxa_ata_dma_irq(int dma, void *port)
+{
+       struct ata_port *ap = port;
+       struct pata_pxa_data *pd = ap->private_data;
+
+       pd->dma_dcsr = DCSR(dma);
+       DCSR(dma) = pd->dma_dcsr;
+
+       if (pd->dma_dcsr & DCSR_STOPSTATE)
+               complete(&pd->dma_done);
+}
+
+static int __devinit pxa_ata_probe(struct platform_device *pdev)
+{
+       struct ata_host *host;
+       struct ata_port *ap;
+       struct pata_pxa_data *data;
+       struct resource *cmd_res;
+       struct resource *ctl_res;
+       struct resource *dma_res;
+       struct resource *irq_res;
+       struct pata_pxa_pdata *pdata = pdev->dev.platform_data;
+       int ret = 0;
+
+       /*
+        * Resource validation, three resources are needed:
+        *  - CMD port base address
+        *  - CTL port base address
+        *  - DMA port base address
+        *  - IRQ pin
+        */
+       if (pdev->num_resources != 4) {
+               dev_err(&pdev->dev, "invalid number of resources\n");
+               return -EINVAL;
+       }
+
+       /*
+        * CMD port base address
+        */
+       cmd_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (unlikely(cmd_res == NULL))
+               return -EINVAL;
+
+       /*
+        * CTL port base address
+        */
+       ctl_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       if (unlikely(ctl_res == NULL))
+               return -EINVAL;
+
+       /*
+        * DMA port base address
+        */
+       dma_res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+       if (unlikely(dma_res == NULL))
+               return -EINVAL;
+
+       /*
+        * IRQ pin
+        */
+       irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+       if (unlikely(irq_res == NULL))
+               return -EINVAL;
+
+       /*
+        * Allocate the host
+        */
+       host = ata_host_alloc(&pdev->dev, 1);
+       if (!host)
+               return -ENOMEM;
+
+       ap              = host->ports[0];
+       ap->ops         = &pxa_ata_port_ops;
+       ap->pio_mask    = ATA_PIO4;
+       ap->mwdma_mask  = ATA_MWDMA2;
+       ap->flags       = ATA_FLAG_MMIO;
+
+       ap->ioaddr.cmd_addr     = devm_ioremap(&pdev->dev, cmd_res->start,
+                                               resource_size(cmd_res));
+       ap->ioaddr.ctl_addr     = devm_ioremap(&pdev->dev, ctl_res->start,
+                                               resource_size(ctl_res));
+       ap->ioaddr.bmdma_addr   = devm_ioremap(&pdev->dev, dma_res->start,
+                                               resource_size(dma_res));
+
+       /*
+        * Adjust register offsets
+        */
+       ap->ioaddr.altstatus_addr = ap->ioaddr.ctl_addr;
+       ap->ioaddr.data_addr    = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_DATA << pdata->reg_shift);
+       ap->ioaddr.error_addr   = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_ERR << pdata->reg_shift);
+       ap->ioaddr.feature_addr = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_FEATURE << pdata->reg_shift);
+       ap->ioaddr.nsect_addr   = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_NSECT << pdata->reg_shift);
+       ap->ioaddr.lbal_addr    = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_LBAL << pdata->reg_shift);
+       ap->ioaddr.lbam_addr    = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_LBAM << pdata->reg_shift);
+       ap->ioaddr.lbah_addr    = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_LBAH << pdata->reg_shift);
+       ap->ioaddr.device_addr  = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_DEVICE << pdata->reg_shift);
+       ap->ioaddr.status_addr  = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_STATUS << pdata->reg_shift);
+       ap->ioaddr.command_addr = ap->ioaddr.cmd_addr +
+                                       (ATA_REG_CMD << pdata->reg_shift);
+
+       /*
+        * Allocate and load driver's internal data structure
+        */
+       data = devm_kzalloc(&pdev->dev, sizeof(struct pata_pxa_data),
+                                                               GFP_KERNEL);
+       if (!data)
+               return -ENOMEM;
+
+       ap->private_data = data;
+       data->dma_dreq = pdata->dma_dreq;
+       data->dma_io_addr = dma_res->start;
+
+       /*
+        * Allocate space for the DMA descriptors
+        */
+       data->dma_desc = dmam_alloc_coherent(&pdev->dev, PAGE_SIZE,
+                                       &data->dma_desc_addr, GFP_KERNEL);
+       if (!data->dma_desc)
+               return -EINVAL;
+
+       /*
+        * Request the DMA channel
+        */
+       data->dma_channel = pxa_request_dma(DRV_NAME, DMA_PRIO_LOW,
+                                               pxa_ata_dma_irq, ap);
+       if (data->dma_channel < 0)
+               return -EBUSY;
+
+       /*
+        * Stop and clear the DMA channel
+        */
+       DCSR(data->dma_channel) = 0;
+
+       /*
+        * Activate the ATA host
+        */
+       ret = ata_host_activate(host, irq_res->start, ata_sff_interrupt,
+                               pdata->irq_flags, &pxa_ata_sht);
+       if (ret)
+               pxa_free_dma(data->dma_channel);
+
+       return ret;
+}
+
+static int __devexit pxa_ata_remove(struct platform_device *pdev)
+{
+       struct ata_host *host = dev_get_drvdata(&pdev->dev);
+       struct pata_pxa_data *data = host->ports[0]->private_data;
+
+       pxa_free_dma(data->dma_channel);
+
+       ata_host_detach(host);
+
+       return 0;
+}
+
+static struct platform_driver pxa_ata_driver = {
+       .probe          = pxa_ata_probe,
+       .remove         = __devexit_p(pxa_ata_remove),
+       .driver         = {
+               .name           = DRV_NAME,
+               .owner          = THIS_MODULE,
+       },
+};
+
+static int __init pxa_ata_init(void)
+{
+       return platform_driver_register(&pxa_ata_driver);
+}
+
+static void __exit pxa_ata_exit(void)
+{
+       platform_driver_unregister(&pxa_ata_driver);
+}
+
+module_init(pxa_ata_init);
+module_exit(pxa_ata_exit);
+
+MODULE_AUTHOR("Marek Vasut <marek.vasut@gmail.com>");
+MODULE_DESCRIPTION("DMA-capable driver for PATA on PXA CPU");
+MODULE_LICENSE("GPL");
+MODULE_VERSION(DRV_VERSION);
+MODULE_ALIAS("platform:" DRV_NAME);
index c988514eb5512fa047b6b2431f0a2b6280149510..c80a7a6e76980a67677d07bc7bd4f59f9e3635be 100644 (file)
@@ -215,7 +215,7 @@ config PCMCIA_PXA2XX
        depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \
                    || MACH_ARMCORE || ARCH_PXA_PALM || TRIZEPS_PCMCIA \
                    || ARCOM_PCMCIA || ARCH_PXA_ESERIES || MACH_STARGATE2 \
-                   || MACH_VPAC270)
+                   || MACH_VPAC270 || MACH_BALLOON3)
        select PCMCIA_SOC_COMMON
        help
          Say Y here to include support for the PXA2xx PCMCIA controller
index d006e8beab9c5eb60a8cbd580f720c42aa59ab4a..6a607732552706fb7778211a53b863932a810687 100644 (file)
@@ -70,6 +70,7 @@ pxa2xx-obj-$(CONFIG_MACH_PALMLD)              += pxa2xx_palmld.o
 pxa2xx-obj-$(CONFIG_MACH_E740)                 += pxa2xx_e740.o
 pxa2xx-obj-$(CONFIG_MACH_STARGATE2)            += pxa2xx_stargate2.o
 pxa2xx-obj-$(CONFIG_MACH_VPAC270)              += pxa2xx_vpac270.o
+pxa2xx-obj-$(CONFIG_MACH_BALLOON3)             += pxa2xx_balloon3.o
 
 obj-$(CONFIG_PCMCIA_PXA2XX)                    += pxa2xx_base.o $(pxa2xx-obj-y)
 
diff --git a/drivers/pcmcia/pxa2xx_balloon3.c b/drivers/pcmcia/pxa2xx_balloon3.c
new file mode 100644 (file)
index 0000000..dbbdd00
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * linux/drivers/pcmcia/pxa2xx_balloon3.c
+ *
+ * Balloon3 PCMCIA specific routines.
+ *
+ *  Author:    Nick Bane
+ *  Created:   June, 2006
+ *  Copyright: Toby Churchill Ltd
+ *  Derived from pxa2xx_mainstone.c, by Nico Pitre
+ *
+ * Various modification by Marek Vasut <marek.vasut@gmail.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/module.h>
+#include <linux/gpio.h>
+#include <linux/errno.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <linux/irq.h>
+#include <linux/io.h>
+
+#include <mach/balloon3.h>
+
+#include "soc_common.h"
+
+/*
+ * These are a list of interrupt sources that provokes a polled
+ * check of status
+ */
+static struct pcmcia_irqs irqs[] = {
+       { 0, BALLOON3_S0_CD_IRQ, "PCMCIA0 CD" },
+       { 0, BALLOON3_BP_NSTSCHG_IRQ, "PCMCIA0 STSCHG" },
+};
+
+static int balloon3_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
+{
+       uint16_t ver;
+       int ret;
+       static void __iomem *fpga_ver;
+
+       ver = __raw_readw(BALLOON3_FPGA_VER);
+       if (ver > 0x0201)
+               pr_warn("The FPGA code, version 0x%04x, is newer than rel-0.3. "
+                       "PCMCIA/CF support might be broken in this version!",
+                       ver);
+
+       skt->socket.pci_irq = BALLOON3_BP_CF_NRDY_IRQ;
+       return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+}
+
+static void balloon3_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
+{
+       soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+}
+
+static unsigned long balloon3_pcmcia_status[2] = {
+       BALLOON3_CF_nSTSCHG_BVD1,
+       BALLOON3_CF_nSTSCHG_BVD1
+};
+
+static void balloon3_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
+                                   struct pcmcia_state *state)
+{
+       uint16_t status;
+       int flip;
+
+       /* This actually reads the STATUS register */
+       status = __raw_readw(BALLOON3_CF_STATUS_REG);
+       flip = (status ^ balloon3_pcmcia_status[skt->nr])
+               & BALLOON3_CF_nSTSCHG_BVD1;
+       /*
+        * Workaround for STSCHG which can't be deasserted:
+        * We therefore disable/enable corresponding IRQs
+        * as needed to avoid IRQ locks.
+        */
+       if (flip) {
+               balloon3_pcmcia_status[skt->nr] = status;
+               if (status & BALLOON3_CF_nSTSCHG_BVD1)
+                       enable_irq(BALLOON3_BP_NSTSCHG_IRQ);
+               else
+                       disable_irq(BALLOON3_BP_NSTSCHG_IRQ);
+       }
+
+       state->detect   = !gpio_get_value(BALLOON3_GPIO_S0_CD);
+       state->ready    = !!(status & BALLOON3_CF_nIRQ);
+       state->bvd1     = !!(status & BALLOON3_CF_nSTSCHG_BVD1);
+       state->bvd2     = 0;    /* not available */
+       state->vs_3v    = 1;    /* Always true its a CF card */
+       state->vs_Xv    = 0;    /* not available */
+       state->wrprot   = 0;    /* not available */
+}
+
+static int balloon3_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
+                                      const socket_state_t *state)
+{
+       __raw_writew((state->flags & SS_RESET) ? BALLOON3_CF_RESET : 0,
+                       BALLOON3_CF_CONTROL_REG);
+       return 0;
+}
+
+static void balloon3_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
+{
+}
+
+static void balloon3_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
+{
+}
+
+static struct pcmcia_low_level balloon3_pcmcia_ops = {
+       .owner                  = THIS_MODULE,
+       .hw_init                = balloon3_pcmcia_hw_init,
+       .hw_shutdown            = balloon3_pcmcia_hw_shutdown,
+       .socket_state           = balloon3_pcmcia_socket_state,
+       .configure_socket       = balloon3_pcmcia_configure_socket,
+       .socket_init            = balloon3_pcmcia_socket_init,
+       .socket_suspend         = balloon3_pcmcia_socket_suspend,
+       .first                  = 0,
+       .nr                     = 1,
+};
+
+static struct platform_device *balloon3_pcmcia_device;
+
+static int __init balloon3_pcmcia_init(void)
+{
+       int ret;
+
+       balloon3_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
+       if (!balloon3_pcmcia_device)
+               return -ENOMEM;
+
+       ret = platform_device_add_data(balloon3_pcmcia_device,
+                       &balloon3_pcmcia_ops, sizeof(balloon3_pcmcia_ops));
+
+       if (!ret)
+               ret = platform_device_add(balloon3_pcmcia_device);
+
+       if (ret)
+               platform_device_put(balloon3_pcmcia_device);
+
+       return ret;
+}
+
+static void __exit balloon3_pcmcia_exit(void)
+{
+       platform_device_unregister(balloon3_pcmcia_device);
+}
+
+module_init(balloon3_pcmcia_init);
+module_exit(balloon3_pcmcia_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Nick Bane <nick@cecomputing.co.uk>");
+MODULE_ALIAS("platform:pxa2xx-pcmcia");
+MODULE_DESCRIPTION("Balloon3 board CF/PCMCIA driver");
index 4e8afce0c81805cbca50d2bd0ffdfd249fbeeab2..5071d85ec12df66438a7b9a41b337f59e333ff50 100644 (file)
@@ -29,7 +29,6 @@ static DEFINE_MUTEX(bat_lock);
 static struct work_struct bat_work;
 static struct mutex work_lock;
 static int bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
-static struct wm97xx_batt_info *gpdata;
 static enum power_supply_property *prop;
 
 static unsigned long wm97xx_read_bat(struct power_supply *bat_ps)
@@ -172,12 +171,6 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)
        struct wm97xx_pdata *wmdata = dev->dev.platform_data;
        struct wm97xx_batt_pdata *pdata;
 
-       if (gpdata) {
-               dev_err(&dev->dev, "Do not pass platform_data through "
-                       "wm97xx_bat_set_pdata!\n");
-               return -EINVAL;
-       }
-
        if (!wmdata) {
                dev_err(&dev->dev, "No platform data supplied\n");
                return -EINVAL;
@@ -308,15 +301,6 @@ static void __exit wm97xx_bat_exit(void)
        platform_driver_unregister(&wm97xx_bat_driver);
 }
 
-/* The interface is deprecated, as well as linux/wm97xx_batt.h */
-void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data);
-
-void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data)
-{
-       gpdata = data;
-}
-EXPORT_SYMBOL_GPL(wm97xx_bat_set_pdata);
-
 module_init(wm97xx_bat_init);
 module_exit(wm97xx_bat_exit);
 
diff --git a/include/linux/wm97xx_batt.h b/include/linux/wm97xx_batt.h
deleted file mode 100644 (file)
index a1d6419..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _LINUX_WM97XX_BAT_H
-#define _LINUX_WM97XX_BAT_H
-
-#include <linux/wm97xx.h>
-
-#warning This file will be removed soon, use wm97xx.h instead!
-
-#define wm97xx_batt_info wm97xx_batt_pdata
-
-#ifdef CONFIG_BATTERY_WM97XX
-void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data);
-#else
-static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {}
-#endif
-
-#endif