[ARM] 5162/1: Common code for the Motorola EZX GSM phones
authorStefan Schmidt <stefan@datenfreihafen.org>
Wed, 9 Jul 2008 07:08:17 +0000 (08:08 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 10 Jul 2008 12:44:55 +0000 (13:44 +0100)
Common code for the different EZX GSM phones. Functions to control framebuffer,
backlight power, OHCI and UART init.

Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
Signed-off-by: Daniel Ribeiro <drwyrm@gmail.com>
Acked-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/ezx.c [new file with mode: 0644]

index faa2c3f6c1affe7f4c3c6036509bb16bbfddb5b7..3818b472022121c0a817deb5eb54bece5c002c5c 100644 (file)
@@ -220,6 +220,42 @@ config PCM990_DISPLAY_NONE
 endchoice
 
 
+config PXA_EZX
+       bool "Motorola EZX Platform"
+       select PXA27x
+       select IWMMXT
+       select HAVE_PWM
+
+config MACH_EZX_A780
+       bool "Motorola EZX A780"
+       default y
+       depends on PXA_EZX
+
+config MACH_EZX_E680
+       bool "Motorola EZX E680"
+       default y
+       depends on PXA_EZX
+
+config MACH_EZX_A1200
+       bool "Motorola EZX A1200"
+       default y
+       depends on PXA_EZX
+
+config MACH_EZX_A910
+       bool "Motorola EZX A910"
+       default y
+       depends on PXA_EZX
+
+config MACH_EZX_E6
+       bool "Motorola EZX E6"
+       default y
+       depends on PXA_EZX
+
+config MACH_EZX_E2
+       bool "Motorola EZX E2"
+       default y
+       depends on PXA_EZX
+
 endmenu
 
 config PXA25x
index c4dfbe87fc4e4768f555b53a7f679836b0e70e5e..1dded6499d0b01627ae680e6869bef4ac523ceec 100644 (file)
@@ -46,6 +46,7 @@ endif
 obj-$(CONFIG_MACH_LITTLETON)   += littleton.o
 
 obj-$(CONFIG_MACH_ARMCORE)      += cm-x270.o
+obj-$(CONFIG_PXA_EZX)           += ezx.o
 
 # Support for blinky lights
 led-y := leds.o
diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c
new file mode 100644 (file)
index 0000000..0143eed
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ *  ezx.c - Common code for the EZX platform.
+ *
+ *  Copyright (C) 2005-2006 Harald Welte <laforge@openezx.org>,
+ *               2007-2008 Daniel Ribeiro <drwyrm@gmail.com>,
+ *               2007-2008 Stefan Schmidt <stefan@datenfreihafen.org>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/delay.h>
+#include <linux/pwm_backlight.h>
+
+#include <asm/setup.h>
+#include <asm/arch/pxafb.h>
+#include <asm/arch/ohci.h>
+#include <asm/arch/i2c.h>
+
+#include <asm/arch/mfp-pxa27x.h>
+#include <asm/arch/pxa-regs.h>
+#include <asm/arch/pxa2xx-regs.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+
+#include "devices.h"
+#include "generic.h"
+
+static struct platform_pwm_backlight_data ezx_backlight_data = {
+       .pwm_id         = 0,
+       .max_brightness = 1023,
+       .dft_brightness = 1023,
+       .pwm_period_ns  = 78770,
+};
+
+static struct platform_device ezx_backlight_device = {
+       .name           = "pwm-backlight",
+       .dev            = {
+               .parent = &pxa27x_device_pwm0.dev,
+               .platform_data = &ezx_backlight_data,
+       },
+};
+
+static struct pxafb_mode_info mode_ezx_old = {
+       .pixclock               = 150000,
+       .xres                   = 240,
+       .yres                   = 320,
+       .bpp                    = 16,
+       .hsync_len              = 10,
+       .left_margin            = 20,
+       .right_margin           = 10,
+       .vsync_len              = 2,
+       .upper_margin           = 3,
+       .lower_margin           = 2,
+       .sync                   = 0,
+};
+
+static struct pxafb_mach_info ezx_fb_info_1 = {
+       .modes          = &mode_ezx_old,
+       .num_modes      = 1,
+       .lcd_conn       = LCD_COLOR_TFT_16BPP,
+};
+
+static struct pxafb_mode_info mode_72r89803y01 = {
+       .pixclock               = 192308,
+       .xres                   = 240,
+       .yres                   = 320,
+       .bpp                    = 32,
+       .depth                  = 18,
+       .hsync_len              = 10,
+       .left_margin            = 20,
+       .right_margin           = 10,
+       .vsync_len              = 2,
+       .upper_margin           = 3,
+       .lower_margin           = 2,
+       .sync                   = 0,
+};
+
+static struct pxafb_mach_info ezx_fb_info_2 = {
+       .modes          = &mode_72r89803y01,
+       .num_modes      = 1,
+       .lcd_conn       = LCD_COLOR_TFT_18BPP,
+};
+
+static struct platform_device *devices[] __initdata = {
+       &ezx_backlight_device,
+};
+
+static unsigned long ezx_pin_config[] __initdata = {
+       /* PWM backlight */
+       GPIO16_PWM0_OUT,
+
+       /* BTUART */
+       GPIO42_BTUART_RXD,
+       GPIO43_BTUART_TXD,
+       GPIO44_BTUART_CTS,
+       GPIO45_BTUART_RTS,
+
+       /* STUART */
+       GPIO46_STUART_RXD,
+       GPIO47_STUART_TXD,
+
+       /* For A780 support (connected with Neptune GSM chip) */
+       GPIO30_USB_P3_2,        /* ICL_TXENB */
+       GPIO31_USB_P3_6,        /* ICL_VPOUT */
+       GPIO90_USB_P3_5,        /* ICL_VPIN */
+       GPIO91_USB_P3_1,        /* ICL_XRXD */
+       GPIO56_USB_P3_4,        /* ICL_VMOUT */
+       GPIO113_USB_P3_3,       /* /ICL_VMIN */
+};
+
+static void __init ezx_init(void)
+{
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(ezx_pin_config));
+       pxa_set_i2c_info(NULL);
+       if (machine_is_ezx_a780() || machine_is_ezx_e680())
+               set_pxa_fb_info(&ezx_fb_info_1);
+       else
+               set_pxa_fb_info(&ezx_fb_info_2);
+
+       platform_add_devices(devices, ARRAY_SIZE(devices));
+}
+
+static void __init ezx_fixup(struct machine_desc *desc, struct tag *tags,
+               char **cmdline, struct meminfo *mi)
+{
+       /* We have two ram chips. First one with 32MB at 0xA0000000 and a second
+        * 16MB one at 0xAC000000
+        */
+       mi->nr_banks = 2;
+       mi->bank[0].start = 0xa0000000;
+       mi->bank[0].node = 0;
+       mi->bank[0].size = (32*1024*1024);
+       mi->bank[1].start = 0xac000000;
+       mi->bank[1].node = 1;
+       mi->bank[1].size = (16*1024*1024);
+}
+
+#ifdef CONFIG_MACH_EZX_A780
+MACHINE_START(EZX_A780, "Motorola EZX A780")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_EZX_E680
+MACHINE_START(EZX_E680, "Motorola EZX E680")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_EZX_A1200
+MACHINE_START(EZX_A1200, "Motorola EZX A1200")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_EZX_A910
+MACHINE_START(EZX_A910, "Motorola EZX A910")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_EZX_E6
+MACHINE_START(EZX_E6, "Motorola EZX E6")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif
+
+#ifdef CONFIG_MACH_EZX_E2
+MACHINE_START(EZX_E2, "Motorola EZX E2")
+       .phys_io        = 0x40000000,
+       .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
+       .fixup                  = ezx_fixup,
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = &ezx_init,
+MACHINE_END
+#endif