diff options
author | Felix Fietkau <nbd@openwrt.org> | 2009-03-14 15:52:42 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2009-03-14 15:52:42 +0000 |
commit | 16defbb2bd9478f9e5384b9722f20a694e6bae41 (patch) | |
tree | f52e202c30c7fca103b196ece1223e18446e4dfc /target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch | |
parent | b4644aedce6526b5d07b336187c8e6417c7dd75e (diff) | |
download | upstream-16defbb2bd9478f9e5384b9722f20a694e6bae41.tar.gz upstream-16defbb2bd9478f9e5384b9722f20a694e6bae41.tar.bz2 upstream-16defbb2bd9478f9e5384b9722f20a694e6bae41.zip |
nuke obsolete kernel stuff
SVN-Revision: 14875
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch | 1024 |
1 files changed, 0 insertions, 1024 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch deleted file mode 100755 index e2ef84f91d..0000000000 --- a/target/linux/s3c24xx/patches-2.6.26/1028-gta02-core.patch.patch +++ /dev/null @@ -1,1024 +0,0 @@ -From 330ac25864dd0a71f2d1cd7d58db103ee93f9125 Mon Sep 17 00:00:00 2001 -From: mokopatches <mokopatches@openmoko.org> -Date: Wed, 16 Jul 2008 14:46:52 +0100 -Subject: [PATCH] gta02-core.patch - ---- - arch/arm/mach-s3c2440/Kconfig | 15 + - arch/arm/mach-s3c2440/Makefile | 3 + - arch/arm/mach-s3c2440/mach-gta02.c | 826 ++++++++++++++++++++++++++++++++++ - drivers/leds/leds-neo1973-vibrator.c | 2 +- - include/asm-arm/arch-s3c2410/gta02.h | 99 ++++ - sound/soc/s3c24xx/neo1973_wm8753.c | 8 + - 6 files changed, 952 insertions(+), 1 deletions(-) - create mode 100644 arch/arm/mach-s3c2440/mach-gta02.c - create mode 100644 include/asm-arm/arch-s3c2410/gta02.h - -diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig -index f1915bd..6b317d1 100644 ---- a/arch/arm/mach-s3c2440/Kconfig -+++ b/arch/arm/mach-s3c2440/Kconfig -@@ -68,5 +68,20 @@ config SMDK2440_CPU2440 - select CPU_S3C2440 - - -+config MACH_NEO1973_GTA02 -+ bool "FIC Neo1973 GSM Phone (GTA02 Hardware)" -+ select CPU_S3C2442 -+ select SENSORS_PCF50633 -+ help -+ Say Y here if you are using the FIC Neo1973 GSM Phone -+ -+config NEO1973_GTA02_2440 -+ bool "Old FIC Neo1973 GTA02 hardware using S3C2440 CPU" -+ depends on MACH_NEO1973_GTA02 -+ select CPU_S3C2440 -+ help -+ Say Y here if you are using an early hardware revision -+ of the FIC/OpenMoko Neo1973 GTA02 GSM Phone. -+ - endmenu - -diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile -index c81ed62..1a4defd 100644 ---- a/arch/arm/mach-s3c2440/Makefile -+++ b/arch/arm/mach-s3c2440/Makefile -@@ -21,3 +21,6 @@ obj-$(CONFIG_MACH_OSIRIS) += mach-osiris.o - obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o - obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o - obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o -+obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o -+obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o -+ -diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c -new file mode 100644 -index 0000000..f72a5ae ---- /dev/null -+++ b/arch/arm/mach-s3c2440/mach-gta02.c -@@ -0,0 +1,826 @@ -+/* -+ * linux/arch/arm/mach-s3c2440/mach-gta02.c -+ * -+ * S3C2440 Machine Support for the FIC GTA02 (Neo1973) -+ * -+ * Copyright (C) 2006-2007 by OpenMoko, Inc. -+ * Author: Harald Welte <laforge@openmoko.org> -+ * All rights reserved. -+ * -+ * 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 of -+ * the License, 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; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, -+ * MA 02111-1307 USA -+ * -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/types.h> -+#include <linux/interrupt.h> -+#include <linux/list.h> -+#include <linux/delay.h> -+#include <linux/timer.h> -+#include <linux/init.h> -+#include <linux/workqueue.h> -+#include <linux/platform_device.h> -+#include <linux/serial_core.h> -+#include <linux/spi/spi.h> -+#include <linux/spi/glamo.h> -+#include <linux/spi/spi_bitbang.h> -+#include <linux/mmc/host.h> -+ -+#include <linux/mtd/mtd.h> -+#include <linux/mtd/nand.h> -+#include <linux/mtd/nand_ecc.h> -+#include <linux/mtd/partitions.h> -+#include <linux/mtd/physmap.h> -+ -+#include <linux/pcf50633.h> -+ -+#include <asm/mach/arch.h> -+#include <asm/mach/map.h> -+#include <asm/mach/irq.h> -+ -+#include <asm/hardware.h> -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <asm/mach-types.h> -+ -+#include <asm/arch/regs-gpio.h> -+#include <asm/arch/regs-gpioj.h> -+#include <asm/arch/fb.h> -+#include <asm/arch/mci.h> -+#include <asm/arch/ts.h> -+#include <asm/arch/spi.h> -+#include <asm/arch/spi-gpio.h> -+#include <asm/arch/usb-control.h> -+ -+#include <asm/arch/gta01.h> -+#include <asm/arch/gta02.h> -+ -+#include <asm/plat-s3c/regs-serial.h> -+#include <asm/plat-s3c/nand.h> -+#include <asm/plat-s3c24xx/devs.h> -+#include <asm/plat-s3c24xx/cpu.h> -+#include <asm/plat-s3c24xx/pm.h> -+#include <asm/plat-s3c24xx/udc.h> -+ -+#include <linux/glamofb.h> -+ -+static struct map_desc gta02_iodesc[] __initdata = { -+ { -+ .virtual = 0xe0000000, -+ .pfn = __phys_to_pfn(S3C2410_CS3+0x01000000), -+ .length = SZ_1M, -+ .type = MT_DEVICE -+ }, -+}; -+ -+#define UCON S3C2410_UCON_DEFAULT -+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB -+#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE -+ -+static struct s3c2410_uartcfg gta02_uartcfgs[] = { -+ [0] = { -+ .hwport = 0, -+ .flags = 0, -+ .ucon = UCON, -+ .ulcon = ULCON, -+ .ufcon = UFCON, -+ }, -+ [1] = { -+ .hwport = 1, -+ .flags = 0, -+ .ucon = UCON, -+ .ulcon = ULCON, -+ .ufcon = UFCON, -+ }, -+ [2] = { -+ .hwport = 2, -+ .flags = 0, -+ .ucon = UCON, -+ .ulcon = ULCON, -+ .ufcon = UFCON, -+ }, -+ -+}; -+ -+/* PMU driver info */ -+ -+static int pmu_callback(struct device *dev, unsigned int feature, -+ enum pmu_event event) -+{ -+ switch (feature) { -+ case PCF50633_FEAT_MBC: -+ switch (event) { -+ case PMU_EVT_INSERT: -+ case PMU_EVT_USB_INSERT: -+ pcf50633_charge_enable(pcf50633_global, 1); -+ break; -+ case PMU_EVT_REMOVE: -+ case PMU_EVT_USB_REMOVE: -+ pcf50633_charge_enable(pcf50633_global, 0); -+ break; -+ default: -+ break; -+ } -+ break; -+ default: -+ break; -+ } -+ -+ return 0; -+} -+ -+static struct pcf50633_platform_data gta02_pcf_pdata = { -+ .used_features = PCF50633_FEAT_MBC | -+ PCF50633_FEAT_BBC | -+ PCF50633_FEAT_RTC | -+ PCF50633_FEAT_CHGCUR | -+ PCF50633_FEAT_BATVOLT | -+ PCF50633_FEAT_BATTEMP | -+ PCF50633_FEAT_PWM_BL, -+ .onkey_seconds_sig_init = 4, -+ .onkey_seconds_shutdown = 8, -+ .cb = &pmu_callback, -+ .r_fix_batt = 10000, -+ .r_fix_batt_par = 10000, -+ .r_sense_milli = 220, -+ .rails = { -+ [PCF50633_REGULATOR_AUTO] = { -+ .name = "io_3v3", -+ .flags = PMU_VRAIL_F_SUSPEND_ON, -+ .voltage = { -+ .init = 3300, -+ .max = 3300, -+ }, -+ }, -+ [PCF50633_REGULATOR_DOWN1] = { -+ .name = "core_1v3", -+ .voltage = { -+ .init = 1300, -+ .max = 1600, -+ }, -+ }, -+ [PCF50633_REGULATOR_DOWN2] = { -+ .name = "core_1v8", -+ .voltage = { -+ .init = 1800, -+ .max = 1800, -+ }, -+ }, -+ [PCF50633_REGULATOR_HCLDO] = { -+ .name = "sd_3v3", -+ .voltage = { -+ .init = 3300, -+ .max = 3300, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO1] = { -+ .name = "stby_1v3", -+ .flags = PMU_VRAIL_F_SUSPEND_ON, -+ .voltage = { -+ .init = 1300, -+ .max = 1330, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO2] = { -+ .name = "codec_3v3", -+ .voltage = { -+ .init = 3300, -+ .max = 3300, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO3] = { -+ .name = "lcm_3v", -+ .voltage = { -+ .init = 3000, -+ .max = 3000, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO4] = { -+ .name = "gl_2v5", -+ .voltage = { -+ .init = 2500, -+ .max = 2500, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO5] = { -+ .name = "gl_1v5", -+ .voltage = { -+ .init = 1500, -+ .max = 1500, -+ }, -+ }, -+ [PCF50633_REGULATOR_LDO6] = { -+ .name = "user1", -+ .voltage = { -+ .init = 0, -+ .max = 3300, -+ }, -+ }, -+ }, -+}; -+ -+#if 0 /* currently unused */ -+static void cfg_pmu_vrail(struct pmu_voltage_rail *vrail, char *name, -+ unsigned int flags, unsigned int init, -+ unsigned int max) -+{ -+ vrail->name = name; -+ vrail->flags = flags; -+ vrail->voltage.init = init; -+ vrail->voltage.max = max; -+} -+#endif -+ -+static void mangle_pmu_pdata_by_system_rev(void) -+{ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ /* FIXME: this is only in v1 due to wrong PMU variant */ -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_DOWN2].flags = -+ PMU_VRAIL_F_SUSPEND_ON; -+ break; -+ case GTA02v2_SYSTEM_REV: -+ case GTA02v3_SYSTEM_REV: -+ case GTA02v4_SYSTEM_REV: -+ case GTA02v5_SYSTEM_REV: -+ case GTA02v6_SYSTEM_REV: -+ /* we need to keep the 1.8V going since this is the SDRAM -+ * self-refresh voltage */ -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_DOWN2].flags = -+ PMU_VRAIL_F_SUSPEND_ON; -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_DOWN2].name = -+ "io_1v8", -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO1].name = -+ "gsensor_3v3", -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO1].voltage.init = -+ 3300; -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO1].voltage.max = -+ 3300; -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO1].flags &= -+ ~PMU_VRAIL_F_SUSPEND_ON; -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO3].flags = -+ PMU_VRAIL_F_UNUSED; -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO5] = ((struct pmu_voltage_rail) { -+ .name = "rf_3v", -+ .voltage = { -+ .init = 0, -+ .max = 3000, -+ } -+ }); -+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_LDO6] = ((struct pmu_voltage_rail) { -+ .name = "lcm_3v", -+ .voltage = { -+ .init = 3000, -+ .max = 3000, -+ } -+ }); -+ break; -+ default: -+ break; -+ } -+} -+ -+static struct resource gta02_pmu_resources[] = { -+ [0] = { -+ .flags = IORESOURCE_IRQ, -+ .start = GTA02_IRQ_PCF50633, -+ .end = GTA02_IRQ_PCF50633, -+ }, -+}; -+ -+struct platform_device gta02_pmu_dev = { -+ .name = "pcf50633", -+ .num_resources = ARRAY_SIZE(gta02_pmu_resources), -+ .resource = gta02_pmu_resources, -+ .dev = { -+ .platform_data = >a02_pcf_pdata, -+ }, -+}; -+ -+ -+/* NOR Flash */ -+ -+#define GTA02_FLASH_BASE 0x18000000 /* GCS3 */ -+#define GTA02_FLASH_SIZE 0x200000 /* 2MBytes */ -+ -+static struct physmap_flash_data gta02_nor_flash_data = { -+ .width = 2, -+}; -+ -+static struct resource gta02_nor_flash_resource = { -+ .start = GTA02_FLASH_BASE, -+ .end = GTA02_FLASH_BASE + GTA02_FLASH_SIZE - 1, -+ .flags = IORESOURCE_MEM, -+}; -+ -+static struct platform_device gta02_nor_flash = { -+ .name = "physmap-flash", -+ .id = 0, -+ .dev = { -+ .platform_data = >a02_nor_flash_data, -+ }, -+ .resource = >a02_nor_flash_resource, -+ .num_resources = 1, -+}; -+ -+ -+ -+static struct resource gta02_sdio_resources[] = { -+ [0] = { -+ .flags = IORESOURCE_IRQ, -+ .start = IRQ_SDI, -+ .end = IRQ_SDI, -+ }, -+ [1] = { -+ .flags = IORESOURCE_MEM, -+ .start = S3C2410_PA_SDI, -+ .end = S3C2410_PA_SDI + S3C24XX_SZ_SDI - 1, -+ }, -+ [2] = { -+ .flags = IORESOURCE_DMA, -+ .start = 0, /* Channel 0 for SDI */ -+ .end = 0, -+ }, -+}; -+ -+ -+static struct platform_device gta02_sdio_dev = { -+ .name = "s3c24xx-sdio", -+ .id = -1, -+ .dev = { -+ .coherent_dma_mask = 0xffffffff, -+ }, -+ .resource = gta02_sdio_resources, -+ .num_resources = ARRAY_SIZE(gta02_sdio_resources), -+}; -+ -+static struct platform_device *gta02_devices[] __initdata = { -+ &s3c_device_usb, -+ &s3c_device_wdt, -+ &s3c_device_i2c, -+ &s3c_device_iis, -+ // &s3c_device_sdi, /* FIXME: temporary disable to avoid s3cmci bind */ -+ &s3c_device_usbgadget, -+ &s3c_device_nand, -+ &s3c_device_ts, -+ &s3c_device_spi0, -+ &s3c_device_spi1, -+ >a02_nor_flash, -+}; -+ -+static struct s3c2410_nand_set gta02_nand_sets[] = { -+ [0] = { -+ .name = "neo1973-nand", -+ .nr_chips = 1, -+ .flags = S3C2410_NAND_BBT, -+ }, -+}; -+ -+/* choose a set of timings which should suit most 512Mbit -+ * chips and beyond. -+ */ -+ -+static struct s3c2410_platform_nand gta02_nand_info = { -+ .tacls = 20, -+ .twrph0 = 60, -+ .twrph1 = 20, -+ .nr_sets = ARRAY_SIZE(gta02_nand_sets), -+ .sets = gta02_nand_sets, -+}; -+ -+static struct s3c24xx_mci_pdata gta02_mmc_cfg = { -+ .gpio_detect = GTA02v1_GPIO_nSD_DETECT, -+ .set_power = NULL, -+ .ocr_avail = MMC_VDD_32_33, -+}; -+ -+static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd) -+{ -+ printk(KERN_DEBUG "%s(%d)\n", __func__, cmd); -+ -+ switch (cmd) { -+ case S3C2410_UDC_P_ENABLE: -+ s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 1); -+ break; -+ case S3C2410_UDC_P_DISABLE: -+ s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 0); -+ break; -+ case S3C2410_UDC_P_RESET: -+ /* FIXME! */ -+ break; -+ default: -+ break; -+ } -+} -+ -+/* use a work queue, since I2C API inherently schedules -+ * and we get called in hardirq context from UDC driver */ -+ -+struct vbus_draw { -+ struct work_struct work; -+ int ma; -+}; -+static struct vbus_draw gta02_udc_vbus_drawer; -+ -+static void __gta02_udc_vbus_draw(struct work_struct *work) -+{ -+ if (!pcf50633_global) { -+ printk(KERN_ERR "pcf50633 not initialized yet, can't change " -+ "vbus_draw\n"); -+ return; -+ } -+ pcf50633_usb_curlim_set(pcf50633_global, gta02_udc_vbus_drawer.ma); -+} -+ -+static void gta02_udc_vbus_draw(unsigned int ma) -+{ -+ gta02_udc_vbus_drawer.ma = ma; -+ schedule_work(>a02_udc_vbus_drawer.work); -+} -+ -+static struct s3c2410_udc_mach_info gta02_udc_cfg = { -+ .vbus_draw = gta02_udc_vbus_draw, -+ .udc_command = gta02_udc_command, -+ -+}; -+ -+static struct s3c2410_ts_mach_info gta02_ts_cfg = { -+ .delay = 10000, -+ .presc = 65, -+ .oversampling_shift = 5, -+}; -+ -+/* SPI */ -+ -+static struct spi_board_info gta02_spi_board_info[] = { -+ { -+ .modalias = "jbt6k74", -+ /* platform_data */ -+ /* controller_data */ -+ /* irq */ -+ .max_speed_hz = 10 * 1000 * 1000, -+ .bus_num = 2, -+ /* chip_select */ -+ }, -+}; -+ -+static struct glamo_spi_info glamo_spi_cfg = { -+ .board_size = ARRAY_SIZE(gta02_spi_board_info), -+ .board_info = gta02_spi_board_info, -+}; -+ -+static struct glamo_spigpio_info glamo_spigpio_cfg = { -+ .pin_clk = GLAMO_GPIO10_OUTPUT, -+ .pin_mosi = GLAMO_GPIO11_OUTPUT, -+ .pin_cs = GLAMO_GPIO12_OUTPUT, -+ .pin_miso = 0, -+ .board_size = ARRAY_SIZE(gta02_spi_board_info), -+ .board_info = gta02_spi_board_info, -+}; -+ -+static struct resource gta01_led_resources[] = { -+ [0] = { -+ .start = GTA02_GPIO_VIBRATOR_ON, -+ .end = GTA02_GPIO_VIBRATOR_ON, -+ }, -+}; -+ -+static struct platform_device gta01_led_dev = { -+ .name = "neo1973-vibrator", -+ .num_resources = ARRAY_SIZE(gta01_led_resources), -+ .resource = gta01_led_resources, -+}; -+ -+static struct resource gta02_led_resources[] = { -+ { -+ .name = "gta02-power:orange", -+ .start = GTA02_GPIO_PWR_LED1, -+ .end = GTA02_GPIO_PWR_LED1, -+ }, { -+ .name = "gta02-power:blue", -+ .start = GTA02_GPIO_PWR_LED2, -+ .end = GTA02_GPIO_PWR_LED2, -+ }, { -+ .name = "gta02-aux:red", -+ .start = GTA02_GPIO_AUX_LED, -+ .end = GTA02_GPIO_AUX_LED, -+ }, -+}; -+ -+struct platform_device gta02_led_dev = { -+ .name = "gta02-led", -+ .num_resources = ARRAY_SIZE(gta02_led_resources), -+ .resource = gta02_led_resources, -+}; -+ -+static struct resource gta01_button_resources[] = { -+ [0] = { -+ .start = GTA02_GPIO_AUX_KEY, -+ .end = GTA02_GPIO_AUX_KEY, -+ }, -+ [1] = { -+ .start = GTA02_GPIO_HOLD_KEY, -+ .end = GTA02_GPIO_HOLD_KEY, -+ }, -+ [2] = { -+ .start = GTA02_GPIO_JACK_INSERT, -+ .end = GTA02_GPIO_JACK_INSERT, -+ }, -+}; -+ -+static struct platform_device gta01_button_dev = { -+ .name = "neo1973-button", -+ .num_resources = ARRAY_SIZE(gta01_button_resources), -+ .resource = gta01_button_resources, -+}; -+ -+static struct platform_device gta01_pm_gsm_dev = { -+ .name = "neo1973-pm-gsm", -+}; -+ -+/* USB */ -+static struct s3c2410_hcd_info gta02_usb_info = { -+ .port[0] = { -+ .flags = S3C_HCDFLG_USED, -+ }, -+ .port[1] = { -+ .flags = 0, -+ }, -+}; -+ -+static int glamo_irq_is_wired(void) -+{ -+ int rc; -+ int count = 0; -+ -+ /* -+ * GTA02 S-Media IRQs prior to A5 are broken due to a lack of -+ * a pullup on the INT# line. Check for the bad behaviour. -+ */ -+ s3c2410_gpio_setpin(S3C2410_GPG4, 0); -+ s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP); -+ s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_INP); -+ /* -+ * we force it low ourselves for a moment and resume being input. -+ * If there is a pullup, it won't stay low for long. But if the -+ * level converter is there as on < A5 revision, the weak keeper -+ * on the input of the LC will hold the line low indefinitiely -+ */ -+ do -+ rc = s3c2410_gpio_getpin(S3C2410_GPG4); -+ while ((!rc) && ((count++) < 10)); -+ if (rc) { /* it got pulled back up, it's good */ -+ printk(KERN_INFO "Detected S-Media IRQ# pullup, " -+ "enabling interrupt\n"); -+ return 0; -+ } else /* Gah we can't work with this level converter */ -+ printk(KERN_WARNING "** Detected bad IRQ# circuit found" -+ " on pre-A5 GTA02: S-Media interrupt disabled **\n"); -+ return -ENODEV; -+} -+ -+ -+static void -+gta02_glamo_mmc_set_power(unsigned char power_mode, unsigned short vdd) -+{ -+ int mv = 1650; -+ -+ printk(KERN_DEBUG "mmc_set_power(power_mode=%u, vdd=%u\n", -+ power_mode, vdd); -+ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ case GTA02v2_SYSTEM_REV: -+ break; -+ case GTA02v3_SYSTEM_REV: -+ case GTA02v4_SYSTEM_REV: -+ case GTA02v5_SYSTEM_REV: -+ case GTA02v6_SYSTEM_REV: -+ /* depend on pcf50633 driver init */ -+ if (!pcf50633_global) -+ while (!pcf50633_global) -+ msleep(10); -+ switch (power_mode) { -+ case MMC_POWER_ON: -+ case MMC_POWER_UP: -+ /* select and set the voltage */ -+ if (vdd > 7) { -+ mv += 300 + 100 * (vdd - 8); -+ if (mv > 3500) -+ mv = 3500; -+ } -+ pcf50633_voltage_set(pcf50633_global, -+ PCF50633_REGULATOR_HCLDO, mv); -+ msleep(10); -+ pcf50633_onoff_set(pcf50633_global, -+ PCF50633_REGULATOR_HCLDO, 1); -+ msleep(1); -+ break; -+ case MMC_POWER_OFF: -+ pcf50633_onoff_set(pcf50633_global, -+ PCF50633_REGULATOR_HCLDO, 0); -+ msleep(1); -+ break; -+ } -+ break; -+ } -+} -+ -+/* Smedia Glamo 3362 */ -+ -+static struct glamofb_platform_data gta02_glamo_pdata = { -+ .width = 43, -+ .height = 58, -+ /* 24.5MHz --> 40.816ns */ -+ .pixclock = 40816, -+ .left_margin = 8, -+ .right_margin = 16, -+ .upper_margin = 2, -+ .lower_margin = 16, -+ .hsync_len = 8, -+ .vsync_len = 2, -+ .fb_mem_size = 0x400000, /* glamo has 8 megs of SRAM. we use 4 */ -+ .xres = { -+ .min = 240, -+ .max = 640, -+ .defval = 480, -+ }, -+ .yres = { -+ .min = 320, -+ .max = 640, -+ .defval = 640, -+ }, -+ .bpp = { -+ .min = 16, -+ .max = 16, -+ .defval = 16, -+ }, -+ //.spi_info = &glamo_spi_cfg, -+ .spigpio_info = &glamo_spigpio_cfg, -+ -+ /* glamo MMC function platform data */ -+ .glamo_set_mci_power = gta02_glamo_mmc_set_power, -+ .glamo_irq_is_wired = glamo_irq_is_wired, -+}; -+ -+static struct resource gta02_glamo_resources[] = { -+ [0] = { -+ .start = S3C2410_CS1, -+ .end = S3C2410_CS1 + 0x1000000 - 1, -+ .flags = IORESOURCE_MEM, -+ }, -+ [1] = { -+ .start = GTA02_IRQ_3D, -+ .end = GTA02_IRQ_3D, -+ .flags = IORESOURCE_IRQ, -+ }, -+ [2] = { -+ .start = GTA02v1_GPIO_3D_RESET, -+ .end = GTA02v1_GPIO_3D_RESET, -+ }, -+}; -+ -+static struct platform_device gta02_glamo_dev = { -+ .name = "glamo3362", -+ .num_resources = ARRAY_SIZE(gta02_glamo_resources), -+ .resource = gta02_glamo_resources, -+ .dev = { -+ .platform_data = >a02_glamo_pdata, -+ }, -+}; -+ -+static void mangle_glamo_res_by_system_rev(void) -+{ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ break; -+ default: -+ gta02_glamo_resources[2].start = GTA02_GPIO_3D_RESET; -+ gta02_glamo_resources[2].end = GTA02_GPIO_3D_RESET; -+ break; -+ } -+ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ case GTA02v2_SYSTEM_REV: -+ case GTA02v3_SYSTEM_REV: -+ /* case GTA02v4_SYSTEM_REV: - FIXME: handle this later */ -+ /* The hardware is missing a pull-up resistor and thus can't -+ * support the Smedia Glamo IRQ */ -+ gta02_glamo_resources[1].start = 0; -+ gta02_glamo_resources[1].end = 0; -+ break; -+ } -+} -+ -+static void __init gta02_map_io(void) -+{ -+ s3c24xx_init_io(gta02_iodesc, ARRAY_SIZE(gta02_iodesc)); -+ s3c24xx_init_clocks(12000000); -+ s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs)); -+} -+ -+static irqreturn_t gta02_modem_irq(int irq, void *param) -+{ -+ printk(KERN_DEBUG "modem wakeup interrupt\n"); -+ return IRQ_HANDLED; -+} -+ -+static void __init gta02_machine_init(void) -+{ -+ int rc; -+ -+ s3c_device_usb.dev.platform_data = >a02_usb_info; -+ s3c_device_nand.dev.platform_data = >a02_nand_info; -+ s3c_device_sdi.dev.platform_data = >a02_mmc_cfg; -+ -+ /* Only GTA02v1 has a SD_DETECT GPIO. Since the slot is not -+ * hot-pluggable, this is not required anyway */ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ break; -+ default: -+ gta02_mmc_cfg.gpio_detect = 0; -+ break; -+ } -+ -+ INIT_WORK(>a02_udc_vbus_drawer.work, __gta02_udc_vbus_draw); -+ s3c24xx_udc_set_platdata(>a02_udc_cfg); -+ set_s3c2410ts_info(>a02_ts_cfg); -+ -+ /* FIXME: hardcoded WLAN module power-up */ -+ s3c2410_gpio_cfgpin(GTA02_CHIP_PWD, S3C2410_GPIO_OUTPUT); -+ -+ /* Power is down */ -+ s3c2410_gpio_setpin(GTA02_CHIP_PWD, 1); -+ mdelay(100); -+ -+ switch (system_rev) { -+ case GTA02v1_SYSTEM_REV: -+ s3c2410_gpio_setpin(GTA02_CHIP_PWD, 0); -+ break; -+ default: -+ s3c2410_gpio_cfgpin(GTA02_GPIO_nWLAN_RESET, S3C2410_GPIO_OUTPUT); -+ /* Chip is in reset state */ -+ s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 0); -+ mdelay(100); -+ /* Power is up */ -+ s3c2410_gpio_setpin(GTA02_CHIP_PWD, 0); -+ mdelay(100); -+ /* Chip is out of reset */ -+ s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 1); -+ break; -+ } -+ -+ platform_device_register(>a01_button_dev); -+ platform_device_register(>a01_pm_gsm_dev); -+ -+ mangle_pmu_pdata_by_system_rev(); -+ platform_device_register(>a02_pmu_dev); -+ platform_device_register(>a01_led_dev); -+ platform_device_register(>a02_led_dev); -+ -+ mangle_glamo_res_by_system_rev(); -+ platform_device_register(>a02_glamo_dev); -+ -+ platform_device_register(>a02_sdio_dev); -+ -+ platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices)); -+ -+ s3c2410_pm_init(); -+ -+ /* Set LCD_RESET / XRES to high */ -+ s3c2410_gpio_cfgpin(GTA01_GPIO_LCD_RESET, S3C2410_GPIO_OUTPUT); -+ s3c2410_gpio_setpin(GTA01_GPIO_LCD_RESET, 1); -+ -+ /* Make sure the modem can wake us up */ -+ set_irq_type(GTA02_IRQ_MODEM, IRQT_RISING); -+ rc = request_irq(GTA02_IRQ_MODEM, gta02_modem_irq, IRQF_DISABLED, -+ "modem", NULL); -+ if (rc < 0) -+ printk(KERN_ERR "GTA02: can't request GSM modem wakeup IRQ\n"); -+ enable_irq_wake(GTA02_IRQ_MODEM); -+} -+ -+MACHINE_START(NEO1973_GTA02, "GTA02") -+ .phys_io = S3C2410_PA_UART, -+ .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, -+ .boot_params = S3C2410_SDRAM_PA + 0x100, -+ .map_io = gta02_map_io, -+ .init_irq = s3c24xx_init_irq, -+ .init_machine = gta02_machine_init, -+ .timer = &s3c24xx_timer, -+MACHINE_END -diff --git a/drivers/leds/leds-neo1973-vibrator.c b/drivers/leds/leds-neo1973-vibrator.c -index 0336e36..c943a6a 100644 ---- a/drivers/leds/leds-neo1973-vibrator.c -+++ b/drivers/leds/leds-neo1973-vibrator.c -@@ -113,7 +113,7 @@ static int __init neo1973_vib_probe(struct platform_device *pdev) - struct resource *r; - int rc; - -- if (!machine_is_neo1973_gta01()) -+ if (!machine_is_neo1973_gta01() && !machine_is_neo1973_gta02()) - return -EIO; - - r = platform_get_resource(pdev, 0, 0); -diff --git a/include/asm-arm/arch-s3c2410/gta02.h b/include/asm-arm/arch-s3c2410/gta02.h -new file mode 100644 -index 0000000..fa49d93 ---- /dev/null -+++ b/include/asm-arm/arch-s3c2410/gta02.h -@@ -0,0 +1,99 @@ -+#ifndef _GTA02_H -+#define _GTA02_H -+ -+#include <asm/arch/regs-gpio.h> -+#include <asm/arch/irqs.h> -+ -+/* Different hardware revisions, passed in ATAG_REVISION by u-boot */ -+#define GTA02v1_SYSTEM_REV 0x00000310 -+#define GTA02v2_SYSTEM_REV 0x00000320 -+#define GTA02v3_SYSTEM_REV 0x00000330 -+#define GTA02v4_SYSTEM_REV 0x00000340 -+#define GTA02v5_SYSTEM_REV 0x00000350 -+#define GTA02v6_SYSTEM_REV 0x00000360 -+ -+#define GTA02_GPIO_n3DL_GSM S3C2410_GPA13 /* v1 + v2 + v3 only */ -+ -+#define GTA02_GPIO_PWR_LED1 S3C2410_GPB0 -+#define GTA02_GPIO_PWR_LED2 S3C2410_GPB1 -+#define GTA02_GPIO_AUX_LED S3C2410_GPB2 -+#define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB3 -+#define GTA02v1_GPIO_GPS_PWRON S3C2410_GPB4 /* v1 only */ -+#define GTA02_GPIO_MODEM_RST S3C2410_GPB5 -+#define GTA02_GPIO_BT_EN S3C2410_GPB6 -+#define GTA02_GPIO_MODEM_ON S3C2410_GPB7 -+#define GTA02v1_GPIO_EN_AGPS3V S3C2410_GPB8 /* v1 only */ -+#define GTA02_GPIO_EXTINT8 S3C2410_GPB8 -+#define GTA02_GPIO_USB_PULLUP S3C2410_GPB9 -+ -+#define GTA02v1_GPIO_nGPS_RST S3C2410_GPC0 /* v1 only */ -+#define GTA02v12_GPIO_PIO3 S3C2410_GPC5 /* v1 + v2 only */ -+#define GTA02_GPIO_PIO5 S3C2410_GPC5 /* v3 + v4 only */ -+#define GTA02_GPIO_LCD_RESET S3C2410_GPC6 /* v1 + v2 only */ -+#define GTA02v12_GPIO_PIO2 S3C2410_GPC7 /* v1 + v2 only */ -+#define GTA02v2_nUSB_FLT S3C2410_GPC9 /* v2 only */ -+#define GTA02v2_nUSB_OC S3C2410_GPC10 /* v2 only */ -+#define GTA02v2_nGSM_OC S3C2410_GPC12 /* v2 only */ -+ -+#define GTA02v3_GPIO_nG1_CS S3C2410_GPD12 /* v3 + v4 only */ -+#define GTA02v3_GPIO_nG2_CS S3C2410_GPD13 /* v3 + v4 only */ -+ -+#define GTA02_GPIO_nG1_INT S3C2410_GPF0 -+#define GTA02_GPIO_IO1 S3C2410_GPF1 -+#define GTA02v1_GPIO_nG2_INT S3C2410_GPF2 /* v1 only */ -+#define GTA02_GPIO_PIO_2 S3C2410_GPF2 /* v2 + v3 + v4 only */ -+#define GTA02_GPIO_JACK_INSERT S3C2410_GPF4 -+#define GTA02v1_GPIO_nSD_DETECT S3C2410_GPF5 /* v1 only */ -+#define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF5 /* v2 + v3 + v4 only */ -+#define GTA02_GPIO_AUX_KEY S3C2410_GPF6 -+#define GTA02_GPIO_HOLD_KEY S3C2410_GPF7 -+ -+#define GTA02_GPIO_3D_IRQ S3C2410_GPG4 -+#define GTA02v1_GPIO_nG1_CS S3C2410_GPG8 /* v1 only */ -+#define GTA02v2_GPIO_nG2_INT S3C2410_GPG8 /* v2 + v3 + v4 only */ -+#define GTA02v3_GPIO_nUSB_OC S3C2410_GPG9 /* v3 + v4 only */ -+#define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG10 /* v3 + v4 only */ -+#define GTA02v1_GPIO_nG2_CS S3C2410_GPG11 /* v1 only */ -+#define GTA02v3_GPIO_nGSM_OC S3C2410_GPG11 /* v3 + v4 only */ -+ -+#define GTA02v1_GPIO_3D_RESET S3C2440_GPJ0 /* v1 only */ -+#define GTA02v2_GPIO_BAT_ID S3C2440_GPJ0 /* v2 only */ -+#define GTA02v1_GPIO_WLAN_GPIO8 S3C2440_GPJ1 /* v1 only */ -+#define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */ -+#define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2 -+#define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */ -+#define GTA02v1_GPIO_KEEPACT S3C2440_GPJ3 /* v1 only */ -+#define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */ -+#define GTA02_GPIO_nGSM_EN S3C2440_GPJ4 -+#define GTA02_GPIO_3D_RESET S3C2440_GPJ5 -+#define GTA02_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 + v5 only */ -+#define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7 -+#define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8 -+#define GTA02_GPIO_KEEPACT S3C2440_GPJ8 -+#define GTA02v1_GPIO_AMP_SHUT S3C2440_GPJ9 /* v1 only */ -+#define GTA02v2_nG1_CS S3C2440_GPJ9 /* v2 only */ -+#define GTA02v1_GPIO_HP_IN S3C2440_GPJ10 -+#define GTA02v2_nG2_CS S3C2440_GPJ10 /* v2 only */ -+#define GTA02v1_GPIO_INT0 S3C2440_GPJ11 /* v1 only */ -+#define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */ -+#define GTA02v1_GPIO_nGSM_EN S3C2440_GPJ12 /* v1 only */ -+#define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */ -+ -+#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0 -+#define GTA02_IRQ_MODEM IRQ_EINT1 -+#define GTA02v1_IRQ_GSENSOR_2 IRQ_EINT2 /* v1 only */ -+#define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */ -+#define GTA02_IRQ_nJACK_INSERT IRQ_EINT4 -+#define GTA02v1_IRQ_nSD_CD IRQ_EINT5 /* v1 only */ -+#define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5 -+#define GTA02_IRQ_AUX IRQ_EINT6 -+#define GTA02_IRQ_nHOLD IRQ_EINT7 -+#define GTA02v1_IRQ_nSIM_CD IRQ_EINT8 /* v1 only */ -+#define GTA02_IRQ_PCF50633 IRQ_EINT9 -+#define GTA02_IRQ_3D IRQ_EINT12 -+#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */ -+#define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */ -+#define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */ -+#define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */ -+ -+#endif /* _GTA02_H */ -diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c -index 0e9d1c5..4ab6f63 100644 ---- a/sound/soc/s3c24xx/neo1973_wm8753.c -+++ b/sound/soc/s3c24xx/neo1973_wm8753.c -@@ -671,6 +671,14 @@ static int __init neo1973_init(void) - { - int ret; - -+ DBG("Entered %s\n", __func__); -+ -+ if (!machine_is_neo1973_gta01()) { -+ printk(KERN_INFO -+ "Only GTA01 hardware supported by ASoc driver\n"); -+ return -ENODEV; -+ } -+ - neo1973_snd_device = platform_device_alloc("soc-audio", -1); - if (!neo1973_snd_device) - return -ENOMEM; --- -1.5.6.3 - |