diff options
author | Kristoffer Ericson <kristoffer@BoTux.(none)> | 2008-10-16 13:48:08 +0200 |
---|---|---|
committer | Kristoffer Ericson <kristoffer.ericson@gmail.com> | 2011-12-10 11:02:32 +0100 |
commit | bd8f0727d21b12f034dc4aa42653b0eadd744c08 (patch) | |
tree | e2438e44c69ceea650e23943aedc71b7def89754 | |
parent | 49914084e797530d9baaf51df9eda77babc98fa8 (diff) | |
download | linux-hpc-bd8f0727d21b12f034dc4aa42653b0eadd744c08.tar.gz |
/ : Apply previous patch * This branch is resonably working for all archs. Would say that it works best for hp jornada 600-series.
73 files changed, 10512 insertions, 688 deletions
diff --git a/Makefile b/Makefile index 189d8ef416e66c..9a215e33094a2b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 24 -EXTRAVERSION = +EXTRAVERSION = -hpc NAME = Arr Matey! A Hairy Bilge Rat! # *DOCUMENTATION* diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a04f507e7f2ca9..0f8a330e71b22c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -875,7 +875,7 @@ source "drivers/cpufreq/Kconfig" config CPU_FREQ_SA1100 bool - depends on CPU_FREQ && (SA1100_H3100 || SA1100_H3600 || SA1100_H3800 || SA1100_LART || SA1100_PLEB || SA1100_BADGE4 || SA1100_HACKKIT) + depends on CPU_FREQ && (SA1100_JORNADA56X || SA1100_JORNADA720 || SA1100_H3100 || SA1100_H3600 || SA1100_H3800 || SA1100_LART || SA1100_PLEB || SA1100_BADGE4 || SA1100_HACKKIT) default y config CPU_FREQ_SA1110 diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 35e56c99ad1ddb..fa1107b692fe05 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -109,6 +109,9 @@ ifeq ($(CONFIG_ARCH_SA1100),y) textofs-$(CONFIG_SA1111) := 0x00208000 endif machine-$(CONFIG_ARCH_PXA) := pxa +ifeq ($(CONFIG_ARCH_PXA),y) + textofs-$(CONFIG_ARCH_MP900C) := 0x00228000 +endif machine-$(CONFIG_ARCH_L7200) := l7200 machine-$(CONFIG_ARCH_INTEGRATOR) := integrator textofs-$(CONFIG_ARCH_CLPS711X) := 0x00028000 diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 656d49661a290f..aad8e19e1fbae9 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig @@ -23,6 +23,11 @@ endif choice prompt "Select target board" +config ARCH_MP900C + bool "NEC MobilePro900C" + depends on ARCH_PXA + select PXA25x + config ARCH_LUBBOCK bool "Intel DBPXA250 Development Platform" select PXA25x diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index 4263527e5123ec..a3d9d02d7bb48e 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile @@ -22,6 +22,7 @@ obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o obj-$(CONFIG_MACH_TOSA) += tosa.o obj-$(CONFIG_MACH_EM_X270) += em-x270.o +obj-$(CONFIG_ARCH_MP900C) += mp900.o ifeq ($(CONFIG_MACH_ZYLONITE),y) obj-y += zylonite.o diff --git a/arch/arm/mach-pxa/Makefile.boot b/arch/arm/mach-pxa/Makefile.boot index 1ead67178eca36..7f6be91cfcbdbb 100644 --- a/arch/arm/mach-pxa/Makefile.boot +++ b/arch/arm/mach-pxa/Makefile.boot @@ -1,2 +1,2 @@ - zreladdr-y := 0xa0008000 + zreladdr-y := 0xa0228000 diff --git a/arch/arm/mach-pxa/mp900.c b/arch/arm/mach-pxa/mp900.c new file mode 100644 index 00000000000000..6cb60d9d25ceb0 --- /dev/null +++ b/arch/arm/mach-pxa/mp900.c @@ -0,0 +1,100 @@ +/* + * linux/arch/arm/mach-pxa/mp900.c + * + * Support for the NEC MobilePro900/C platform + * + * this really does nothing much so far... + * it was derived from a gumstix mach-pxa/gumstix.c + * + * this is where the machine specific initialisation for the + * MobilePro900/c should happen + * + * TODO anything and everything... + * + * Michael Petchkovsky mkpetch@internode.on.net + * 17 April 2007 + * + * 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 <asm/types.h> + +#include <linux/init.h> +#include <linux/device.h> +#include <linux/platform_device.h> +#include <linux/usb/isp116x.h> + +#include <asm/hardware.h> +#include <asm/mach-types.h> +#include <asm/mach/arch.h> +#include <asm/arch/pxa-regs.h> + +/* asm/arch/mp900c.h would be a good idea... */ + +#include "generic.h" + +#define IRQ_USB PXA_IRQ(11) + +static void isp116x_pfm_delay(struct device *dev, int delay) +{ +} + +static struct isp116x_platform_data isp116x_pfm_data = { + .remote_wakeup_enable = 1, + .delay = isp116x_pfm_delay, +}; + +static struct resource isp116x_pfm_resources[] = { + [0] = { + .start = 0x4c000000, + .end = 0x4c100000, + .flags = IORESOURCE_MEM, + }, +// [1] = { +// .start = , +// .end = , +// .flags = IORESOURCE_MEM, +// }, + [2] = { + .start = IRQ_USB, + .end = IRQ_USB, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device mp900c_dummy_device = { + .name = "mp900c_dummy", + .id = -1, +}; + +static struct platform_device mp900c_usb = { + .name = "isp116x-hcd", + .num_resources = ARRAY_SIZE(isp116x_pfm_resources), + .resource = isp116x_pfm_resources, + .dev.platform_data = &isp116x_pfm_data, +}; + +static struct platform_device *devices[] __initdata = { + &mp900c_dummy_device, + &mp900c_usb, +}; + + +static void __init mp900c_init(void) +{ + printk (KERN_NOTICE "MobilePro900C init routine\n"); + (void) platform_add_devices(devices, ARRAY_SIZE(devices)); +} + +MACHINE_START(NEC_MP900, "MobilePro900C") +// .phys_ram = 0xa0000000, + .phys_io = 0x40000000, + .boot_params = 0xa0220100, + .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, + .timer = &pxa_timer, + .map_io = pxa_map_io, + .init_irq = pxa25x_init_irq, + .init_machine = mp900c_init, +MACHINE_END diff --git a/arch/arm/mach-sa1100/Kconfig b/arch/arm/mach-sa1100/Kconfig index f99d9013905fea..2feff1a6fcd698 100644 --- a/arch/arm/mach-sa1100/Kconfig +++ b/arch/arm/mach-sa1100/Kconfig @@ -93,6 +93,12 @@ config SA1100_BADGE4 Say Y here if you want to build a kernel for the HP Laboratories BadgePAD 4. +config SA1100_JORNADA56X + bool "HP Jornada 56x" + help + Say Y here if you want to build a kernel for the HP Jornada 56x + handheld computer. + config SA1100_JORNADA720 bool "HP Jornada 720" select SA1111 @@ -101,6 +107,13 @@ config SA1100_JORNADA720 handheld computer. See <http://www.hp.com/jornada/products/720> for details. +config SA1100_JORNADA720_FLASHROM + bool "HP Jornada 720 FlashRom" + depends on SA1100_JORNADA720 + help + Say Y here if you want to build a kernel for the HP Jornada 720 + with an added flashrom board. + config SA1100_JORNADA720_SSP bool "HP Jornada 720 Extended SSP driver" select SA1100_SSP @@ -111,6 +124,12 @@ config SA1100_JORNADA720_SSP keyboard, touchscreen, backlight and battery. This driver also activates the generic SSP which it extends. +config SA1100_JORNADA720_APM + bool "HP Jornada720 APM Support" + depends on SA1100_JORNADA720 && SA1100_JORNADA720 + help + Say Y here if you want battery status and other APM features. + config SA1100_HACKKIT bool "HackKit Core CPU Board" help diff --git a/arch/arm/mach-sa1100/Makefile b/arch/arm/mach-sa1100/Makefile index 7a61e8d33ab752..0d5cadfc5469c2 100644 --- a/arch/arm/mach-sa1100/Makefile +++ b/arch/arm/mach-sa1100/Makefile @@ -32,6 +32,9 @@ led-$(CONFIG_SA1100_HACKKIT) += leds-hackkit.o obj-$(CONFIG_SA1100_JORNADA720) += jornada720.o obj-$(CONFIG_SA1100_JORNADA720_SSP) += jornada720_ssp.o +obj-$(CONFIG_SA1100_JORNADA720_APM) += jornada720_apm.o + +obj-$(CONFIG_SA1100_JORNADA56X) += jornada56x.o jornada56x_asic.o obj-$(CONFIG_SA1100_LART) += lart.o led-$(CONFIG_SA1100_LART) += leds-lart.o @@ -52,4 +55,3 @@ obj-$(CONFIG_LEDS) += $(led-y) # Miscelaneous functions obj-$(CONFIG_PM) += pm.o sleep.o obj-$(CONFIG_SA1100_SSP) += ssp.o - diff --git a/arch/arm/mach-sa1100/cpu-sa1110.c b/arch/arm/mach-sa1100/cpu-sa1110.c index 36b47ff5af11dd..555f761e770109 100644 --- a/arch/arm/mach-sa1100/cpu-sa1110.c +++ b/arch/arm/mach-sa1100/cpu-sa1110.c @@ -108,6 +108,15 @@ static struct sdram_params sdram_tbl[] __initdata = { .twr = 8, .refresh = 64000, .cas_latency = 3, + }, { /* Micron MT48LC128M4A2 */ + .name = "MT48LC32M16A2", + .rows = 15, + .tck = 10, /* 2 CLKs */ + .trcd = 20, /* 2 CLKs */ + .trp = 20, /* 2 CLKs */ + .twr = 16, /* 1 CLK + 7.5ns */ + .refresh = 64000, + .cas_latency = 2, }, }; @@ -374,7 +383,11 @@ static int __init sa1110_clk_init(void) if (machine_is_h3100()) name = "KM416S4030CT"; if (machine_is_jornada720()) +#ifdef CONFIG_SA1100_JORNADA720_FLASHROM + name = "MT48LC32M16A2"; +#else name = "K4S281632B-1H"; +#endif } sdram = sa1110_find_sdram(name); diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 9e13c8358ea7c0..11268d5e591cea 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c @@ -110,7 +110,7 @@ unsigned int sa11x0_getspeed(unsigned int cpu) #else /* * We still need to provide this so building without cpufreq works. - */ + */ unsigned int cpufreq_get(unsigned int cpu) { return cclk_frequency_100khz[PPCR & 0xf] * 100; @@ -417,7 +417,7 @@ EXPORT_SYMBOL(sa1100fb_lcd_power); */ static struct map_desc standard_io_desc[] __initdata = { - { /* PCM */ + { /* PCM */ .virtual = 0xf8000000, .pfn = __phys_to_pfn(0x80000000), .length = 0x00100000, @@ -456,7 +456,7 @@ void __init sa1110_mb_disable(void) unsigned long flags; local_irq_save(flags); - + PGSR &= ~GPIO_MBGNT; GPCR = GPIO_MBGNT; GPDR = (GPDR & ~GPIO_MBREQ) | GPIO_MBGNT; @@ -470,7 +470,7 @@ void __init sa1110_mb_disable(void) * If the system is going to use the SA-1111 DMA engines, set up * the memory bus request/grant pins. */ -void __init sa1110_mb_enable(void) +void __devinit sa1110_mb_enable(void) { unsigned long flags; diff --git a/arch/arm/mach-sa1100/jornada56x.c b/arch/arm/mach-sa1100/jornada56x.c new file mode 100644 index 00000000000000..06b1903680cf41 --- /dev/null +++ b/arch/arm/mach-sa1100/jornada56x.c @@ -0,0 +1,238 @@ +/* + * linux/arch/arm/mach-sa1100/jornada56x.c + * + * HP Jornada560 Series init code + * + * Copyright (C) 2008 Michael J Kaye <mjkaye@ippimail.com> + * Based on jornada56x.c from the Handhelds.org tree, copyright Alex Lange, + * and jornada720.c, copyright Kristoffer Ericson, Filip Zyzniewski, and + * Michael Gernoth. + * + * 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. + * + * 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. + * + * Changelog: + * 20080516 MJK Added gpio_keys implementation of Power and LED buttons. + */ + +#include <linux/backlight.h> +#include <linux/delay.h> +#include <linux/fb.h> +#include <linux/gpio_keys.h> +#include <linux/init.h> +#include <linux/ioport.h> +#include <linux/interrupt.h> +#include <linux/input.h> +#include <linux/irq.h> +#include <linux/kernel.h> +#include <linux/lcd.h> +#include <linux/platform_device.h> +#include <linux/tty.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/partitions.h> + +#include <asm/hardware.h> +#include <asm/irq.h> +#include <asm/mach-types.h> +#include <asm/setup.h> + +#include <asm/arch/gpio.h> +#include <asm/arch/jornada56x.h> +#include <asm/arch/SA-1100.h> + +#include <asm/mach/arch.h> +#include <asm/mach/flash.h> +#include <asm/mach/map.h> +#include <asm/mach/serial_sa1100.h> + +#include <../drivers/video/sa1100fb.h> + +#include "generic.h" + +static struct resource jornada56x_asic_resources[] = { + [0] = { + .start = JORNADA56X_ASIC_REGSTART, + .end = JORNADA56X_ASIC_REGSTART + JORNADA56X_ASIC_REGLEN, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = GPIO_JORNADA56X_ASIC_IRQ, + .end = GPIO_JORNADA56X_ASIC_IRQ, + .flags = IORESOURCE_IRQ, + }, +}; + +static u64 jornada56x_asic_dmamask = 0xffffffffUL; +static struct platform_device jornada56x_asic_device = { + .name = "jornada56x_asic", + .id = 0, + .dev = { + .dma_mask = &jornada56x_asic_dmamask, + .coherent_dma_mask = 0xffffffff, + }, + .num_resources = ARRAY_SIZE(jornada56x_asic_resources), + .resource = jornada56x_asic_resources, +}; + +static struct platform_device jornada56x_bllcd_device = { + .name = "jornada56x_bllcd", + .id = -1, +}; + +static struct gpio_keys_button jornada56x_gpio_keys[] = { + { + .type = EV_PWR, + .code = KEY_SUSPEND, + .gpio = GPIO_JORNADA56X_POWER_SWITCH, + .desc = "Power button", + .wakeup = 1, + .active_low = 1, + }, +}; + +static struct gpio_keys_platform_data jornada56x_gpio_keys_platform_data = { + .buttons = jornada56x_gpio_keys, + .nbuttons = ARRAY_SIZE(jornada56x_gpio_keys), +}; + +static struct platform_device jornada56x_gpio_keys_device = { + .name = "gpio-keys", + .id = -1, + .dev = { + .platform_data = &jornada56x_gpio_keys_platform_data, + }, +}; + +static struct platform_device *devices[] __initdata = { + &jornada56x_bllcd_device, + &jornada56x_asic_device, + &jornada56x_gpio_keys_device, +}; + +static void jornada56x_init_irq(void) +{ + sa1100_init_irq(); + jornada56x_asic_init_irq(); +} + +static int __init jornada56x_init(void) +{ + int ret = -ENODEV; + + if (machine_is_jornada56x()) { + GPCR = 0x0f424000; + GPSR = 0x00100000; + GAFR = 0x080803fc; + GPDR = 0x0f5243fc; + GRER = 0x00448C00; + GFER = 0x00448800; + + TUCR = 0xA0000000; + + jornada56x_asic_setup(); /* initialize default ASIC configuration */ + + if (ret = request_irq(GPIO_JORNADA56X_ASIC_IRQ, jornada56x_IRQ_demux, + IRQF_DISABLED, "Jornada56x ASIC", NULL)) { + printk("%s(): request_irq failed\n", __FUNCTION__); + return ret; + } + set_irq_type(GPIO_JORNADA56X_ASIC_IRQ, IRQT_BOTHEDGE); + /* AL's file also has an apm function call, but we'll deal with that later */ + + ret = platform_add_devices(devices, ARRAY_SIZE(devices)); + } + return ret; +} + +arch_initcall(jornada56x_init); + +static struct map_desc jornada56x_io_desc[] __initdata = { + { /* HP ASIC registers */ + .virtual = JORNADA56X_ASIC_BASE, + .pfn = __phys_to_pfn(JORNADA56X_ASIC_REGSTART), + .length = JORNADA56X_ASIC_REGLEN, + .type = MT_DEVICE + } +}; + +static void __init jornada56x_map_io(void) +{ + sa1100_map_io(); + iotable_init(jornada56x_io_desc, ARRAY_SIZE(jornada56x_io_desc)); + + sa1100_register_uart(0, 3); + sa1100_register_uart(1, 1); + + /* configure suspend conditions */ + PGSR = 0; + PWER = 0; + PCFR = 0; + PSDR = 0; + + PGSR |= 0x0f5243fc; /* preserve vital GPIO */ + PWER |= GPIO_JORNADA56X_POWER_SWITCH | PWER_RTC; + PCFR |= PCFR_OPDE; +} + +static struct mtd_partition jornada56x_partitions[] = { + { + name: "bootldr", + size: 0x00040000, + offset: 0, + mask_flags: MTD_WRITEABLE, /* force read-only */ + }, { + name: "rootfs", + size: MTDPART_SIZ_FULL, + offset: 0x00040000, + } +}; + +static void jornada56x_set_vpp(int vpp) +{ + if (vpp) + /* enable flash write */ + GPSR = GPIO_GPIO26; + else + /* enable flash write */ + GPCR = GPIO_GPIO26; + GPDR |= GPIO_GPIO26; +} + +static struct flash_platform_data jornada56x_flash_data = { + .map_name = "cfi_probe", + .set_vpp = jornada56x_set_vpp, + .parts = jornada56x_partitions, + .nr_parts = ARRAY_SIZE(jornada56x_partitions), +}; + +static struct resource jornada56x_flash_resource = { + .start = SA1100_CS0_PHYS, + .end = SA1100_CS0_PHYS + SZ_32M - 1, + .flags = IORESOURCE_MEM, +}; + +static void __init jornada56x_mach_init(void) +{ + sa11x0_set_flash_data(&jornada56x_flash_data, &jornada56x_flash_resource, 1); +} + +MACHINE_START(JORNADA56X, "HP Jornada 56x") + /* Maintainer: Michael J Kaye <mjkaye@ippimail.com> */ + .phys_io = 0x80000000, + .io_pg_offst = ((0xf8000000) >> 18) & 0xfffc, + .boot_params = 0xc0000100, + .map_io = jornada56x_map_io, + .init_irq = jornada56x_init_irq, + .timer = &sa1100_timer, + .init_machine = jornada56x_mach_init, +MACHINE_END diff --git a/arch/arm/mach-sa1100/jornada56x_asic.c b/arch/arm/mach-sa1100/jornada56x_asic.c new file mode 100644 index 00000000000000..916843187aae16 --- /dev/null +++ b/arch/arm/mach-sa1100/jornada56x_asic.c @@ -0,0 +1,341 @@ +/* + * linux/arch/arm/mach-sa1100/jornada56x_asic.c + * + * HP Jornada560 Series init code + * + * Copyright (C) 2008 Michael J Kaye <mjkaye@ippimail.com> + * Based on jornada56x.c from the Handhelds.org tree, copyright Alex Lange, + * + * 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. + * + * 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/delay.h> +#include <linux/init.h> +#include <linux/irq.h> +#include <asm/arch/jornada56x.h> + + +/************************************ + * * + * Jornada 56x Microwire functions * + * * + ************************************/ +int microwire_data[8]; + + +#define ASIC_INT_DELAY 10 /* Poll every 10 milliseconds */ +enum {PCR_GET_VALUE=1, PCR_SET_VALUE, PCR_BIT_SET, PCR_BIT_CLEAR}; + + + +void SetPMUPCRRegister(long arg_action, long arg_value) +{ + long this_pcr; + + /* Read PCR and remove the unwanted bit 6 */ + this_pcr = (((JORNADA_PCR & 0xff80) >>1) | (JORNADA_PCR & 0x3f)); + + this_pcr &= ~(JORNADA_MUX_CLK0 | JORNADA_MUX_CLK1); + if (this_pcr & JORNADA_SM_CLK_EN) + this_pcr |= JORNADA_MUX_CLK1; + else if (this_pcr & JORNADA_MMC_CLK_EN) + this_pcr |= JORNADA_MUX_CLK0; + switch (arg_action) { + case PCR_SET_VALUE: + this_pcr = arg_value; + break; + case PCR_BIT_SET: /* enable controller */ + if(arg_value & JORNADA_SM_CLK_EN) { /* smart card controller */ + this_pcr &= ~(JORNADA_MUX_CLK0 | JORNADA_MUX_CLK1); + this_pcr |= JORNADA_MUX_CLK1; + } + else if(arg_value & JORNADA_MMC_CLK_EN) { /* mmc controller */ + this_pcr &= ~(JORNADA_MUX_CLK0 | JORNADA_MUX_CLK1); + this_pcr |= JORNADA_MUX_CLK0; + } + this_pcr |= arg_value; + break; + case PCR_BIT_CLEAR: /* disable controller */ + /* smart card or mmc controller */ + if (arg_value & (JORNADA_SM_CLK_EN | JORNADA_MMC_CLK_EN)) + this_pcr &= ~(JORNADA_MUX_CLK0 | JORNADA_MUX_CLK1); + this_pcr &= ~arg_value; + break; + case PCR_GET_VALUE: + default: + break; + } + JORNADA_PCR = this_pcr; +} + +void jornada_microwire_init(void) +{ + JORNADA_GPIOAFR |= JORNADA_GP_MW; + udelay(1); + JORNADA_MWFTR = (8 << JORNADA_MWFTR_V_TFT) + | (8 << JORNADA_MWFTR_V_RFT); /* 0x108 */ + udelay(1); + SetPMUPCRRegister(PCR_BIT_SET, JORNADA_MW_CLK_EN); + udelay(1); + JORNADA_MWCR = JORNADA_MW_EN | JORNADA_DSS_16_BIT + | (8 << JORNADA_MWCR_V_SCR) /* 0xa07 */ + | JORNADA_FIFO_RST; /* reset FIFO */ + udelay(1); + JORNADA_MWCR &= ~JORNADA_FIFO_RST; + /* set FIFO interrupt levels to 8 for each of Rx, Tx */ + udelay(1); + JORNADA_MWFTR = (8 << JORNADA_MWFTR_V_TFT) + | (8 << JORNADA_MWFTR_V_RFT); /* 0x108 */ +} + +void jornada_microwire_start(void) +{ +int retry = 90000; + while(retry-- && (JORNADA_MWFSR & JORNADA_MW_RNE)); /* empty out existing data */ +} + +void jornada_microwire_read(int *value1, int *value2) +{ + int i,retry = 1000000; + while (retry-- && !(JORNADA_MWFSR & JORNADA_MW_RFS)); + + for (i = 0; i < 8; i++) + microwire_data[i] = (JORNADA_MWDR & 0xffff) >> 4; + + *value1 = (microwire_data[0] + microwire_data[1] + microwire_data[2] + microwire_data[3]) / 4; + *value2 = (microwire_data[4] + microwire_data[5] + microwire_data[6] + microwire_data[7]) / 4; +} + + +void jornada56x_asic_setup(void) +{ + JORNADA_SCR &= ~JORNADA_ASIC_SLEEP_EN; /* wake up the ASIC */ + udelay(3); + JORNADA_GPIOAFR = JORNADA_GP_PWM1; + JORNADA_SCR |= JORNADA_RCLK_EN; + + mdelay(1); + + SetPMUPCRRegister(PCR_BIT_SET,(JORNADA_GPIO_INT_CLK_EN|JORNADA_PWM1CLK_EN)); + + JORNADA_PWM1_CKDR = 0; + JORNADA_PWM2_CKDR = 0; + + mdelay(2); + + JORNADA_GPBPSR = 0x001B; + JORNADA_GPCPSR = 0x31C0; + JORNADA_GPDPSR = 0xAD99; + + JORNADA_GPBPCR = 0x3E24; + JORNADA_GPCPCR = 0x0002; + JORNADA_GPDPCR = 0x5264; + JORNADA_GPDPSR = JORNADA_RS232_ON; /* enable rs232 transceiver */ + JORNADA_GPDPSR = JORNADA_CF_POWER_OFF; /* turn power off to CF */ + + JORNADA_GPBPSDR = 0x81FF; + JORNADA_GPCPSDR = 0xB96F; + JORNADA_GPDPSDR = 0xFBFF; + + JORNADA_GPBPSLR = 0x00D0; + JORNADA_GPCPSLR = 0x0000; + JORNADA_GPDPSLR = 0xA198; + + JORNADA_GPBPFDR = 0x81FF; + JORNADA_GPCPFDR = 0xB96F; + JORNADA_GPDPFDR = 0xFBFF; + + JORNADA_GPBPFLR = 0x01D0; + JORNADA_GPCPFLR = 0x0000; + JORNADA_GPDPFLR = 0xA198; + + JORNADA_GPBPDR = 0x01FF; + JORNADA_GPCPDR = 0x37C2; + JORNADA_GPDPDR = 0xFFFF; + + JORNADA_GPBPCR = 0x1c0; /* Buttons: row lines all output 0 */ + JORNADA_GPBPDR |= 0x1c0; /* Buttons: turn row lines into outputs */ + + mdelay(2); /* Delay 2 milliseconds. */ + JORNADA_INT_EN |= JORNADA_GPIO_B_INT | JORNADA_GPIO_C_INT; + + jornada_microwire_init(); + + /* Clear screen here */ + JORNADA_GPDPCR = GPIO_GPIO5; + JORNADA_GPDPCR = GPIO_GPIO13; /* Turn on power to panel */ + JORNADA_GPDPSR = GPIO_GPIO14; /* force GPIO-D14 to high */ + mdelay(100); +} + +/* + * Jornada 56x ASIC interrupt support. + */ +static void irq_ack_low(unsigned int irq) +{ + JORNADA_INT_STAT = (1 << (irq - IRQ_MMC_MAIN)); +} + +static void irq_mask_low(unsigned int irq) +{ + JORNADA_INT_EN &= ~(1 << (irq - IRQ_MMC_MAIN)); +} + +static void irq_unmask_low(unsigned int irq) +{ + JORNADA_INT_EN |= (1 << (irq - IRQ_MMC_MAIN)); +} + +static struct irq_chip irq_low = { + .ack = irq_ack_low, + .mask = irq_mask_low, + .unmask = irq_unmask_low, +}; + +static void irq_ack_high(unsigned int irq) +{ + JORNADA_INT_STAT2 = (1 << (irq - IRQ_UART_MAIN)); +} + +static void irq_mask_high(unsigned int irq) +{ + JORNADA_INT_EN2 &= ~(1 << (irq - IRQ_UART_MAIN)); +} + +static void irq_unmask_high(unsigned int irq) +{ + JORNADA_INT_EN2 |= (1 << (irq - IRQ_UART_MAIN)); +} + +static struct irq_chip irq_high = { + .ack = irq_ack_high, + .mask = irq_mask_high, + .unmask = irq_unmask_high, +}; + +static void irq_ack_gpiob(unsigned int irq) +{ + JORNADA_GPIOB_STAT = (1 << (irq - IRQ_GPIOB_B0)); +} + +static void irq_mask_gpiob(unsigned int irq) +{ + JORNADA_GPIOB_FE_EN &= ~(1 << (irq - IRQ_GPIOB_B0)); +} + +static void irq_unmask_gpiob(unsigned int irq) +{ + JORNADA_GPIOB_FE_EN |= (1 << (irq - IRQ_GPIOB_B0)); +} + +static struct irq_chip irq_gpiob = { + .ack = irq_ack_gpiob, + .mask = irq_mask_gpiob, + .unmask = irq_unmask_gpiob, +}; + +static void irq_ack_gpioc(unsigned int irq) +{ + JORNADA_GPIOC_STAT = (1 << (irq - IRQ_GPIOC_C0)); +} + +static void irq_mask_gpioc(unsigned int irq) +{ + JORNADA_GPIOC_FE_EN &= ~(1 << (irq - IRQ_GPIOC_C0)); +} + +static void irq_unmask_gpioc(unsigned int irq) +{ + JORNADA_GPIOC_FE_EN |= (1 << (irq - IRQ_GPIOC_C0)); +} + +static struct irq_chip irq_gpioc = { + .ack = irq_ack_gpioc, + .mask = irq_mask_gpioc, + .unmask = irq_unmask_gpioc, +}; + +extern asmlinkage void asm_do_IRQ(int irq); + +void __init jornada56x_asic_init_irq(void) +{ + unsigned int irq; + +/* Should this be replaced with a request_resource() */ +/* alloc_irq_space(64); */ + + JORNADA_INT_EN = 0; + JORNADA_INT_STAT = 0xffff; + JORNADA_INT_EN2 = 0; + JORNADA_INT_STAT2 = 0xffff; + JORNADA_GPIOB_FE_EN = 0; + JORNADA_GPIOB_RE_EN = 0; + JORNADA_GPIOB_STAT = 0xffff; + JORNADA_GPIOC_FE_EN = 0; + JORNADA_GPIOC_RE_EN = 0; + JORNADA_GPIOC_STAT = 0xffff; + + for (irq = IRQ_MMC_MAIN; irq <= IRQ_MMC_MAIN + 15; irq++) { + set_irq_chip(irq, &irq_low); + set_irq_handler(irq, handle_edge_irq); + set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); + } + + for (irq = IRQ_UART_MAIN; irq <= IRQ_UART_MAIN + 15; irq++) { + set_irq_chip(irq, &irq_high); + set_irq_handler(irq, handle_edge_irq); + set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); + } + + for (irq = IRQ_GPIOB_B0; irq <= IRQ_GPIOB_B0 + 15; irq++) { + set_irq_chip(irq, &irq_gpiob); + set_irq_handler(irq, handle_edge_irq); + set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); + } + + for (irq = IRQ_GPIOC_C0; irq <= IRQ_GPIOC_C0 + 15; irq++) { + set_irq_chip(irq, &irq_gpioc); + set_irq_handler(irq, handle_edge_irq); + set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); + } +} + + +irqreturn_t jornada56x_IRQ_demux(int irq, void *dev_id) +{ +unsigned long stat0, stat1, statb, statc; +int i, found_one; + + do { + found_one = 0; + stat0 = JORNADA_INT_STAT & 0xffff & JORNADA_INT_EN + & ~(JORNADA_GPIO_B_INT | JORNADA_GPIO_C_INT); + stat1 = JORNADA_INT_STAT2 & 0xffff & JORNADA_INT_EN2; + statb = JORNADA_GPIOB_STAT & 0xffff & JORNADA_GPIOB_FE_EN; + statc = JORNADA_GPIOC_STAT & 0xffff & JORNADA_GPIOC_FE_EN; + #define CHECK_STAT(A,B) \ + for (i = A; B; i++, B >>= 1) \ + if (B & 1) { \ + found_one = 1; \ + asm_do_IRQ(i); \ + } + CHECK_STAT(IRQ_MMC_MAIN, stat0); + CHECK_STAT(IRQ_UART_MAIN, stat1); + CHECK_STAT(IRQ_GPIOB_B0, statb); + CHECK_STAT(IRQ_GPIOC_C0, statc); + } while(found_one); + + return IRQ_HANDLED; +} diff --git a/arch/arm/mach-sa1100/jornada720.c b/arch/arm/mach-sa1100/jornada720.c index 52ac37d1e23aa9..0066974d47d159 100644 --- a/arch/arm/mach-sa1100/jornada720.c +++ b/arch/arm/mach-sa1100/jornada720.c @@ -226,12 +226,30 @@ static struct platform_device jornada_ssp_device = { .id = -1, }; +static struct platform_device jornada_bllcd_device = { + .name = "jornada_bllcd", + .id = -1, +}; + +static struct platform_device jornada_kbd_device = { + .name = "jornada720_kbd", + .id = -1, +}; + +static struct platform_device jornada_ts_device = { + .name = "jornada_ts", + .id = -1, +}; + static struct platform_device *devices[] __initdata = { &sa1111_device, #ifdef CONFIG_SA1100_JORNADA720_SSP &jornada_ssp_device, #endif &s1d13xxxfb_device, + &jornada_bllcd_device, + &jornada_kbd_device, + &jornada_ts_device, }; static int __init jornada720_init(void) @@ -285,6 +303,7 @@ static void __init jornada720_map_io(void) sa1100_register_uart(1, 1); } +#ifdef CONFIG_SA1100_JORNADA720_FLASHROM_OLD static struct mtd_partition jornada720_partitions[] = { { .name = "JORNADA720 boot firmware", @@ -346,6 +365,7 @@ static void __init jornada720_mach_init(void) { sa11x0_set_flash_data(&jornada720_flash_data, &jornada720_flash_resource, 1); } +#endif MACHINE_START(JORNADA720, "HP Jornada 720") /* Maintainer: Kristoffer Ericson <Kristoffer.Ericson@gmail.com> */ @@ -355,5 +375,7 @@ MACHINE_START(JORNADA720, "HP Jornada 720") .map_io = jornada720_map_io, .init_irq = sa1100_init_irq, .timer = &sa1100_timer, +#ifdef CONFIG_JORNADA720_FLASHROM_OLD .init_machine = jornada720_mach_init, +#endif MACHINE_END diff --git a/arch/arm/mach-sa1100/jornada720_apm.c b/arch/arm/mach-sa1100/jornada720_apm.c new file mode 100644 index 00000000000000..c6ed8d07a95ce5 --- /dev/null +++ b/arch/arm/mach-sa1100/jornada720_apm.c @@ -0,0 +1,166 @@ +/** + * + * Copryright (C) 2007,2008 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> + * Copyright (C) 2006 Filip Zyzniewski <filip.zyzniewski@tefnet.pl> + * + * HP Jornada 710/720/728 Battery detection (APM) driver + * + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/delay.h> +#include <linux/device.h> +#include <linux/apm-emulation.h> + +#include <asm/hardware.h> +#include <asm/arch/jornada720.h> + +MODULE_AUTHOR("Filip Zyzniewski <filip.zyzniewski@tefnet.pl>, Kristoffer Ericson <kristoffer.ericson@gmail.com>"); +MODULE_DESCRIPTION("HP Jornada 710/720/728 battery status reporting"); +MODULE_LICENSE("GPL"); + +/** + * voltage && detection + */ +#define max_voltage 670 /* max voltage without ac power */ +#define min_voltage 430 /* min voltage */ +#define ac_connected() ((GPLR & GPIO_GPIO4) ? 0 : 1) /* is ac connected? */ +#define ac_charging() (! (GPLR & GPIO_GPIO26) ) /* are we charging? */ + +/** + * battery calculations + */ +#define main_diff (max_voltage - min_voltage) /* just to keep defines small */ +#define main_ac_coeff 100 / 105 /* correcting battery values when with ac */ +#define main_divisor (main_diff * main_diff) / 100 /* battery power to percent */ +#define main_lin_corr (main_diff * main_diff) / 2 /* adjusting for non-linearity */ + +int jornada720_apm_get_battery_raw(int battnum) +{ + unsigned char low_byte, high_byte, msb; + + jornada_ssp_start(); + + /* if ssp connection fails we bail out */ + if(jornada_ssp_inout(GETBATTERYDATA) < 0) { + printk(KERN_WARNING "APM: Failed trying to aquire battery data \n"); + jornada_ssp_end(); + return -1; + } + + low_byte = jornada_ssp_inout(TXDUMMY); /* backup battery value */ + high_byte = jornada_ssp_inout(TXDUMMY); /* main battery value */ + msb = jornada_ssp_inout(TXDUMMY); /* status */ + + jornada_ssp_end(); + + /* main battery */ + if (battnum) { + if ((msb & 0x03) == 0x03) return -1; /* main battery absent */ + return ((msb & 0x03) << 8) + low_byte; /* wrapping values */ + } + /* backup battery */ + else { + if ((msb & 0x0c) == 0x00) return -1; /* backup battery abset */ + return ((msb & 0x0c) << 6) + high_byte; /* wrapping values */ + } +} + +int jornada720_apm_get_battery(int battnum) +{ + int ret = jornada720_apm_get_battery_raw(battnum); + + if (ret == -1) + return ret; + + /* main battery only, cannot calculate backup battery */ + if (battnum) { + ret -= min_voltage; /* we want 0 for fully drained battery */ + + /* trying to get values more linear */ + ret *= ret; + if(ret > 37000) ret = ret * 3/2 - main_lin_corr; + else ret = ret * 7/10; + + ret /= main_divisor; /* 0-100% range */ + + if (ac_connected()) /* adjusting for ac fluctuations */ + ret = ret * main_ac_coeff; + + if (ret > 100) ret=100; /* should never report above 100% */ + } + return ret; +} + +static void jornada720_apm_get_power_status(struct apm_power_info *info) +{ + + info->battery_life=jornada720_apm_get_battery(1); /* main battery */ + + if (info->battery_life==-1) { + info->battery_status = APM_BATTERY_STATUS_NOT_PRESENT; + info->battery_flag = APM_BATTERY_FLAG_NOT_PRESENT; + + } else if (info->battery_life < 30) { + info->battery_status = APM_BATTERY_STATUS_LOW; + info->battery_flag = APM_BATTERY_FLAG_LOW; + + } else if (info->battery_life < 5) { + info->battery_status = APM_BATTERY_STATUS_CRITICAL; + info->battery_flag = APM_BATTERY_FLAG_CRITICAL; + + } else { + info->battery_status = APM_BATTERY_STATUS_HIGH; + info->battery_flag = APM_BATTERY_FLAG_HIGH; + } + + if (ac_charging()) + info->battery_status = APM_BATTERY_STATUS_CHARGING; + + info->ac_line_status = ac_connected(); +} + +static int jornada720_apm_probe(struct device *dev) { + + /* we provide a function to check battery levels etc */ + apm_get_power_status=jornada720_apm_get_power_status; + + return 0; +} + +static int jornada720_apm_remove(struct device *dev) { + if(apm_get_power_status==jornada720_apm_get_power_status) + apm_get_power_status=NULL; + return 0; +} + +static struct device_driver jornada720_apm_driver = { + .name = "jornada_apm_driver", + .probe = jornada720_apm_probe, + .remove = jornada720_apm_remove, + .owner = THIS_MODULE, +}; + +static int __init jornada720_apm_init(void) { + int ret, backup_level; + + ret = driver_register(&jornada720_apm_driver); + if(ret) return ret; + + backup_level = jornada720_apm_get_battery(0); /* backup battery */ + + if(backup_level != -1) + printk(KERN_INFO "jornada720_apm: backup battery level: %i\n", backup_level); + else + printk(KERN_INFO "jornada720_apm: backup battery not present\n"); + + return ret; +} + +static void __exit jornada720_apm_exit(void) { + driver_unregister(&jornada720_apm_driver); +} + +module_init(jornada720_apm_init); +module_exit(jornada720_apm_exit); diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c index fdf7b016e7adea..c2677368d6af95 100644 --- a/arch/arm/mach-sa1100/time.c +++ b/arch/arm/mach-sa1100/time.c @@ -14,6 +14,7 @@ #include <linux/irq.h> #include <linux/timex.h> #include <linux/signal.h> +#include <linux/clocksource.h> #include <asm/mach/time.h> #include <asm/hardware.h> @@ -35,23 +36,6 @@ static int sa1100_set_rtc(void) return 0; } -/* IRQs are disabled before entering here from do_gettimeofday() */ -static unsigned long sa1100_gettimeoffset (void) -{ - unsigned long ticks_to_match, elapsed, usec; - - /* Get ticks before next timer match */ - ticks_to_match = OSMR0 - OSCR; - - /* We need elapsed ticks since last match */ - elapsed = LATCH - ticks_to_match; - - /* Now convert them to usec */ - usec = (unsigned long)(elapsed * (tick_nsec / 1000))/LATCH; - - return usec; -} - #ifdef CONFIG_NO_IDLE_HZ static unsigned long initial_match; static int match_posponed; @@ -62,8 +46,6 @@ sa1100_timer_interrupt(int irq, void *dev_id) { unsigned int next_match; - write_seqlock(&xtime_lock); - #ifdef CONFIG_NO_IDLE_HZ if (match_posponed) { match_posponed = 0; @@ -85,8 +67,6 @@ sa1100_timer_interrupt(int irq, void *dev_id) next_match = (OSMR0 += LATCH); } while ((signed long)(next_match - OSCR) <= 0); - write_sequnlock(&xtime_lock); - return IRQ_HANDLED; } @@ -96,6 +76,20 @@ static struct irqaction sa1100_timer_irq = { .handler = sa1100_timer_interrupt, }; +static cycle_t sa1100_read_oscr(void) +{ + return OSCR; +} + +static struct clocksource cksrc_sa1100_oscr = { + .name = "oscr", + .rating = 200, + .read = sa1100_read_oscr, + .mask = CLOCKSOURCE_MASK(32), + .shift = 20, + .flags = CLOCK_SOURCE_IS_CONTINUOUS, +}; + static void __init sa1100_timer_init(void) { unsigned long flags; @@ -109,6 +103,11 @@ static void __init sa1100_timer_init(void) OIER = OIER_E0; /* enable match on timer 0 to cause interrupts */ OSMR0 = OSCR + LATCH; /* set initial match */ local_irq_restore(flags); + + cksrc_sa1100_oscr.mult = + clocksource_hz2mult(CLOCK_TICK_RATE, cksrc_sa1100_oscr.shift); + + clocksource_register(&cksrc_sa1100_oscr); } #ifdef CONFIG_NO_IDLE_HZ @@ -182,7 +181,6 @@ struct sys_timer sa1100_timer = { .init = sa1100_timer_init, .suspend = sa1100_timer_suspend, .resume = sa1100_timer_resume, - .offset = sa1100_gettimeoffset, #ifdef CONFIG_NO_IDLE_HZ .dyn_tick = &sa1100_dyn_tick, #endif diff --git a/arch/sh/boards/hp6xx/hp6xx_apm.c b/arch/sh/boards/hp6xx/hp6xx_apm.c index 640ca2a74f163c..52f522815a5a03 100644 --- a/arch/sh/boards/hp6xx/hp6xx_apm.c +++ b/arch/sh/boards/hp6xx/hp6xx_apm.c @@ -1,6 +1,7 @@ /* * bios-less APM driver for hp680 * + * Copyright 2008 (c) Kristoffer Ericson <kristoffer.ericson@gmail.com> * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com> * * This program is free software; you can redistribute it and/or @@ -15,11 +16,11 @@ #include <asm/adc.h> #include <asm/hp6xx.h> -#define SH7709_PGDR 0xa400012c - +/* percentage values */ #define APM_CRITICAL 10 #define APM_LOW 30 +/* resonably sane values */ #define HP680_BATTERY_MAX 898 #define HP680_BATTERY_MIN 486 #define HP680_BATTERY_AC_ON 1023 @@ -38,17 +39,26 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info) percentage = 100 * (battery - HP680_BATTERY_MIN) / (HP680_BATTERY_MAX - HP680_BATTERY_MIN); + /* % of full battery */ + info->battery_life = percentage; + + /* We want our estimates in minutes */ + info->units = 0; + + /* Extremely(!!) rough estimate, we will replace this with a datalist later on */ + info->time = (2 * battery); + info->ac_line_status = (battery > HP680_BATTERY_AC_ON) ? APM_AC_ONLINE : APM_AC_OFFLINE; - pgdr = ctrl_inb(SH7709_PGDR); + pgdr = ctrl_inb(PGDR); if (pgdr & PGDR_MAIN_BATTERY_OUT) { info->battery_status = APM_BATTERY_STATUS_NOT_PRESENT; info->battery_flag = 0x80; } else if (charging < 8) { info->battery_status = APM_BATTERY_STATUS_CHARGING; info->battery_flag = 0x08; - info->ac_line_status = 0xff; + info->ac_line_status = 0x01; } else if (percentage <= APM_CRITICAL) { info->battery_status = APM_BATTERY_STATUS_CRITICAL; info->battery_flag = 0x04; @@ -59,8 +69,6 @@ static void hp6x0_apm_get_power_status(struct apm_power_info *info) info->battery_status = APM_BATTERY_STATUS_HIGH; info->battery_flag = 0x01; } - - info->units = 0; } static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev) @@ -71,6 +79,8 @@ static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev) return IRQ_HANDLED; } +extern void (*apm_get_power_status)(struct apm_power_info *); + static int __init hp6x0_apm_init(void) { int ret; diff --git a/arch/sh/boards/hp6xx/pm.c b/arch/sh/boards/hp6xx/pm.c index d22f6eac9ccabb..6a2112aeb7c041 100644 --- a/arch/sh/boards/hp6xx/pm.c +++ b/arch/sh/boards/hp6xx/pm.c @@ -10,14 +10,25 @@ #include <linux/suspend.h> #include <linux/errno.h> #include <linux/time.h> +#include <linux/apm-emulation.h> #include <asm/io.h> #include <asm/hd64461.h> #include <asm/hp6xx.h> #include <asm/cpu/dac.h> #include <asm/pm.h> -#define STBCR 0xffffff82 -#define STBCR2 0xffffff88 +#define STBCR 0xffffff82 /* STBCR (Standby control register) SH7709A */ +#define STBCR2 0xffffff88 /* STBCR2 (Standby control register 2) SH7709A */ +/* 1 = true, 0 = false + bit 0 - Clock supply to SCI1 (IRDA) halted + bit 1 - Clock supply to SCI2 (SCIF) halted + bit 2 - Clock supply to ADC halted and all registers initialized + bit 3 - Clock supply to DAC halted + bit 4 - Clock supply to DMAC halted + bit 5 - Clock supply to UBC is halted + bit 6 - Pins MD5 to MD0 are changed in standby mode + bit 7 - Reserved +*/ static int hp6x0_pm_enter(suspend_state_t state) { @@ -28,38 +39,48 @@ static int hp6x0_pm_enter(suspend_state_t state) #endif #ifdef CONFIG_HD64461_ENABLER + /* disable all CF interrupts */ outb(0, HD64461_PCC1CSCIER); - scr = inb(HD64461_PCC1SCR); scr |= HD64461_PCCSCR_VCC1; outb(scr, HD64461_PCC1SCR); + /* get standby status of all devices */ hd64461_stbcr = inw(HD64461_STBCR); + /* add standby mode to CF slot */ hd64461_stbcr |= HD64461_STBCR_SPC1ST; outw(hd64461_stbcr, HD64461_STBCR); #endif - ctrl_outb(0x1f, DACR); + /* chan 0/1 D/A conversion and DA 0/1 output are enabled */ + outb(0x1f, DACR); - stbcr = ctrl_inb(STBCR); - ctrl_outb(0x01, STBCR); + /* halt clocksupply to SCI */ + stbcr = inb(STBCR); + outb(0x01, STBCR); - stbcr2 = ctrl_inb(STBCR2); - ctrl_outb(0x7f , STBCR2); + /* state and drop all clocksupply */ + stbcr2 = inb(STBCR2); + outb(0x7f , STBCR2); + /* allow IO Ports D + C, disallow A + B */ outw(0xf07f, HD64461_SCPUCR); + /* Zzzzz */ pm_enter(); + /* wakeup, Lets restore the old values */ outw(0, HD64461_SCPUCR); - ctrl_outb(stbcr, STBCR); - ctrl_outb(stbcr2, STBCR2); + outb(stbcr, STBCR); + outb(stbcr2, STBCR2); #ifdef CONFIG_HD64461_ENABLER + /* get standby status of all devices */ hd64461_stbcr = inw(HD64461_STBCR); + /* remove standby mode for CF slot */ hd64461_stbcr &= ~HD64461_STBCR_SPC1ST; outw(hd64461_stbcr, HD64461_STBCR); - + /* turn on CF interrupt again */ outb(0x4c, HD64461_PCC1CSCIER); outb(0x00, HD64461_PCC1CSCR); #endif diff --git a/arch/sh/boards/hp6xx/setup.c b/arch/sh/boards/hp6xx/setup.c index 2f414ac3c69090..65a46fac744dca 100644 --- a/arch/sh/boards/hp6xx/setup.c +++ b/arch/sh/boards/hp6xx/setup.c @@ -21,7 +21,7 @@ #define SCPCR 0xa4000116 #define SCPDR 0xa4000136 -/* CF Slot */ +/* CF slot configured as storage */ static struct resource cf_ide_resources[] = { [0] = { .start = 0x15000000 + 0x1f0, @@ -51,9 +51,21 @@ static struct platform_device jornadakbd_device = { .id = -1, }; +static struct platform_device hp6xxled_device = { + .name = "hp6xx-led", + .id = -1, +}; + +static struct platform_device jornadats_device = { + .name = "jornada_ts", + .id = -1, +}; + static struct platform_device *hp6xx_devices[] __initdata = { &cf_ide_device, &jornadakbd_device, + &jornadats_device, + &hp6xxled_device, }; static void __init hp6xx_init_irq(void) @@ -73,23 +85,25 @@ static void __init hp6xx_setup(char **cmdline_p) u16 v; v = inw(HD64461_STBCR); - v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST | - HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST | - HD64461_STBCR_SAFEST | HD64461_STBCR_SPC0ST | - HD64461_STBCR_SMIAST | HD64461_STBCR_SAFECKE_OST| + v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST | + HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST | + HD64461_STBCR_SAFEST | HD64461_STBCR_SPC0ST | + HD64461_STBCR_SMIAST | HD64461_STBCR_SAFECKE_OST| HD64461_STBCR_SAFECKE_IST; #ifndef CONFIG_HD64461_ENABLER - v |= HD64461_STBCR_SPC1ST; + v |= HD6446x_STBCR_PCC1; #endif - outw(v, HD64461_STBCR); - v = inw(HD64461_GPADR); + ctrl_outw(v, HD64461_STBCR); + v = ctrl_inw(HD64461_GPADR); v |= HD64461_GPADR_SPEAKER | HD64461_GPADR_PCMCIA0; - outw(v, HD64461_GPADR); + ctrl_outw(v, HD64461_GPADR); - outw(HD64461_PCCGCR_VCC0 | HD64461_PCCSCR_VCC1, HD64461_PCC0GCR); + /* set voltage control pin to high level (PCC0SEL)*/ + ctrl_outw(HD64461_PCCGCR_VCC0 | HD64461_PCCSCR_VCC1, HD64461_PCC0GCR); #ifndef CONFIG_HD64461_ENABLER - outw(HD64461_PCCGCR_VCC0 | HD64461_PCCSCR_VCC1, HD64461_PCC1GCR); + /* set voltage control pin to high level (PCC1SEL)*/ + ctrl_outw(HD64461_PCCGCR_VCC0 | HD64461_PCCSCR_VCC1, HD64461_PCC1GCR); #endif sh_dac_output(0, DAC_SPEAKER_VOLUME); @@ -107,15 +121,31 @@ static void __init hp6xx_setup(char **cmdline_p) v &= ~SCPCR_TS_MASK; v |= SCPCR_TS_ENABLE; ctrl_outw(v, SCPCR); + } device_initcall(hp6xx_devices_setup); +static void __iomem *port_map(unsigned long port, unsigned int size) +{ + /* this is for all drivers actually accepting io_offset */ + if (0xf300<=port && port<=0xf31f) + port = port - 0xf000; + + /* non-port? then just return it */ + if (PXSEG(port)) + return (void __iomem *)(port); + + /* add base value and return it */ + return (void __iomem *)(0xba000000 + port); +} + static struct sh_machine_vector mv_hp6xx __initmv = { - .mv_name = "hp6xx", + .mv_name = "HP Jornada 6xx", .mv_setup = hp6xx_setup, /* IRQ's : CPU(64) + CCHIP(16) + FREE_TO_USE(6) */ .mv_nr_irqs = HD64461_IRQBASE + HD64461_IRQ_NUM + 6, .mv_irq_demux = hd64461_irq_demux, /* Enable IRQ0 -> IRQ3 in IRQ_MODE */ .mv_init_irq = hp6xx_init_irq, + .mv_ioport_map = port_map, }; diff --git a/arch/sh/cchips/hd6446x/Makefile b/arch/sh/cchips/hd6446x/Makefile index f7de4076e242de..ea4a9bdfe4ca66 100644 --- a/arch/sh/cchips/hd6446x/Makefile +++ b/arch/sh/cchips/hd6446x/Makefile @@ -1,4 +1,4 @@ obj-$(CONFIG_HD64461) += hd64461.o -obj-$(CONFIG_HD64465) += hd64465/ +obj-$(CONFIG_HD64465) += hd64465.o EXTRA_CFLAGS += -Werror diff --git a/arch/sh/cchips/hd6446x/hd64461.c b/arch/sh/cchips/hd6446x/hd64461.c index f1a4a0763c5991..488dccd58c0702 100644 --- a/arch/sh/cchips/hd6446x/hd64461.c +++ b/arch/sh/cchips/hd6446x/hd64461.c @@ -137,6 +137,8 @@ static struct irqaction irq0 = { int __init setup_hd64461(void) { int i; + unsigned char cscier; + if (!MACH_HD64461) return 0; @@ -159,11 +161,20 @@ int __init setup_hd64461(void) setup_irq(CONFIG_HD64461_IRQ, &irq0); #ifdef CONFIG_HD64461_ENABLER - printk(KERN_INFO "HD64461: enabling PCMCIA devices\n"); + printk(KERN_INFO "HD64461: enabling pcmcia slot 1 (storage)\n"); outb(0x4c, HD64461_PCC1CSCIER); outb(0x00, HD64461_PCC1CSCR); #endif +#ifdef CONFIG_HD64461_PCMCIA + printk(KERN_INFO "HD64461: enabling pcmcia slot 0 (io / storage)\n"); + + cscier = HD64461_PCCCSCIER_IREQE_FALLING | HD64461_PCCCSCIER_RE | + HD64461_PCCCSCIER_SCE | HD64461_PCCCSCIER_CDE; + + outb(cscier, HD64461_PCC0CSCIER); +#endif + return 0; } diff --git a/arch/sh/kernel/cpu/irq/intc.c b/arch/sh/kernel/cpu/irq/intc.c index 6ac018c15e0355..2dfb7cf588985d 100644 --- a/arch/sh/kernel/cpu/irq/intc.c +++ b/arch/sh/kernel/cpu/irq/intc.c @@ -211,12 +211,23 @@ static void intc_disable(unsigned int irq) unsigned long handle = (unsigned long) get_irq_chip_data(irq); unsigned long addr; unsigned int cpu; + unsigned int IRR0_var; + unsigned int IRR0 = 0xa4000004; for (cpu = 0; cpu < SMP_NR(d, _INTC_ADDR_D(handle)); cpu++) { addr = INTC_REG(d, _INTC_ADDR_D(handle), cpu); intc_disable_fns[_INTC_MODE(handle)](addr, handle,intc_reg_fns\ [_INTC_FN(handle)], irq); } + + #ifdef CONFIG_CPU_SUBTYPE_SH7709 + /* need to mask out IRQ0->IRQ5 interrupt */ + if ((irq < 37) && (irq > 31)) { + IRR0_var = ctrl_inb(IRR0); + IRR0_var &= ~(1 << (irq - 32)); + ctrl_outb(IRR0_var, IRR0); + } + #endif } static struct intc_handle_int *intc_find_irq(struct intc_handle_int *hp, diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c index 60b04b1f945389..f6dc7dabe22690 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c @@ -130,15 +130,15 @@ static struct resource rtc_resources[] = { .flags = IORESOURCE_IO, }, [1] = { - .start = 20, + .start = 21, .flags = IORESOURCE_IRQ, }, [2] = { - .start = 21, + .start = 22, .flags = IORESOURCE_IRQ, }, [3] = { - .start = 22, + .start = 20, .flags = IORESOURCE_IRQ, }, }; diff --git a/config-hp56x-2.6.24 b/config-hp56x-2.6.24 new file mode 100644 index 00000000000000..97b15ec13bbb86 --- /dev/null +++ b/config-hp56x-2.6.24 @@ -0,0 +1,1108 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-jlime +# Fri May 16 12:58:36 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +# CONFIG_GENERIC_TIME is not set +# CONFIG_GENERIC_CLOCKEVENTS is not set +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="jlime-j56x" +CONFIG_LOCALVERSION_AUTO=y +# CONFIG_SWAP is not set +# CONFIG_SYSVIPC is not set +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=12 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_COLLIE is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_BADGE4 is not set +CONFIG_SA1100_JORNADA56X=y +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_SSP is not set + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y +CONFIG_CPU_ABRT_EV4=y +CONFIG_CPU_CACHE_V4WB=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WB=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# +CONFIG_ISA=y +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_PCMCIA_SA1100=y + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +CONFIG_PREEMPT=y +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +# CONFIG_AEABI is not set +CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_NODES_SHIFT=2 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_DISCONTIGMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_DISCONTIGMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_NEED_MULTIPLE_NODES=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +# CONFIG_FPE_NWFPE is not set +CONFIG_FPE_FASTFPE=y + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=y +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=y + +# +# IrDA protocols +# +# CONFIG_IRLAN is not set +# CONFIG_IRCOMM is not set +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +# CONFIG_IRTTY_SIR is not set + +# +# Dongle support +# + +# +# Old SIR device drivers +# +# CONFIG_IRPORT_SIR is not set + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +CONFIG_SA1100_FIR=y +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +# CONFIG_IEEE80211 is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_CHAR is not set +CONFIG_MTD_BLKDEVS=y +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +CONFIG_FTL=y +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_MTD_OOPS is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_XIP is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_SA1100=y +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set +# CONFIG_PARPORT is not set +# CONFIG_PNP is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set + +# +# Other IDE chipsets support +# + +# +# Note: most of these also require special kernel boot parameters +# +# CONFIG_BLK_DEV_4DRIVES is not set +# CONFIG_BLK_DEV_ALI14XX is not set +# CONFIG_BLK_DEV_DTC2278 is not set +# CONFIG_BLK_DEV_HT6560B is not set +# CONFIG_BLK_DEV_QD65XX is not set +# CONFIG_BLK_DEV_UMC8672 is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +# CONFIG_SCSI is not set +# CONFIG_SCSI_DMA is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +# CONFIG_NETDEVICES is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=240 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_BITBANG is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_AT25 is not set +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_PDA_POWER=y +CONFIG_APM_POWER=y +# CONFIG_BATTERY_DS2760 is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA11X0=y +# CONFIG_MCP_UCB1200 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +CONFIG_FB_SA1100=y +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_S1D13MP900 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +# CONFIG_LCD_LTV350QV is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_HP56X=y + +# +# Display device support +# +CONFIG_DISPLAY_SUPPORT=y + +# +# Display hardware drivers +# + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +# CONFIG_USB is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +CONFIG_USB_GADGET_SELECTED=y +# CONFIG_USB_GADGET_AMD5536UDC is not set +# CONFIG_USB_GADGET_ATMEL_USBA is not set +# CONFIG_USB_GADGET_FSL_USB2 is not set +# CONFIG_USB_GADGET_NET2280 is not set +# CONFIG_USB_GADGET_PXA2XX is not set +CONFIG_USB_GADGET_M66592=y +CONFIG_USB_M66592=y +# CONFIG_USB_GADGET_GOKU is not set +# CONFIG_USB_GADGET_LH7A40X is not set +# CONFIG_USB_GADGET_OMAP is not set +# CONFIG_USB_GADGET_S3C2410 is not set +# CONFIG_USB_GADGET_AT91 is not set +# CONFIG_USB_GADGET_DUMMY_HCD is not set +CONFIG_USB_GADGET_DUALSPEED=y +# CONFIG_USB_ZERO is not set +CONFIG_USB_ETH=y +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FILE_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_MMC is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +# CONFIG_LEDS_TRIGGER_IDE_DISK is not set +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_POSIX_ACL is not set +# CONFIG_EXT2_FS_SECURITY is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +# CONFIG_EXT3_FS_XATTR is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +# CONFIG_DNOTIFY is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +# CONFIG_JFFS2_LZO is not set +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +CONFIG_CRAMFS=y +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=y +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=y +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=y +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_SLUB_DEBUG_ON is not set +CONFIG_DEBUG_PREEMPT=y +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_ERRORS is not set +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +# CONFIG_CRYPTO is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/config-hp6xx-2.6.24 b/config-hp6xx-2.6.24 new file mode 100644 index 00000000000000..63b57a286aface --- /dev/null +++ b/config-hp6xx-2.6.24 @@ -0,0 +1,1174 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-jlime +# Wed Mar 19 18:13:48 2008 +# +CONFIG_SUPERH=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_SYS_SUPPORTS_PM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_ARCH_NO_VIRT_TO_BUS=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_FAIR_GROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System type +# +CONFIG_CPU_SH3=y +# CONFIG_CPU_SUBTYPE_SH7619 is not set +# CONFIG_CPU_SUBTYPE_SH7206 is not set +# CONFIG_CPU_SUBTYPE_SH7705 is not set +# CONFIG_CPU_SUBTYPE_SH7706 is not set +# CONFIG_CPU_SUBTYPE_SH7707 is not set +# CONFIG_CPU_SUBTYPE_SH7708 is not set +CONFIG_CPU_SUBTYPE_SH7709=y +# CONFIG_CPU_SUBTYPE_SH7710 is not set +# CONFIG_CPU_SUBTYPE_SH7712 is not set +# CONFIG_CPU_SUBTYPE_SH7720 is not set +# CONFIG_CPU_SUBTYPE_SH7750 is not set +# CONFIG_CPU_SUBTYPE_SH7091 is not set +# CONFIG_CPU_SUBTYPE_SH7750R is not set +# CONFIG_CPU_SUBTYPE_SH7750S is not set +# CONFIG_CPU_SUBTYPE_SH7751 is not set +# CONFIG_CPU_SUBTYPE_SH7751R is not set +# CONFIG_CPU_SUBTYPE_SH7760 is not set +# CONFIG_CPU_SUBTYPE_SH4_202 is not set +# CONFIG_CPU_SUBTYPE_SH7770 is not set +# CONFIG_CPU_SUBTYPE_SH7780 is not set +# CONFIG_CPU_SUBTYPE_SH7785 is not set +# CONFIG_CPU_SUBTYPE_SHX3 is not set +# CONFIG_CPU_SUBTYPE_SH7343 is not set +# CONFIG_CPU_SUBTYPE_SH7722 is not set + +# +# Memory management options +# +CONFIG_QUICKLIST=y +CONFIG_MMU=y +CONFIG_PAGE_OFFSET=0x80000000 +CONFIG_MEMORY_START=0x0d000000 +CONFIG_MEMORY_SIZE=0x02000000 +CONFIG_VSYSCALL=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_MAX_ACTIVE_REGIONS=1 +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_PAGE_SIZE_4KB=y +# CONFIG_PAGE_SIZE_8KB is not set +# CONFIG_PAGE_SIZE_64KB is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_NR_QUICK=2 + +# +# Cache configuration +# +CONFIG_SH_DIRECT_MAPPED=y +CONFIG_CACHE_WRITEBACK=y +# CONFIG_CACHE_WRITETHROUGH is not set +# CONFIG_CACHE_OFF is not set + +# +# Processor features +# +CONFIG_CPU_LITTLE_ENDIAN=y +# CONFIG_CPU_BIG_ENDIAN is not set +# CONFIG_SH_FPU_EMU is not set +CONFIG_SH_ADC=y +CONFIG_CPU_HAS_INTEVT=y +CONFIG_CPU_HAS_SR_RB=y + +# +# Board support +# +# CONFIG_SH_SOLUTION_ENGINE is not set +CONFIG_SH_HP6XX=y + +# +# Timer and clock configuration +# +CONFIG_SH_TMU=y +CONFIG_SH_TIMER_IRQ=16 +CONFIG_SH_PCLK_FREQ=22110000 +CONFIG_TICK_ONESHOT=y +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# DMA support +# +CONFIG_SH_DMA_API=y +CONFIG_SH_DMA=y +CONFIG_NR_ONCHIP_DMA_CHANNELS=4 +# CONFIG_NR_DMA_CHANNELS_BOOL is not set + +# +# Companion Chips +# +CONFIG_HD6446X_SERIES=y +CONFIG_HD64461=y +# CONFIG_HD64465 is not set +CONFIG_HD64461_IRQ=36 +CONFIG_HD64461_IOBASE=0xb0000000 +CONFIG_HD64461_ENABLER=y + +# +# Additional SuperH Device Drivers +# +# CONFIG_HEARTBEAT is not set +# CONFIG_PUSH_SWITCH is not set + +# +# Kernel features +# +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +# CONFIG_KEXEC is not set +# CONFIG_CRASH_DUMP is not set +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +CONFIG_PREEMPT=y +# CONFIG_PREEMPT_BKL is not set +CONFIG_GUSA=y + +# +# Boot options +# +CONFIG_ZERO_PAGE_OFFSET=0x00001000 +CONFIG_BOOT_LINK_OFFSET=0x00800000 +# CONFIG_CMDLINE_BOOL is not set + +# +# Bus options +# +CONFIG_ISA=y +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +CONFIG_HD64461_PCMCIA=y +CONFIG_PCMCIA_PROBE=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set + +# +# Power management options (EXPERIMENTAL) +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +CONFIG_IP_SCTP=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +CONFIG_IRDA_FAST_RR=y +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +CONFIG_TOIM3232_DONGLE=m +CONFIG_LITELINK_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m + +# +# Old SIR device drivers +# +CONFIG_IRPORT_SIR=m + +# +# Old Serial dongle support +# +# CONFIG_DONGLE_OLD is not set + +# +# FIR device drivers +# +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +CONFIG_CFG80211=y +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=y +CONFIG_MAC80211_RCSIMPLE=y +# CONFIG_MAC80211_LEDS is not set +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=y +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=y +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +# CONFIG_PNP is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MISC_DEVICES is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +CONFIG_SCSI_CONSTANTS=y +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +# CONFIG_PATA_LEGACY is not set +# CONFIG_PATA_PCMCIA is not set +# CONFIG_PATA_QDI is not set +# CONFIG_PATA_WINBOND_VLB is not set +CONFIG_PATA_PLATFORM=y +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +# CONFIG_NET_ETHERNET is not set +CONFIG_MII=m +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_P54_COMMON=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +CONFIG_RT2X00=m +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +CONFIG_INPUT_POLLDEV=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_HP6XX=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +CONFIG_TOUCHSCREEN_HP600=y +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_I8042 is not set +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_LIBPS2 is not set +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=3 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=32 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_S1D13MP900 is not set +CONFIG_FB_HIT=y +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_HP680=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +CONFIG_FONT_PEARL_8x8=y +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_LOGO_SUPERH_MONO is not set +# CONFIG_LOGO_SUPERH_VGA16 is not set +# CONFIG_LOGO_SUPERH_CLUT224 is not set + +# +# Sound +# +CONFIG_SOUND=y + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=y +CONFIG_SND_TIMER=y +CONFIG_SND_PCM=y +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=y +CONFIG_SND_PCM_OSS=y +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# SUPERH devices +# +CONFIG_SND_SH_DAC_AUDIO=y + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +# CONFIG_HID_SUPPORT is not set +CONFIG_HID=m +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_HP6XX=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +# CONFIG_LEDS_TRIGGER_TIMER is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SH=y + +# +# Userspace I/O +# +# CONFIG_UIO is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_POSIX_ACL is not set +# CONFIG_EXT2_FS_SECURITY is not set +CONFIG_EXT2_FS_XIP=y +CONFIG_FS_XIP=y +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLBFS is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_CONFIGFS_FS=m + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +# CONFIG_NFS_V3 is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +CONFIG_NFSD=m +# CONFIG_NFSD_V3 is not set +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_EXPORTFS=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +# CONFIG_SMB_FS is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +CONFIG_CIFS_XATTR=y +# CONFIG_CIFS_POSIX is not set +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_EXPERIMENTAL=y +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_PREEMPT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_FRAME_POINTER is not set +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_SH_STANDARD_BIOS is not set +CONFIG_EARLY_SCIF_CONSOLE=y +CONFIG_EARLY_SCIF_CONSOLE_PORT=0x00000000 +CONFIG_EARLY_PRINTK=y +# CONFIG_DEBUG_BOOTMEM is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_4KSTACKS is not set +# CONFIG_IRQSTACKS is not set +# CONFIG_SH_KGDB is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/config-hp7xx-2.6.24 b/config-hp7xx-2.6.24 new file mode 100644 index 00000000000000..00a9cf4eb7e77e --- /dev/null +++ b/config-hp7xx-2.6.24 @@ -0,0 +1,1110 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-jlime +# Sat Mar 22 19:11:08 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +# CONFIG_GENERIC_TIME is not set +# CONFIG_GENERIC_CLOCKEVENTS is not set +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_DMABOUNCE=y + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_COLLIE is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_BADGE4 is not set +CONFIG_SA1100_JORNADA720=y +CONFIG_SA1100_JORNADA720_SSP=y +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SIMPAD is not set +CONFIG_SA1100_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y +CONFIG_CPU_ABRT_EV4=y +CONFIG_CPU_CACHE_V4WB=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WB=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 + +# +# Bus support +# +CONFIG_ISA=y +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_SA1100 is not set +CONFIG_PCMCIA_SA1111=y + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_PREEMPT is not set +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +# CONFIG_AEABI is not set +CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_NODES_SHIFT=2 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_DISCONTIGMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_DISCONTIGMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_NEED_MULTIPLE_NODES=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_STAT_DETAILS=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_SA1100=y + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +CONFIG_BRIDGE=y +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +CONFIG_LLC=y +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRCOMM=m +# CONFIG_IRDA_ULTRA is not set + +# +# IrDA options +# +# CONFIG_IRDA_CACHE_LAST_LSAP is not set +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set + +# +# Old SIR device drivers +# +CONFIG_IRPORT_SIR=m + +# +# Old Serial dongle support +# +# CONFIG_DONGLE_OLD is not set + +# +# FIR device drivers +# +CONFIG_SA1100_FIR=m +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=y +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +# CONFIG_PNP is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=y +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set + +# +# Other IDE chipsets support +# + +# +# Note: most of these also require special kernel boot parameters +# +# CONFIG_BLK_DEV_4DRIVES is not set +# CONFIG_BLK_DEV_ALI14XX is not set +# CONFIG_BLK_DEV_DTC2278 is not set +# CONFIG_BLK_DEV_HT6560B is not set +# CONFIG_BLK_DEV_QD65XX is not set +# CONFIG_BLK_DEV_UMC8672 is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_SCH=m + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_ARCNET is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_SMC91X is not set +# CONFIG_DM9000 is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_NET_PCI is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set +# CONFIG_TR is not set + +# +# Wireless LAN +# +CONFIG_WLAN_PRE80211=y +# CONFIG_STRIP is not set +# CONFIG_ARLAN is not set +# CONFIG_WAVELAN is not set +# CONFIG_PCMCIA_WAVELAN is not set +CONFIG_PCMCIA_NETWAVE=m +CONFIG_WLAN_80211=y +# CONFIG_PCMCIA_RAYCS is not set +CONFIG_LIBERTAS=m +# CONFIG_LIBERTAS_CS is not set +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +CONFIG_INPUT_POLLDEV=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_HP7XX=y +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +CONFIG_TOUCHSCREEN_HP7XX=y +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=16 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA11X0=y +# CONFIG_MCP_UCB1200 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_SA1100 is not set +CONFIG_FB_S1D13XXX=y +# CONFIG_FB_S1D13MP900 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_HP7XX=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +CONFIG_HID=m +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_NEW_LEDS is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_HCTOSYS is not set +CONFIG_RTC_DEBUG=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +# CONFIG_RTC_INTF_DEV is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT2_FS_XIP=y +CONFIG_FS_XIP=y +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +# CONFIG_AUTOFS4_FS is not set +CONFIG_FUSE_FS=y + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=852 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-2" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +# CONFIG_NFS_FS is not set +# CONFIG_NFSD is not set +# CONFIG_SMB_FS is not set +CONFIG_CIFS=m +# CONFIG_CIFS_STATS is not set +# CONFIG_CIFS_WEAK_PW_HASH is not set +# CONFIG_CIFS_XATTR is not set +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-2" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_HASH=m +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=m +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_ZLIB_INFLATE=m +CONFIG_ZLIB_DEFLATE=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/config-hp7xx-flashrom-2.6.24 b/config-hp7xx-flashrom-2.6.24 new file mode 100644 index 00000000000000..e9f379cd98e91b --- /dev/null +++ b/config-hp7xx-flashrom-2.6.24 @@ -0,0 +1,854 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-jlime +# Thu Apr 17 10:15:42 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +# CONFIG_GENERIC_TIME is not set +# CONFIG_GENERIC_CLOCKEVENTS is not set +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +# CONFIG_CGROUPS is not set +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_FAIR_USER_SCHED=y +# CONFIG_FAIR_CGROUP_SCHED is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +# CONFIG_MODULES is not set +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_RPC is not set +CONFIG_ARCH_SA1100=y +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +CONFIG_DMABOUNCE=y + +# +# SA11x0 Implementations +# +# CONFIG_SA1100_ASSABET is not set +# CONFIG_SA1100_CERF is not set +# CONFIG_SA1100_COLLIE is not set +# CONFIG_SA1100_H3100 is not set +# CONFIG_SA1100_H3600 is not set +# CONFIG_SA1100_H3800 is not set +# CONFIG_SA1100_BADGE4 is not set +CONFIG_SA1100_JORNADA720=y +CONFIG_SA1100_JORNADA720_FLASHROM=y +# CONFIG_SA1100_JORNADA720_FLASHROM_OLD is not set +CONFIG_SA1100_JORNADA720_SSP=y +# CONFIG_SA1100_JORNADA720_APM is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SIMPAD is not set +CONFIG_SA1100_SSP=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_SA1100=y +CONFIG_CPU_32v4=y +CONFIG_CPU_ABRT_EV4=y +CONFIG_CPU_CACHE_V4WB=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WB=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_SA1111=y +CONFIG_FORCE_MAX_ZONEORDER=9 + +# +# Bus support +# +CONFIG_ISA=y +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y + +# +# PC-card bridges +# +# CONFIG_I82365 is not set +# CONFIG_TCIC is not set +# CONFIG_PCMCIA_SA1100 is not set +CONFIG_PCMCIA_SA1111=y + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_PREEMPT is not set +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +# CONFIG_AEABI is not set +CONFIG_ARCH_DISCONTIGMEM_ENABLE=y +CONFIG_NODES_SHIFT=2 +CONFIG_SELECT_MEMORY_MODEL=y +# CONFIG_FLATMEM_MANUAL is not set +CONFIG_DISCONTIGMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_DISCONTIGMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_NEED_MULTIPLE_NODES=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# CPU Frequency scaling +# +# CONFIG_CPU_FREQ is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_UNIX is not set +# CONFIG_NET_KEY is not set +# CONFIG_INET is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=y +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=y +# CONFIG_IEEE80211_CRYPT_CCMP is not set +# CONFIG_IEEE80211_CRYPT_TKIP is not set +# CONFIG_IEEE80211_SOFTMAC is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +# CONFIG_PNP is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_COW_COMMON is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_PROC_FS is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_IDE_GENERIC is not set +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set + +# +# Other IDE chipsets support +# + +# +# Note: most of these also require special kernel boot parameters +# +# CONFIG_BLK_DEV_4DRIVES is not set +# CONFIG_BLK_DEV_ALI14XX is not set +# CONFIG_BLK_DEV_DTC2278 is not set +# CONFIG_BLK_DEV_HT6560B is not set +# CONFIG_BLK_DEV_QD65XX is not set +# CONFIG_BLK_DEV_UMC8672 is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=y +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +# CONFIG_NETDEVICES is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +CONFIG_INPUT_POLLDEV=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_HP7XX=y +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +CONFIG_TOUCHSCREEN_HP7XX=y +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_SA1100=y +CONFIG_SERIAL_SA1100_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=8 +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_DEVPORT=y +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +# CONFIG_WATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia Capabilities Port drivers +# +CONFIG_MCP=y +CONFIG_MCP_SA11X0=y +# CONFIG_MCP_UCB1200 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_SA1100 is not set +CONFIG_FB_S1D13XXX=y +# CONFIG_FB_S1D13MP900 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_CORGI is not set +CONFIG_BACKLIGHT_HP7XX=y + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +# CONFIG_FONT_8x16 is not set +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_LOGO is not set + +# +# Sound +# +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_MMC is not set +# CONFIG_NEW_LEDS is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +CONFIG_EXT2_FS_XIP=y +CONFIG_FS_XIP=y +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_MSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_NLS is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +# CONFIG_ENABLE_WARN_DEPRECATED is not set +# CONFIG_ENABLE_MUST_CHECK is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_MANAGER=y +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_CBC is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_ARC4=y +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_SEED is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_HW is not set + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/config-mp900c-2.6.24 b/config-mp900c-2.6.24 new file mode 100644 index 00000000000000..e90198c9fd88cc --- /dev/null +++ b/config-mp900c-2.6.24 @@ -0,0 +1,1365 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.24-jlime +# Tue Feb 19 23:06:25 2008 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +# CONFIG_BSD_PROCESS_ACCT_V3 is not set +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_CGROUPS is not set +# CONFIG_FAIR_GROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +# CONFIG_BLK_DEV_INITRD is not set +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +# CONFIG_IOSCHED_AS is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +CONFIG_DEFAULT_NOOP=y +CONFIG_DEFAULT_IOSCHED="noop" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx/PXA3xx Implementations +# +CONFIG_ARCH_MP900C=y +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +# CONFIG_MACH_EM_X270 is not set +# CONFIG_MACH_ZYLONITE is not set +# CONFIG_MACH_ARMCORE is not set +CONFIG_PXA25x=y + +# +# Boot options +# + +# +# Power management +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +# CONFIG_IWMMXT is not set +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +CONFIG_PCCARD=y +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +# CONFIG_PCMCIA_IOCTL is not set + +# +# PC-card bridges +# +CONFIG_PCMCIA_PXA2XX=y + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +# CONFIG_PREEMPT is not set +CONFIG_HZ=100 +# CONFIG_AEABI is not set +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set +# CONFIG_ARTHUR is not set + +# +# Power management options +# +CONFIG_PM=y +# CONFIG_PM_LEGACY is not set +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_UP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_APM_EMULATION=y + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +CONFIG_INET_XFRM_TUNNEL=y +CONFIG_INET_TUNNEL=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +CONFIG_IRDA_FAST_RR=y +CONFIG_IRDA_DEBUG=y + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +# CONFIG_DONGLE is not set +# CONFIG_KINGSUN_DONGLE is not set +# CONFIG_KSDAZZLE_DONGLE is not set +# CONFIG_KS959_DONGLE is not set + +# +# Old SIR device drivers +# +CONFIG_IRPORT_SIR=m + +# +# Old Serial dongle support +# +# CONFIG_DONGLE_OLD is not set + +# +# FIR device drivers +# +# CONFIG_USB_IRDA is not set +# CONFIG_SIGMATEL_FIR is not set +CONFIG_PXA_FICP=m +# CONFIG_MCS_FIR is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +# CONFIG_BT_HCIUSB is not set +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIUART is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +CONFIG_WIRELESS_EXT=y +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=y +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +# CONFIG_IEEE80211_SOFTMAC is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +# CONFIG_CONNECTOR is not set +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +# CONFIG_BLK_DEV is not set +# CONFIG_MISC_DEVICES is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +CONFIG_BLK_DEV_IDECS=y +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +# CONFIG_IDE_GENERIC is not set +# CONFIG_BLK_DEV_PLATFORM is not set +# CONFIG_IDE_ARM is not set +# CONFIG_BLK_DEV_IDEDMA is not set +CONFIG_IDE_ARCH_OBSOLETE_INIT=y +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +# CONFIG_SCSI_NETLINK is not set +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=m +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set +# CONFIG_ATA is not set +# CONFIG_MD is not set +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +CONFIG_DUMMY=y +# CONFIG_BONDING is not set +# CONFIG_MACVLAN is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_VETH is not set +# CONFIG_PHYLIB is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_AX88796 is not set +CONFIG_SMC91X=m +CONFIG_DM9000=m +CONFIG_SMC911X=m +# CONFIG_IBM_NEW_EMAC_ZMII is not set +# CONFIG_IBM_NEW_EMAC_RGMII is not set +# CONFIG_IBM_NEW_EMAC_TAH is not set +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set +# CONFIG_B44 is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +CONFIG_PCMCIA_RAYCS=m +# CONFIG_LIBERTAS is not set +CONFIG_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_USB_ZD1201=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_CS=m + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +# CONFIG_USB_NET_ZAURUS is not set +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_GPIO is not set +CONFIG_KEYBOARD_MP900=y +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_MOUSE_APPLETOUCH is not set +# CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_ATI_REMOTE is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_UINPUT is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=16 +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set + +# +# PCMCIA character devices +# +# CONFIG_SYNCLINK_CS is not set +# CONFIG_CARDMAN_4000 is not set +# CONFIG_CARDMAN_4040 is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_TCG_TPM is not set +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# +CONFIG_I2C_GPIO=m +CONFIG_I2C_PXA=m +CONFIG_I2C_PXA_SLAVE=y +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Miscellaneous I2C Chip support +# +# CONFIG_SENSORS_DS1337 is not set +# CONFIG_SENSORS_DS1374 is not set +# CONFIG_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_SENSORS_PCA9539 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_SENSORS_MAX6875 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set +# CONFIG_W1 is not set +# CONFIG_POWER_SUPPLY is not set +# CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +CONFIG_SA1100_WATCHDOG=y + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set + +# +# Sonics Silicon Backplane +# +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_VGASTATE is not set +CONFIG_VIDEO_OUTPUT_CONTROL=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_S1D13MP900=y +# CONFIG_FB_PXA is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=m +# CONFIG_BACKLIGHT_CORGI is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +CONFIG_FONTS=y +# CONFIG_FONT_8x8 is not set +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +# CONFIG_FONT_10x18 is not set +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_SEQUENCER_OSS is not set +# CONFIG_SND_DYNAMIC_MINORS is not set +# CONFIG_SND_SUPPORT_OLD_API is not set +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +# CONFIG_SND_PXA2XX_AC97 is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +CONFIG_SND_SOC=m +CONFIG_SND_PXA2XX_SOC=m +CONFIG_SND_PXA2XX_SOC_I2S=m +CONFIG_SND_PXA2XX_SOC_MP900=m +CONFIG_SND_SOC_WM8731=m + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set +CONFIG_HIDRAW=y + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +CONFIG_USB_HIDDEV=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +# CONFIG_USB_ARCH_HAS_OHCI is not set +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_ISP116X_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_KARMA=y +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_AIRPRIME is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP2101 is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +CONFIG_USB_SERIAL_NAVMAN=m +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +CONFIG_USB_SERIAL_OPTION=m +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +CONFIG_USB_LEGOTOWER=m +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +CONFIG_USB_TRANCEVIBRATOR=m +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +# CONFIG_NEW_LEDS is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_V3020 is not set + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=y + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +# CONFIG_EXT2_FS_POSIX_ACL is not set +# CONFIG_EXT2_FS_SECURITY is not set +CONFIG_EXT2_FS_XIP=y +CONFIG_FS_XIP=y +# CONFIG_EXT3_FS is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=y +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +# CONFIG_EFI_PARTITION is not set +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="cp437" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m +# CONFIG_DLM is not set +# CONFIG_INSTRUMENTATION is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHED_DEBUG is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_SG is not set +CONFIG_FRAME_POINTER=y +# CONFIG_FORCED_INLINING is not set +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_SAMPLES is not set +# CONFIG_DEBUG_USER is not set +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITY_FILE_CAPABILITIES is not set +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_XTS=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=y +CONFIG_CRYPTO_SEED=y +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_HW=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index 03715c05866408..854dba4d850aa6 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c @@ -405,11 +405,13 @@ static struct pcmcia_device_id ide_ids[] = { PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443), PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS1GCF80", 0x709b1bf1, 0x2a54d4b1), PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS2GCF120", 0x709b1bf1, 0x969aa4f2), + PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS2GCF133", 0x709b1bf1, 0x1688c409), PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8), PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852), PCMCIA_DEVICE_PROD_ID12("WEIDA", "TWTTI", 0xcc7cf69c, 0x212bb918), PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), + PCMCIA_DEVICE_PROD_ID12("SanDisk", "SDP", 0x7a954bd9, 0x91844b1c), PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6), PCMCIA_DEVICE_NULL, }; diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig index 086d58c0ccbe0e..59b229f5f9636b 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig @@ -293,4 +293,14 @@ config KEYBOARD_BFIN To compile this driver as a module, choose M here: the module will be called bf54x-keys. +config KEYBOARD_MP900 + tristate "MobilePro900c keyboard and touchscreen support" + depends on ARCH_MP900C + default y + help + This provides support for the NEC MobilePro900/c keyboard + and touchscreen. + Say Y or M ONLY if you are compiling a kernel for the NEC + MobilePro900. + endif diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile index e97455fdcc83af..6d96a73c7d86bf 100644 --- a/drivers/input/keyboard/Makefile +++ b/drivers/input/keyboard/Makefile @@ -25,3 +25,4 @@ obj-$(CONFIG_KEYBOARD_HP6XX) += jornada680_kbd.o obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o +obj-$(CONFIG_KEYBOARD_MP900) += mp900_kbd.o
\ No newline at end of file diff --git a/drivers/input/keyboard/jornada680_kbd.c b/drivers/input/keyboard/jornada680_kbd.c index a23633a2e1b466..991957121ce7ad 100644 --- a/drivers/input/keyboard/jornada680_kbd.c +++ b/drivers/input/keyboard/jornada680_kbd.c @@ -25,6 +25,7 @@ #include <linux/module.h> #include <linux/platform_device.h> +#include <asm/hp6xx.h> #include <asm/delay.h> #include <asm/io.h> @@ -59,11 +60,12 @@ static const unsigned short jornada_scancodes[] = { KEY_W, KEY_E, KEY_R, KEY_O, KEY_I, KEY_U, KEY_T, KEY_Y, /* 105 -> 112 */ /* PTE7 */ KEY_0, KEY_MINUS, KEY_EQUAL, 0, KEY_1, 0, 0, 0, /* 113 -> 120 */ KEY_2, KEY_3, KEY_4, KEY_9, KEY_8, KEY_7, KEY_5, KEY_6, /* 121 -> 128 */ -/* **** */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +/* **** */ KEY_A, KEY_B, KEY_C, 0, 0, 0, 0, 0, 0, 0, /* 129 -> 136 */ 0, 0, 0, 0, 0 }; -#define JORNADA_SCAN_SIZE 18 +#define JORNADA_SCAN_SIZE 16 /* 128 keys */ +#define EXTERN_KEYS 3 /* record / last / next */ struct jornadakbd { struct input_polled_dev *poll_dev; @@ -71,15 +73,51 @@ struct jornadakbd { unsigned char length; unsigned char old_scan[JORNADA_SCAN_SIZE]; unsigned char new_scan[JORNADA_SCAN_SIZE]; + unsigned char new_status; + unsigned char old_status; + unsigned char status_regs[EXTERN_KEYS]; }; static void jornada_parse_kbd(struct jornadakbd *jornadakbd) { struct input_dev *input_dev = jornadakbd->poll_dev->input; unsigned short *keymap = jornadakbd->keymap; + unsigned char old_status; + unsigned char new_status; unsigned int sync_me = 0; unsigned int i, j; - + unsigned char diff, scancode; + +// /* grab status byte for external keys */ +// new_status = (~(inb(PGDR))); +// old_status = jornadakbd->old_status; + + /* has anything changed? */ +// diff = ((new_status) ^ (old_status)); +// if (diff != 0) { +// /* Run through all extra keys */ +// for (i = 0; i < EXTERN_KEYS; i++) { +// scancode = (129 + i); +// /* Has this key changed? */ +// if (diff & (jornadakbd->status_regs[i])) { +// if (new_status & jornadakbd->status_regs[i]) { +// /* Key Pressed */ +// input_event(input_dev, EV_MSC, MSC_SCAN, scancode); +// input_report_key(input_dev, keymap[scancode], 1); +// sync_me = 1; +// } else { +// /* Key Released */ +// input_event(input_dev, EV_MSC, MSC_SCAN, scancode); +// input_report_key(input_dev, keymap[scancode], 0); +// sync_me = 1; +// } +// } +// } +// } +// +// jornadakbd->old_status = jornadakbd->new_status; + + for (i = 0; i < JORNADA_SCAN_SIZE; i++) { unsigned char new = jornadakbd->new_scan[i]; unsigned char old = jornadakbd->old_scan[i]; @@ -91,7 +129,7 @@ static void jornada_parse_kbd(struct jornadakbd *jornadakbd) for (j = 0; j < 8; j++) { unsigned int bit = 1 << j; if (xor & bit) { - unsigned int scancode = (i << 3) + j; + scancode = (i << 3) + j; input_event(input_dev, EV_MSC, MSC_SCAN, scancode); input_report_key(input_dev, @@ -101,7 +139,7 @@ static void jornada_parse_kbd(struct jornadakbd *jornadakbd) } } } - + if (sync_me) input_sync(input_dev); } @@ -202,6 +240,11 @@ static int __devinit jornada680kbd_probe(struct platform_device *pdev) memcpy(jornadakbd->keymap, jornada_scancodes, sizeof(jornadakbd->keymap)); + jornadakbd->status_regs[0] = 0x08; + jornadakbd->status_regs[1] = 0x10; + jornadakbd->status_regs[2] = 0x20; + jornadakbd->old_status = 0; + poll_dev->private = jornadakbd; poll_dev->poll = jornadakbd680_poll; poll_dev->poll_interval = 50; /* msec */ @@ -216,11 +259,11 @@ static int __devinit jornada680kbd_probe(struct platform_device *pdev) input_dev->dev.parent = &pdev->dev; input_dev->id.bustype = BUS_HOST; - for (i = 0; i < 128; i++) + for (i = 0; i < 136; i++) if (jornadakbd->keymap[i]) __set_bit(jornadakbd->keymap[i], input_dev->keybit); __clear_bit(KEY_RESERVED, input_dev->keybit); - + input_set_capability(input_dev, EV_MSC, MSC_SCAN); error = input_register_polled_device(jornadakbd->poll_dev); diff --git a/drivers/input/keyboard/mp900_kbd.c b/drivers/input/keyboard/mp900_kbd.c new file mode 100644 index 00000000000000..337ec3bbf810de --- /dev/null +++ b/drivers/input/keyboard/mp900_kbd.c @@ -0,0 +1,480 @@ +/* linux/drivers/input/keyboard/mp900_kbd.c + * + * input driver for the NEC MobilePro900/c keyboard and touchscreen + * + * keyboard and touchscreen data comes into the processor over + * pxa's BTUART + * + * on keypress 0x12 is received, use this for interrupt + * then poll by sending 0x13 over BTUART waiting for key up + * and to pick up modifier key combos + * + * on touchscreen event (stylus touched to screen) a stream of + * reporting comes through, first byte 0x04 then two bytes X position + * two bytes Y posn - continually until stylus is lifted, then single + * byte 0x05 indicates event end + * + * we get interrupt on character timeout, ie end of received string + * and we're looking for complete, discrete packets (BTUART FIFO holds + * up to 64 bytes) + * + * ignore and discard anything that doesn't read as a clean packet + * + * a little more info on the protocol as it's undocumented AFAIK + * -it's a 2 way protocol, send and receive over BTUART + * -when you send 0x13 you receive back a string like + * -0x13 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff + * -single zero bits in the 0xff's indicate a key pressed or held + * -this way presumably any combination of held keys can be reported + * -all bits return to 1 when all keys are released + * -no doubt more 'commands' are possible than just 0x13 !! + * + * thanks to cmonex and friends for recognising that the keyboard is + * on BTUART and providing the initial reverse-engineering + * to decode the protocol + * + * and to TyrianDreams for recognising that the PIC chip on the motherboard + * was an ideal candidate to be doing serial comms ... all the pieces fall + * in to place :) + * + * with reference to jlime's Jornada720 keyboard code + * drivers/input/keyboard/jornada720_kbd.c + * and pxa-serial driver + * drivers/serial/pxa.c + * + * Michael Petchkovsky mkpetch@internode.on.net May 2007 + */ + +/* TODO implement a watchdog while touchscreen event on in case we miss end ?*/ +/* TODO revisit the way you do all those readl() and writel()'s */ +/* TODO trim comments ruthlessly ;) info on protocol + * could go in Documentation/ + */ + +/* TODO probably some unnescessary includes here */ +#include <linux/input.h> +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/delay.h> +#include <linux/slab.h> +#include <linux/errno.h> +#include <linux/interrupt.h> +#include <linux/workqueue.h> + +#include <asm/uaccess.h> +#include <asm/io.h> +#include <asm/irq.h> +#include <asm/arch-pxa/pxa-regs.h> +#include <asm/arch-pxa/irqs.h> +#include <asm/arch-pxa/hardware.h> + +MODULE_AUTHOR("Michael Petchkovsky"); +MODULE_DESCRIPTION("MobilePro900/c keyboard driver"); +MODULE_LICENSE("GPL"); + +#define PFX "mp900_keyboard: " + +static char mp900_kb_name[] = "MobilePro900/c keyboard"; +static char mp900_ts_name[] = "MobilePro900/c touchscreen"; + +static struct input_dev *dev_kb, *dev_ts; +static struct workqueue_struct *mp900_kb_workqueue; +static struct delayed_work mp900_kb_work; +/* TODO LCD closure button generates a keycode, + * determine where it goes in here + */ + +/* TODO : allocate memory for keymap so we can change it at runtime */ +static unsigned int mp900_keymap[128] = { + 0, 0, KEY_F1, KEY_F5, KEY_F9, KEY_FN, KEY_ESC, + KEY_1, KEY_9, KEY_Q, KEY_A, KEY_Z, KEY_O, KEY_L, 0, 0, 0, 0, + KEY_F2, KEY_F6, KEY_F10, KEY_TAB, KEY_DELETE, KEY_2, KEY_0, + KEY_W, KEY_S, KEY_X, KEY_DOT, KEY_ENTER, 0, 0, 0, 0, KEY_F3, + KEY_F7, KEY_BRIGHTNESSUP, KEY_P, KEY_CAPSLOCK, KEY_3, 0, KEY_E, + KEY_D, KEY_C, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, KEY_F4, KEY_F8, + KEY_BRIGHTNESSDOWN, KEY_BACKSPACE, 0, KEY_4, 0, KEY_R, KEY_F, KEY_V, + KEY_UP, KEY_LEFT, 0, 0, 0, 0, KEY_LEFTSHIFT, 0, 0, 0, KEY_T, KEY_G, + KEY_B, KEY_5, KEY_GRAVE, KEY_MSDOS, KEY_SEMICOLON, KEY_SLASH, 0, 0, + 0, 0, 0, KEY_LEFTCTRL, 0, 0, KEY_Y, KEY_H, KEY_N, KEY_6, KEY_MINUS, + 0, KEY_APOSTROPHE, KEY_BACKSLASH, 0, 0, 0, 0, 0, 0, KEY_LEFTALT, + 0, KEY_U, KEY_J, KEY_M, KEY_7, KEY_EQUAL, 0, KEY_LEFTBRACE, + KEY_RIGHTBRACE, 0, 0, 0, 0, 0, 0, 0, KEY_RIGHTALT, KEY_I, KEY_K, + KEY_COMMA, KEY_8, 0, 0, 0, KEY_SPACE, KEY_POWER, 0 +}; +/* trialing a different keymapping where special function keys + * are read as keys F1-F10 above + * + * below is the array where special function keys are 'special functions' + * +static unsigned int mp900_keymap[128] = { + 0, 0, KEY_MAIL, KEY_CYCLEWINDOWS, KEY_RECORD, KEY_FN, KEY_ESC, + KEY_1, KEY_9, KEY_Q, KEY_A, KEY_Z, KEY_O, KEY_L, 0, 0, 0, 0, + KEY_WWW, KEY_PROG1, KEY_CALC, KEY_TAB, KEY_DELETE, KEY_2, KEY_0, + KEY_W, KEY_S, KEY_X, KEY_DOT, KEY_ENTER, 0, 0, 0, 0, KEY_CALENDAR, + KEY_PROG2, KEY_BRIGHTNESSUP, KEY_P, KEY_CAPSLOCK, KEY_3, 0, KEY_E, + KEY_D, KEY_C, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, KEY_EMAIL, KEY_PROG3, + KEY_BRIGHTNESSDOWN, KEY_BACKSPACE, 0, KEY_4, 0, KEY_R, KEY_F, KEY_V, + KEY_UP, KEY_LEFT, 0, 0, 0, 0, KEY_LEFTSHIFT, 0, 0, 0, KEY_T, KEY_G, + KEY_B, KEY_5, KEY_GRAVE, KEY_MSDOS, KEY_SEMICOLON, KEY_SLASH, 0, 0, + 0, 0, 0, KEY_LEFTCTRL, 0, 0, KEY_Y, KEY_H, KEY_N, KEY_6, KEY_MINUS, + 0, KEY_APOSTROPHE, KEY_BACKSLASH, 0, 0, 0, 0, 0, 0, KEY_LEFTALT, + 0, KEY_U, KEY_J, KEY_M, KEY_7, KEY_EQUAL, 0, KEY_LEFTBRACE, + KEY_RIGHTBRACE, 0, 0, 0, 0, 0, 0, 0, KEY_RIGHTALT, KEY_I, KEY_K, + KEY_COMMA, KEY_8, 0, 0, 0, KEY_SPACE, KEY_POWER, 0 +}; +*/ +static int exiting=0; +static int keydown=0; + +/* key decoding function + * + * takes a packet of the format + * 0x13XXXXXXXXXXXXXXXXXXXXXXXXXX + * and determines keyboard state, reports that to input layer + * check if all keys are released + * + * TODO nesting gets too deep in these functions + */ +static void mp900_kb_decode(char cur_buffer[], int packet_length) +{ + int i, j, ff, keycount=0; + unsigned char keys_buffer[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + static unsigned char last_buffer[32] = {0x13, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0}; + + if (packet_length == 14) { + ff = 0; + for (i=1; i < 14; i++) { + keys_buffer[keycount] = cur_buffer[i] ^ last_buffer[i]; + if (cur_buffer[i] == 0xff) + ff++; + j = 0; + while (keys_buffer[keycount]) { + /* keyboard state has changed */ + if (keys_buffer[keycount] & 1) { + keys_buffer[keycount+1] = + keys_buffer[keycount]; + /* TODO adjust mp900_keymap by 1 */ + keys_buffer[keycount] = j * 16 + i + 1; + if ((1<<j) & cur_buffer[i]) + keys_buffer[keycount]+=128; + keycount++; + } + + keys_buffer[keycount]>>=1; + j++; + } + + if (keycount > 5) { + /* assume we have garbage packet */ + keycount = 0; + ff = 0; + break; + } + } + + if (keycount) { + for (i=1;i<14;i++) { + last_buffer[i] = cur_buffer[i]; + } + } + + while (keycount) { + keycount--; + if (keys_buffer[keycount] < 128) { + input_report_key(dev_kb, + mp900_keymap[keys_buffer[keycount]], + 1); + input_sync(dev_kb); + } + else { + input_report_key(dev_kb, + mp900_keymap[keys_buffer[keycount]-128], + 0); + input_sync(dev_kb); + } + keys_buffer[keycount] = 0; + } + + /* will we poll for more? */ + keydown = (ff != 13); + } +} + +/* ts_report + * + * receives a touchscreen packet + * 0x04XXYY + * and reports position to input layer + */ +static void mp900_ts_report(char cur_buffer[], int packet_length) +{ + int x,y; + + if (packet_length == 5) { + x = cur_buffer[2] + 256 * cur_buffer[1]; + y = cur_buffer[4] + 256 * cur_buffer[3]; + + input_report_key(dev_ts, BTN_TOUCH, 1); + input_report_abs(dev_ts, ABS_X, x); + input_report_abs(dev_ts, ABS_Y, y); + input_report_abs(dev_ts, ABS_PRESSURE, 1); + input_sync(dev_ts); + } +} + +/* workqueue function polls for keyboard state, + * queue it with delay + */ +static void mp900_kb_poll(struct work_struct *work) +{ + writel(0x13, (void *)&BTTHR); +} + +/* Interrupt handler + * + * character timeout interrupt should occur on receipt of a string from BTUART + * -string could be single 0x12 ie new keypress + * -0x13xxxxxxxxxxxxxxxxxxxxxxxxxx result of keypoll + * -single 0x05 ie end of touchscreen event + * -0x04XXYY touchscreen absolute position + * + * regard any other string as garbage and drop it + */ +static irqreturn_t mp900_kb_interrupt(int irq,void *dev_id) +{ + int i; + int count; + char packet_buffer[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + /* TODO pause serial traffic if you can */ + writel(0x08, (void *)&BTMCR); // MCR say not RTS + + /* first check for BTUART FIFO overflow */ + if (readl((void *)&BTLSR) & 0x02) { + writel(0xC7, (void *)&BTFCR); // flush FIFO + printk(KERN_ERR PFX "btuart FIFO overflow\n"); + if (exiting == 0) { + schedule_delayed_work(&mp900_kb_work, 4); + } + writel(0x0a, (void *)&BTMCR); // MCR RTS + return IRQ_HANDLED; + } + + /* check for FIFO trigger level reached ?? */ + /* check for parity/framing/break errors */ + + /* next read out FIFO contents, count chars */ + i=0; + + while (readl((void *)&BTLSR) & 0x01) { + packet_buffer[i] = readl((void *)&BTRBR); + if (++i > 14) + break; + } + + /* Switch between buffer size */ + switch (i) { + case 1: + if (packet_buffer[0] == 0x05) { /* End touchscreen event */ + input_report_key(dev_ts, BTN_TOUCH, 0); + input_report_abs(dev_ts, ABS_PRESSURE, 0); + input_sync(dev_ts); + + writel(0x01, (void *)&BTTHR); + writel(0x0a, (void *)&BTMCR); + return IRQ_HANDLED; + } + if (packet_buffer[0] == 0x12) { /* Keypress */ + if (keydown) + break; + else { /* ? */ + keydown = 1; + if (exiting == 0) { + schedule_delayed_work( + &mp900_kb_work, + 2); + } + break; + } + } + break; + + case 5: + if (packet_buffer[0] == 0x04) { /* Touchscreen X/Y event */ + mp900_ts_report(packet_buffer, i); + } + break; + +// case 10: +// printk(KERN_ERR "btuart : Package size 10\n"); +// printk(KERN_ERR "btuart_log : %s\n", packet_buffer); +// break; + + case 14: + if (packet_buffer[0] == 0x13) { /* Keyboard poll packet */ + mp900_kb_decode(packet_buffer, i); + + if (keydown) { + if (exiting == 0) { + schedule_delayed_work( + &mp900_kb_work, + 2); + } + } + } + break; +// case 15: +// printk(KERN_ERR "btuart : Package size 15\n"); +// printk(KERN_ERR "btuart_log : %s\n", packet_buffer); +// break; + + default: + /* make sure ts is clear to transmit */ + writel(0x01, (void *)&BTTHR); + + if (keydown) { + if (exiting == 0) { + schedule_delayed_work(&mp900_kb_work, + 2); + } + } else { + printk(KERN_ERR "unhandled size of package (size=%d) with [0]=%x\n", i, packet_buffer[0]); + } + break; + } + + writel(0x0a, (void *)&BTMCR); // MCR RTS + return IRQ_HANDLED; +} + +static void __exit mp900_kb_exit(void) +{ + int i; + + exiting = 1; + cancel_delayed_work(&mp900_kb_work); + flush_workqueue(mp900_kb_workqueue); + destroy_workqueue(mp900_kb_workqueue); + + /* stop the BTUART clock */ + /* TODO see arch/arm/mach-pxa/generic.c for pxa_set_cken() + * a much nicer way to do this... + */ + i = readl((void *)&CKEN) & 0xFFFF; + i &= 0xFFEF; + writel(i, (void *)&CKEN); + + free_irq(IRQ_BTUART, NULL); + input_unregister_device(dev_ts); + input_unregister_device(dev_kb); + printk(KERN_INFO PFX "devices removed\n"); +} + +/* initialize + * ought to test kb presence + * + * need to disallow userland access to BTUART while keyboard driver + * is operational ... it should be enough to set up a udev rule to + * keep /dev/ttyS1 out of /dev - because pxa-serial driver leaves + * interrupts alone except while someone reads or writes to /dev/ttySx ??? + * + * will need to set baud rate, FIFO, LCR, MCR, interrupt type in + * BTUART registers + */ +static int __init mp900_kb_init(void) +{ + int i; + + mp900_kb_workqueue = create_workqueue("poll4key"); + INIT_DELAYED_WORK(&mp900_kb_work, mp900_kb_poll); + + printk(KERN_INFO PFX "initializing keyboard and touchscreen\n"); + + /* enable BTUART clock */ + /* TODO see arch/arm/mach-pxa/generic.c for pxa_set_cken() + * a much nicer way to do this... + */ + i = readl((void *)&CKEN) & 0xFFFF; + i |= 0x80; + writel(i, (void *)&CKEN); + + /* Keyboard */ + dev_kb = input_allocate_device(); + dev_kb->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); + set_bit(KEY_SUSPEND, dev_kb->keybit); + dev_kb->name = mp900_kb_name; + for (i=0; i < 128; i++) + if (mp900_keymap[i]) + set_bit(mp900_keymap[i], dev_kb->keybit); + + /* Touchscreen */ + dev_ts = input_allocate_device(); + dev_ts->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); + dev_ts->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE); + set_bit(BTN_TOUCH, dev_ts->keybit); + + /* Not generic values, will need adjusting */ + dev_ts->absmin[ABS_X] = 32; + dev_ts->absmin[ABS_Y] = 96; + dev_ts->absmax[ABS_X] = 1004; + dev_ts->absmax[ABS_Y] = 792; + dev_ts->name = mp900_ts_name; + + input_register_device(dev_kb); + input_register_device(dev_ts); + + if (request_irq(IRQ_BTUART, mp900_kb_interrupt, 0, + "MobilePro900/c keyboard", NULL)) + printk(KERN_ERR PFX "request irq failed!\n"); + + /* set up BTUART regs */ + + /* clear FIFO,clear interrupt regs (by reading) + * set LCR, set MCR, enable interrupts (IER) + * clear interrupt regs again + * that's roughly how pxa-serial.c does it... + * + * TODO oh boy this looks messy... + */ + writel(0x03, (void *)&BTLCR); // LCR DLAB bit=0 + writel(0xC1, (void *)&BTFCR); // FCR enable, trigger level 32 bytes + writel(0xC7, (void *)&BTFCR); // FCR clear + readl((void *)&BTLSR); // read/clear LSR + readl((void *)&BTRBR); // read/clear RX + readl((void *)&BTIIR); // read/clear IIR + readl((void *)&BTMSR); // read/clear MSR + writel(0x03, (void *)&BTLCR); // LCR again + + /* do we need to spinlock for this ?? + * once OUT2 bit is set interrupt is LIVE + */ + writel(0x0a, (void *)&BTMCR); // MCR OUT2, RTS + + /* what type of interrupts do we catch ? */ + writel(0x51, (void *)&BTIER); // IER UUE, RAVIE, RTOIE (char timeout) + /* TODO - what causes an RLSE interrupt? */ +// writel(0x41, (void *)&BTIER); // IER UUE, RAVIE +// writel(0x55, (void *)&BTIER); // IER UUE, RAVIE, RLSE, RTOIE + + /* once again for good luck ?? */ + readl((void *)&BTLSR); + readl((void *)&BTRBR); + readl((void *)&BTIIR); + readl((void *)&BTMSR); + + /* make sure ts is clear to transmit */ + writel(0x01, (void *)&BTTHR); + + printk(KERN_INFO PFX "registers, and irq set up\n"); + + return 0; +} + +module_init(mp900_kb_init); +module_exit(mp900_kb_exit); + diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 35d4097df35a64..ab61b1bba7897b 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -12,7 +12,7 @@ obj-$(CONFIG_TOUCHSCREEN_ELO) += elo.o obj-$(CONFIG_TOUCHSCREEN_FUJITSU) += fujitsu_ts.o obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o -obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o +obj-$(CONFIG_TOUCHSCREEN_HP600) += jornada6xx_ts.o obj-$(CONFIG_TOUCHSCREEN_HP7XX) += jornada720_ts.o obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o obj-$(CONFIG_TOUCHSCREEN_PENMOUNT) += penmount.o diff --git a/drivers/input/touchscreen/hp680_ts_input.c b/drivers/input/touchscreen/hp680_ts_input.c deleted file mode 100644 index c38d4e0f95c6a0..00000000000000 --- a/drivers/input/touchscreen/hp680_ts_input.c +++ /dev/null @@ -1,129 +0,0 @@ -#include <linux/input.h> -#include <linux/module.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <asm/io.h> -#include <asm/delay.h> -#include <asm/adc.h> -#include <asm/hp6xx.h> - -#define MODNAME "hp680_ts_input" - -#define HP680_TS_ABS_X_MIN 40 -#define HP680_TS_ABS_X_MAX 950 -#define HP680_TS_ABS_Y_MIN 80 -#define HP680_TS_ABS_Y_MAX 910 - -#define PHDR 0xa400012e -#define SCPDR 0xa4000136 - -static void do_softint(struct work_struct *work); - -static struct input_dev *hp680_ts_dev; -static DECLARE_DELAYED_WORK(work, do_softint); - -static void do_softint(struct work_struct *work) -{ - int absx = 0, absy = 0; - u8 scpdr; - int touched = 0; - - if (ctrl_inb(PHDR) & PHDR_TS_PEN_DOWN) { - scpdr = ctrl_inb(SCPDR); - scpdr |= SCPDR_TS_SCAN_ENABLE; - scpdr &= ~SCPDR_TS_SCAN_Y; - ctrl_outb(scpdr, SCPDR); - udelay(30); - - absy = adc_single(ADC_CHANNEL_TS_Y); - - scpdr = ctrl_inb(SCPDR); - scpdr |= SCPDR_TS_SCAN_Y; - scpdr &= ~SCPDR_TS_SCAN_X; - ctrl_outb(scpdr, SCPDR); - udelay(30); - - absx = adc_single(ADC_CHANNEL_TS_X); - - scpdr = ctrl_inb(SCPDR); - scpdr |= SCPDR_TS_SCAN_X; - scpdr &= ~SCPDR_TS_SCAN_ENABLE; - ctrl_outb(scpdr, SCPDR); - udelay(100); - touched = ctrl_inb(PHDR) & PHDR_TS_PEN_DOWN; - } - - if (touched) { - input_report_key(hp680_ts_dev, BTN_TOUCH, 1); - input_report_abs(hp680_ts_dev, ABS_X, absx); - input_report_abs(hp680_ts_dev, ABS_Y, absy); - } else { - input_report_key(hp680_ts_dev, BTN_TOUCH, 0); - } - - input_sync(hp680_ts_dev); - enable_irq(HP680_TS_IRQ); -} - -static irqreturn_t hp680_ts_interrupt(int irq, void *dev) -{ - disable_irq_nosync(irq); - schedule_delayed_work(&work, HZ / 20); - - return IRQ_HANDLED; -} - -static int __init hp680_ts_init(void) -{ - int err; - - hp680_ts_dev = input_allocate_device(); - if (!hp680_ts_dev) - return -ENOMEM; - - hp680_ts_dev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); - hp680_ts_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); - - input_set_abs_params(hp680_ts_dev, ABS_X, - HP680_TS_ABS_X_MIN, HP680_TS_ABS_X_MAX, 0, 0); - input_set_abs_params(hp680_ts_dev, ABS_Y, - HP680_TS_ABS_Y_MIN, HP680_TS_ABS_Y_MAX, 0, 0); - - hp680_ts_dev->name = "HP Jornada touchscreen"; - hp680_ts_dev->phys = "hp680_ts/input0"; - - if (request_irq(HP680_TS_IRQ, hp680_ts_interrupt, - IRQF_DISABLED, MODNAME, 0) < 0) { - printk(KERN_ERR "hp680_touchscreen.c: Can't allocate irq %d\n", - HP680_TS_IRQ); - err = -EBUSY; - goto fail1; - } - - err = input_register_device(hp680_ts_dev); - if (err) - goto fail2; - - return 0; - - fail2: free_irq(HP680_TS_IRQ, NULL); - cancel_delayed_work(&work); - flush_scheduled_work(); - fail1: input_free_device(hp680_ts_dev); - return err; -} - -static void __exit hp680_ts_exit(void) -{ - free_irq(HP680_TS_IRQ, NULL); - cancel_delayed_work(&work); - flush_scheduled_work(); - input_unregister_device(hp680_ts_dev); -} - -module_init(hp680_ts_init); -module_exit(hp680_ts_exit); - -MODULE_AUTHOR("Andriy Skulysh, askulysh@image.kiev.ua"); -MODULE_DESCRIPTION("HP Jornada 680 touchscreen driver"); -MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/jornada6xx_ts.c b/drivers/input/touchscreen/jornada6xx_ts.c new file mode 100644 index 00000000000000..0fce0a593a521b --- /dev/null +++ b/drivers/input/touchscreen/jornada6xx_ts.c @@ -0,0 +1,156 @@ +/* + * Platform driver for the HP Jornada 620/660/680/690 Touchscreen. + * + * Copyright 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com> + * Copyright ...-2007 Andriy Skulysh <askulysh@image.kiev.ua> + */ +#include <linux/input.h> +#include <linux/module.h> +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/platform_device.h> +#include <linux/workqueue.h> + +#include <asm/io.h> +#include <asm/delay.h> +#include <asm/adc.h> +#include <asm/hp6xx.h> + +#define MODNAME "hp680_ts_input" + +#define PHDR 0xa400012e /* PORT H DATA REGISTER */ +#define SCPDR 0xa4000136 /* PORT SC DATA REGISTER */ + +struct input_dev *dev; +static void do_softint(struct delayed_work *work); +static DECLARE_DELAYED_WORK(work, do_softint); + +static void do_softint(struct delayed_work *work) +{ + u8 scpdr; + int touched = 0; + int x, y; + + if (ctrl_inb(PHDR) & PHDR_TS_PEN_DOWN) { + scpdr = ctrl_inb(SCPDR); + scpdr |= SCPDR_TS_SCAN_ENABLE; + scpdr &= ~SCPDR_TS_SCAN_Y; + ctrl_outb(scpdr, SCPDR); + udelay(30); + + y = adc_single(ADC_CHANNEL_TS_Y); + + scpdr = ctrl_inb(SCPDR); + scpdr |= SCPDR_TS_SCAN_Y; + scpdr &= ~SCPDR_TS_SCAN_X; + ctrl_outb(scpdr, SCPDR); + udelay(30); + + x = adc_single(ADC_CHANNEL_TS_X); + + scpdr = ctrl_inb(SCPDR); + scpdr |= SCPDR_TS_SCAN_X; + scpdr &= ~SCPDR_TS_SCAN_ENABLE; + ctrl_outb(scpdr, SCPDR); + udelay(100); + touched = ctrl_inb(PHDR) & PHDR_TS_PEN_DOWN; + } + + if (touched) { + input_report_abs(dev, ABS_X, x); + input_report_abs(dev, ABS_Y, y); + input_report_abs(dev, ABS_PRESSURE, 1); + input_report_key(dev, BTN_TOUCH, 1); + input_sync(dev); + } else { + input_report_abs(dev, ABS_PRESSURE, 0); + input_report_key(dev, BTN_TOUCH, 0); + input_sync(dev); + } + enable_irq(HP680_TS_IRQ); +} + +static irqreturn_t hp680_ts_interrupt(int irq, void *pdev) +{ + disable_irq_nosync(irq); + schedule_delayed_work(&work, HZ / 20); + return IRQ_HANDLED; +} + +static int __devinit jornada680_ts_probe(struct platform_device *pdev) +{ + int error; + + dev = input_allocate_device(); + + if (!dev) { + printk(KERN_INFO "ts: failed to allocate device\n"); + error = -ENODEV; + return error; + } + + dev->name = "HP Jornada 6xx Touchscreen"; + dev->phys = "jornadats/input0"; + dev->id.bustype = BUS_HOST; + dev->dev.parent = &pdev->dev; + dev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); + dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | BIT_MASK(ABS_PRESSURE); + dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(dev, ABS_X, 40, 950, 0, 0); + input_set_abs_params(dev, ABS_Y, 80, 910, 0, 0); + + error = input_register_device(dev); + if (error) + goto fail2; + + error = request_irq(HP680_TS_IRQ, hp680_ts_interrupt, + IRQF_DISABLED, "HP6xx Touchscreen Driver", NULL); + + if (error) { + printk(KERN_INFO "ts: Unable to aquire irq %d\n", HP680_TS_IRQ); + error = -ENODEV; + goto fail3; + } + + return 0; + +fail3: + input_unregister_device(dev); +fail2: + input_free_device(dev); + return error; +} + +static int __devexit jornada680_ts_remove(struct platform_device *pdev) +{ + cancel_delayed_work(&work); + flush_scheduled_work(); + free_irq(HP680_TS_IRQ, pdev); + input_unregister_device(dev); + return 0; +} + +static struct platform_driver jornada680_ts_driver = { + .probe = jornada680_ts_probe, + .remove = __devexit(jornada680_ts_remove), + .driver = { + .name = "jornada_ts", + }, +}; + +static int __init hp680_ts_init(void) +{ + return platform_driver_register(&jornada680_ts_driver); +} + +static void __exit hp680_ts_exit(void) +{ + platform_driver_unregister(&jornada680_ts_driver); +} +module_init(hp680_ts_init); +module_exit(hp680_ts_exit); + +MODULE_AUTHOR("Andriy Skulysh <askulysh@image.kiev.ua>, Kristoffer Ericson <Kristoffer.Ericson@gmail.com>"); +MODULE_DESCRIPTION("HP Jornada 6xx touchscreen driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c index 42a1c9a1940ece..228240a23bb01c 100644 --- a/drivers/input/touchscreen/jornada720_ts.c +++ b/drivers/input/touchscreen/jornada720_ts.c @@ -1,6 +1,8 @@ /* * drivers/input/touchscreen/jornada720_ts.c * + * HP Jornada 710/720/728 Touchscreen Driver + * * Copyright (C) 2007 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> * * Copyright (C) 2006 Filip Zyzniewski <filip.zyzniewski@tefnet.pl> @@ -10,7 +12,6 @@ * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * - * HP Jornada 710/720/729 Touchscreen Driver */ #include <linux/platform_device.h> @@ -72,6 +73,7 @@ static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id) /* If GPIO_GPIO9 is set to high then report pen up */ if (GPLR & GPIO_GPIO(9)) { + input_report_abs(input, ABS_PRESSURE, 0); input_report_key(input, BTN_TOUCH, 0); input_sync(input); } else { @@ -84,12 +86,12 @@ static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id) x = jornada720_ts_average(jornada_ts->x_data); y = jornada720_ts_average(jornada_ts->y_data); - input_report_key(input, BTN_TOUCH, 1); input_report_abs(input, ABS_X, x); input_report_abs(input, ABS_Y, y); + input_report_abs(input, ABS_PRESSURE, 1); + input_report_key(input, BTN_TOUCH, 1); input_sync(input); } - jornada_ssp_end(); } @@ -118,24 +120,27 @@ static int __devinit jornada720_ts_probe(struct platform_device *pdev) input_dev->phys = "jornadats/input0"; input_dev->id.bustype = BUS_HOST; input_dev->dev.parent = &pdev->dev; - - input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_ABS); - input_dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH); - input_set_abs_params(input_dev, ABS_X, 270, 3900, 0, 0); - input_set_abs_params(input_dev, ABS_Y, 180, 3700, 0, 0); + input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + input_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | BIT_MASK(ABS_PRESSURE); + input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(input_dev, ABS_X, 79, 995, 0, 0); + input_set_abs_params(input_dev, ABS_Y, 75, 910, 0, 0); error = request_irq(IRQ_GPIO9, jornada720_ts_interrupt, IRQF_DISABLED | IRQF_TRIGGER_RISING, "HP7XX Touchscreen driver", pdev); if (error) { - printk(KERN_INFO "HP7XX TS : Unable to acquire irq!\n"); + printk(KERN_ERR "ts : unable to acquire irq!\n"); goto fail1; } error = input_register_device(jornada_ts->dev); - if (error) + if (error) { + printk(KERN_ERR "ts : unable to register device\n"); goto fail2; + } return 0; diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index ec568fa1c6cc3b..0b0bca14c067d2 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -100,6 +100,14 @@ config LEDS_COBALT_RAQ help This option enables support for the Cobalt Raq series LEDs. +config LEDS_HP6XX + bool "LED Support for the HP Jornada 6xx" + depends on LEDS_CLASS && SH_HP6XX + select LEDS_TRIGGERS + help + This option enables led support for the handheld + HP Jornada 620/660/680/690. + config LEDS_GPIO tristate "LED Support for GPIO connected LEDs" depends on LEDS_CLASS && GENERIC_GPIO diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index a60de1b46c2cd2..a9a8ffbcd96286 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o +obj-$(CONFIG_LEDS_HP6XX) += leds-hp6xx.o # LED Triggers obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o diff --git a/drivers/leds/leds-hp6xx.c b/drivers/leds/leds-hp6xx.c new file mode 100644 index 00000000000000..82d4ec38479736 --- /dev/null +++ b/drivers/leds/leds-hp6xx.c @@ -0,0 +1,120 @@ +/* + * LED Triggers Core + * For the HP Jornada 620/660/680/690 handhelds + * + * Copyright 2008 Kristoffer Ericson <kristoffer.ericson@gmail.com> + * this driver is based on leds-spitz.c by 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 <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/leds.h> +#include <asm/hd64461.h> +#include <asm/hp6xx.h> + +static void hp6xxled_green_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + u8 v8; + + v8 = inb(PKDR); + if (value) + outb(v8 & (~PKDR_LED_GREEN), PKDR); + else + outb(v8 | PKDR_LED_GREEN, PKDR); +} + +static void hp6xxled_red_set(struct led_classdev *led_cdev, enum led_brightness value) +{ + u16 v16; + + v16 = inw(HD64461_GPBDR); + if (value) + outw(v16 & (~HD64461_GPBDR_LED_RED), HD64461_GPBDR); + else + outw(v16 | HD64461_GPBDR_LED_RED, HD64461_GPBDR); +} + +static struct led_classdev hp6xx_red_led = { + .name = "hp6xx:red", + .default_trigger = "hp6xx-charge", + .brightness_set = hp6xxled_red_set, +}; + +static struct led_classdev hp6xx_green_led = { + .name = "hp6xx:green", + .default_trigger = "ide-disk", + .brightness_set = hp6xxled_green_set, +}; + +#ifdef CONFIG_PM +static int hp6xxled_suspend(struct platform_device *dev, pm_message_t state) +{ + led_classdev_suspend(&hp6xx_red_led); + led_classdev_suspend(&hp6xx_green_led); + return 0; +} + +static int hp6xxled_resume(struct platform_device *dev) +{ + led_classdev_resume(&hp6xx_red_led); + led_classdev_resume(&hp6xx_green_led); + return 0; +} +#endif + +static int hp6xxled_probe(struct platform_device *pdev) +{ + int ret; + + ret = led_classdev_register(&pdev->dev, &hp6xx_red_led); + if (ret < 0) + return ret; + + ret = led_classdev_register(&pdev->dev, &hp6xx_green_led); + if (ret < 0) + led_classdev_unregister(&hp6xx_red_led); + + return ret; +} + +static int hp6xxled_remove(struct platform_device *pdev) +{ + led_classdev_unregister(&hp6xx_red_led); + led_classdev_unregister(&hp6xx_green_led); + + return 0; +} + +static struct platform_driver hp6xxled_driver = { + .probe = hp6xxled_probe, + .remove = hp6xxled_remove, +#ifdef CONFIG_PM + .suspend = hp6xxled_suspend, + .resume = hp6xxled_resume, +#endif + .driver = { + .name = "hp6xx-led", + }, +}; + +static int __init hp6xxled_init(void) +{ + return platform_driver_register(&hp6xxled_driver); +} + +static void __exit hp6xxled_exit(void) +{ + platform_driver_unregister(&hp6xxled_driver); +} + +module_init(hp6xxled_init); +module_exit(hp6xxled_exit); + +MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); +MODULE_DESCRIPTION("HP Jornada 6xx LED driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig index 519b4ff79f7f9e..921de84ff577e9 100644 --- a/drivers/pcmcia/Kconfig +++ b/drivers/pcmcia/Kconfig @@ -192,6 +192,10 @@ config HD64465_PCMCIA tristate "HD64465 host bridge support" depends on HD64465 && PCMCIA +config HD64461_PCMCIA + tristate "HD64461 host bridge support" + depends on HD64461 && PCMCIA + config PCMCIA_AU1X00 tristate "Au1x00 pcmcia support" depends on SOC_AU1X00 && PCMCIA diff --git a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile index 6f6478ba7174fa..74ede3f0da6175 100644 --- a/drivers/pcmcia/Makefile +++ b/drivers/pcmcia/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_I82365) += i82365.o obj-$(CONFIG_I82092) += i82092.o obj-$(CONFIG_TCIC) += tcic.o obj-$(CONFIG_PCMCIA_M8XX) += m8xx_pcmcia.o +obj-$(CONFIG_HD64461_PCMCIA) += hd64461_ss.o obj-$(CONFIG_HD64465_PCMCIA) += hd64465_ss.o obj-$(CONFIG_PCMCIA_SA1100) += sa11xx_core.o sa1100_cs.o obj-$(CONFIG_PCMCIA_SA1111) += sa11xx_core.o sa1111_cs.o @@ -66,9 +67,11 @@ sa1100_cs-$(CONFIG_SA1100_COLLIE) += pxa2xx_sharpsl.o sa1100_cs-$(CONFIG_SA1100_H3600) += sa1100_h3600.o sa1100_cs-$(CONFIG_SA1100_SHANNON) += sa1100_shannon.o sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o +sa1100_cs-$(CONFIG_SA1100_JORNADA56X) += sa1100_jornada56x.o pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o pxa2xx_cs-$(CONFIG_MACH_ARMCORE) += pxa2xx_cm_x270.o +pxa2xx_cs-$(CONFIG_ARCH_MP900C) += pxa2xx_mp900.o diff --git a/drivers/pcmcia/hd64461_ss.c b/drivers/pcmcia/hd64461_ss.c new file mode 100644 index 00000000000000..a179b771ec1aaa --- /dev/null +++ b/drivers/pcmcia/hd64461_ss.c @@ -0,0 +1,555 @@ +/* + * drivers/pcmcia/hd64461_ss.c + * + * PCMCIA platform driver for Hitachi HD64461 companion chip + * Copyright (C) 2006-2008 Kristoffer Ericson <kristoffer.ericson@gmail.com> + * + * This driver is based on hd64461_ss.c that was maintained in LinuxSH cvs before merger with mainline + * by + * COPYRIGHT (C) 2002-2005 Andriy Skulysh <askulysh@image.kiev.ua> + * COPYRIGHT (C) ? Greg Banks <gbanks@pocketpenguins.com> + * COPYRIGHT (C) 2000 YAEGASHI Takeshi + * + * Please note that although the hd64461 chipset supports two sockets (0 & 1) this driver only + * supports the PCMCIA one. The CF slot cannot handle anything other than memory cards, so its + * better to leave that to other drivers such as pata. + * + */ +#include <linux/autoconf.h> +#include <linux/types.h> +#include <linux/module.h> +#include <linux/init.h> +#include <linux/string.h> +#include <linux/kernel.h> +#include <linux/ioport.h> +#include <linux/mm.h> +#include <linux/vmalloc.h> +#include <linux/irq.h> +#include <linux/interrupt.h> +#include <linux/platform_device.h> + +#include <pcmcia/cs_types.h> +#include <pcmcia/cs.h> +#include <pcmcia/ss.h> +#include <pcmcia/bulkmem.h> +#include <pcmcia/cistpl.h> + +#include "cs_internal.h" + +#include <asm/io.h> +#include <asm/hd64461.h> +#include <asm/hp6xx.h> + +#define MODNAME "HD64461_ss" + +typedef struct hd64461_socket_t { + u8 cscier; + unsigned int irq; + unsigned long mem_base; + socket_state_t state; + pccard_mem_map mem_maps[MAX_WIN]; + unsigned char IC_memory; + struct pcmcia_socket socket; +} hd64461_socket_t; + +static hd64461_socket_t hd64461_sockets[1]; + +static int hd64461_set_voltage(int Vcc, int Vpp) +{ + u8 gcr, scr; + u16 stbcr; + u32 gcr_reg = HD64461_PCC0GCR; + u32 scr_reg = HD64461_PCC0SCR; + + gcr = inb(gcr_reg); + scr = inb(scr_reg); + + switch (Vcc) { + case 0: + gcr |= HD64461_PCCGCR_VCC0; + scr |= HD64461_PCCSCR_VCC1; + break; + case 33: + gcr |= HD64461_PCCGCR_VCC0; + scr &= ~HD64461_PCCSCR_VCC1; + break; + case 50: + gcr &= ~HD64461_PCCGCR_VCC0; + scr &= ~HD64461_PCCSCR_VCC1; + break; + } + + outb(gcr, gcr_reg); + outb(scr, scr_reg); + + stbcr = ctrl_inw(HD64461_STBCR); + + if (Vcc > 0) { + stbcr &= ~HD64461_STBCR_SPC0ST; + } else { + stbcr |= HD64461_STBCR_SPC0ST; + } + + outw(stbcr, HD64461_STBCR); + + return 1; +} + +static int hd64461_init(struct pcmcia_socket *s) +{ + u16 gpadr; + hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); + + sp->state.Vcc = 0; + sp->state.Vpp = 0; + hd64461_set_voltage(0, 0); + + gpadr = ctrl_inw(HD64461_GPADR); + gpadr &= ~HD64461_GPADR_PCMCIA0; + ctrl_outw(gpadr, HD64461_GPADR); + + return 0; +} + +static int hd64461_suspend(struct pcmcia_socket *s) +{ + u16 gpadr; + u8 gcr; + u32 gcr_reg = HD64461_PCC0GCR; + + gcr = inb(gcr_reg); + gcr &= ~HD64461_PCCGCR_DRVE; + ctrl_outb(gcr, gcr_reg); + hd64461_set_voltage(0, 0); + + gpadr = ctrl_inw(HD64461_GPADR); + gpadr |= HD64461_GPADR_PCMCIA0; + ctrl_outw(gpadr, HD64461_GPADR); + + return 0; +} + +static int hd64461_get_status(struct pcmcia_socket *s, u32 *value) +{ + u8 isr; + u32 status = 0; + hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); + + /* get status of pcmcia socket */ + isr = inb(HD64461_PCC0ISR); + + /* is card inserted and powerd? */ + if (!(isr & HD64461_PCCISR_PCD_MASK)) { + status |= SS_DETECT; + + /* If its an memory card, lets find out the voltage */ + if (sp->IC_memory) { + switch (isr & HD64461_PCCISR_BVD_MASK) { + case HD64461_PCCISR_BVD_BATGOOD: + break; + case HD64461_PCCISR_BVD_BATWARN: + status |= SS_BATWARN; + break; + default: + status |= SS_BATDEAD; + break; + } + + if (isr & HD64461_PCCISR_READY) { + status |= SS_READY; + } + + if (isr & HD64461_PCCISR_MWP) { + status |= SS_WRPROT; + } + } else { + status |= SS_STSCHG; + } + + switch (~isr & (HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1)) { + case HD64461_PCCISR_VS1: + /* 5V card, Implies that the card shouldn't work, but sometimes it actually does */ + /* so we set the 3V just to give it a try */ + status |= SS_3VCARD; + break; + case 0: + case HD64461_PCCISR_VS2: + /* This card is an ordinary 3V card */ + status |= SS_3VCARD; + break; + case HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1: + break; + } + + if ((sp->state.Vcc != 0) || (sp->state.Vpp != 0)) { + status |= SS_POWERON; + } + } + *value = status; + return 0; +} + +static int hd64461_set_socket(struct pcmcia_socket *s, socket_state_t * state) +{ + u32 flags; + u32 changed; + u8 gcr, cscier; + hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); + u32 gcr_reg = HD64461_PCC0GCR; + u32 cscier_reg = HD64461_PCC0CSCIER; + + local_irq_save(flags); + + /* compair old power status with new */ + if (state->Vpp != sp->state.Vpp || state->Vcc != sp->state.Vcc) { + if (!hd64461_set_voltage(state->Vcc, state->Vpp)) { + local_irq_restore(flags); + return -EINVAL; + } + } + + /* lets only push the changes */ + changed = sp->state.csc_mask ^ state->csc_mask; + cscier = ctrl_inb(cscier_reg); + + /* set it so interrupt occurs when values of CD1 and CD2 are changed */ + if (changed & SS_DETECT) { + if (state->csc_mask & SS_DETECT) + cscier |= HD64461_PCCCSCIER_CDE; + else + cscier &= ~HD64461_PCCCSCIER_CDE; + } + + /* set so interrupt occurs when pin changes from low -> high */ + if (changed & SS_READY) { + if (state->csc_mask & SS_READY) + cscier |= HD64461_PCCCSCIER_RE; + else + cscier &= ~HD64461_PCCCSCIER_RE; + } + + /* set so interrupt occurs when BVD1 & BVD2 are set to bat_dead */ + if (changed & SS_BATDEAD) { + if (state->csc_mask & SS_BATDEAD) + cscier |= HD64461_PCCCSCIER_BDE; + else + cscier &= ~HD64461_PCCCSCIER_BDE; + } + + /* set so interrupt occurs when BVD1 & BVD2 are set to bat_warn */ + if (changed & SS_BATWARN) { + if (state->csc_mask & SS_BATWARN) + cscier |= HD64461_PCCCSCIER_BWE; + else + cscier &= ~HD64461_PCCCSCIER_BWE; + } + + /* set so "pccard connection" interrupt initializes PCC0SCR and PCC0GCR */ + if (changed & SS_STSCHG) { + if (state->csc_mask & SS_STSCHG) + cscier |= HD64461_PCCCSCIER_SCE; + else + cscier &= ~HD64461_PCCCSCIER_SCE; + } + + ctrl_outb(cscier, cscier_reg); + + changed = sp->state.flags ^ state->flags; + + gcr = ctrl_inb(gcr_reg); + + if (changed & SS_IOCARD) { + if (state->flags & SS_IOCARD) { + if (s->sock == 1) { + printk(KERN_INFO + "socket 1 can be only IC Memory card\n"); + } else { + /* Reset the card and set as IO card */ + gcr |= HD64461_PCCGCR_PCCT; + sp->IC_memory = 0; + } + } else { + /* Reset and set as memory card */ + gcr &= ~HD64461_PCCGCR_PCCT; + sp->IC_memory = 1; + } + } + + /* if bit 3 = 0 while pccard accessed, output 1 on pccreg */ + if (changed & SS_RESET) { + if (state->flags & SS_RESET) + gcr |= HD64461_PCCGCR_PCCR; + else + gcr &= ~HD64461_PCCGCR_PCCR; + } + + /* Set low level of external buffer */ + if (changed & SS_OUTPUT_ENA) { + if (state->flags & SS_OUTPUT_ENA) + gcr |= HD64461_PCCGCR_DRVE; + else + gcr &= ~HD64461_PCCGCR_DRVE; + } + + ctrl_outb(gcr, gcr_reg); + + sp->state = *state; + + local_irq_restore(flags); + + return 0; +} + +static int hd64461_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io) +{ + /* this is not needed due to static mappings */ + io->start = 0xba000000; + io->stop = 0xbc000000; + + return 0; +} + +static int hd64461_set_mem_map(struct pcmcia_socket *s, + struct pccard_mem_map *mem) +{ + hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); + struct pccard_mem_map *smem; + int map = mem->map; + unsigned long saddr; + + if (map >= MAX_WIN) + return -EINVAL; + + smem = &sp->mem_maps[map]; + saddr = sp->mem_base + mem->card_start; + + if (!(mem->flags & MAP_ATTRIB)) + saddr += HD64461_PCC_WINDOW; + + mem->static_start = saddr; + + *smem = *mem; + + return 0; +} + +static struct pccard_operations hd64461_operations = { + .init = hd64461_init, + .suspend = hd64461_suspend, + .get_status = hd64461_get_status, + .set_socket = hd64461_set_socket, + .set_io_map = hd64461_set_io_map, + .set_mem_map = hd64461_set_mem_map, +}; + +static irqreturn_t hd64461_interrupt(int irq, void *dev) +{ + hd64461_socket_t *sp = (hd64461_socket_t *) dev; + unsigned events = 0; + unsigned char cscr; + + cscr = ctrl_inb(HD64461_PCC0CSCR); + + /* If IREQ pin is in low state */ + if (cscr & HD64461_PCCCSCR_IREQ) { + cscr &= ~HD64461_PCCCSCR_IREQ; + /* silence interrupt source and hand over interrupt */ + ctrl_outb(cscr, HD64461_PCC0CSCR); + return IRQ_NONE; + } + + /* if both CD1 and CD2 has changed */ + if ((cscr & HD64461_PCCCSCR_CDC)) { + /* silence it by writing a 0 to bit 3 */ + cscr &= ~HD64461_PCCCSCR_CDC; + /* we've detected something being inserted or unplugged */ + events |= SS_DETECT; + + /* If card is ejected then cleanup */ + if (((ctrl_inb(HD64461_PCC0ISR)) & ~HD64461_PCCISR_PCD_MASK)) { + cscr &= ~(HD64461_PCCCSCR_RC | HD64461_PCCCSCR_BW | + HD64461_PCCCSCR_BD | HD64461_PCCCSCR_SC); + + } + } + + /* MEMORY CARD */ + if (sp->IC_memory) { + if (cscr & HD64461_PCCCSCR_RC) { + /* ? */ + cscr &= ~HD64461_PCCCSCR_RC; + events |= SS_READY; + } + + if (cscr & HD64461_PCCCSCR_BW) { + /* battery warning */ + cscr &= ~HD64461_PCCCSCR_BW; + events |= SS_BATWARN; + } + + if (cscr & HD64461_PCCCSCR_BD) { + /* battery dead */ + cscr &= ~HD64461_PCCCSCR_BD; + events |= SS_BATDEAD; + } + } else { /* IO CARD */ + if (cscr & HD64461_PCCCSCR_SC) { + /* status changed */ + cscr &= ~HD64461_PCCCSCR_SC; + events |= SS_STSCHG; + } + } + ctrl_outb(cscr, HD64461_PCC0CSCR); + + /* make sure we push these changes into pcmcia events */ + if (events) + pcmcia_parse_events(&sp->socket, events); + + return IRQ_HANDLED; +} + +int hd64461_init_socket(int sock, int irq, unsigned long mem_base,unsigned short io_offset) +{ + hd64461_socket_t *sp = &hd64461_sockets[sock]; + unsigned gcr_reg = HD64461_PCC0GCR; + u8 gcr; + int i; + + memset(sp, 0, sizeof(*sp)); + sp->IC_memory = 1; + sp->irq = irq; + sp->mem_base = mem_base; + sp->socket.features = SS_CAP_PCCARD | SS_CAP_STATIC_MAP | SS_CAP_PAGE_REGS; + sp->socket.resource_ops = &pccard_static_ops; + sp->socket.ops = &hd64461_operations; + sp->socket.map_size = HD64461_PCC_WINDOW; /* 16MB fixed window size */ + sp->socket.pci_irq = irq; + sp->socket.io_offset = io_offset; + sp->socket.owner = THIS_MODULE; + + for (i = 0; i != MAX_WIN; i++) + sp->mem_maps[i].map = i; + + if ((request_irq(irq, hd64461_interrupt, IRQF_SHARED, "hd64461_ss-irq", sp)) < 0) { + printk(KERN_INFO "hd64461_init: request for irq %d: failed\n", sp->irq); + return -1; + } + + gcr = inb(gcr_reg); + /* continuous 16MB area mode for both memory and I/O operations */ + gcr |= HD64461_PCCGCR_PMMOD; + /* ??? */ + gcr &= ~(HD64461_PCCGCR_PA25 | HD64461_PCCGCR_PA24); + outb(gcr, gcr_reg); + + return 0; +} + +void hd64461_exit_socket(int sock) +{ + hd64461_socket_t *sp = &hd64461_sockets[0]; + unsigned cscier_reg = HD64461_PCC0CSCIER; + + outb(0, cscier_reg); + hd64461_suspend(&sp->socket); + +} + +static int __devexit hd64461_pcmcia_drv_remove(struct platform_device *dev) +{ + /* Libpata handles CF slot (slot 1), so we only handle PCMCIA (slot 0) */ + pcmcia_unregister_socket(&hd64461_sockets[0].socket); + hd64461_exit_socket(0); + + return 0; +} + +#ifdef CONFIG_PM +static int hd64461_pcmcia_drv_suspend(struct platform_device *dev, pm_message_t state) +{ + int ret = 0; + u32 cscier_reg = HD64461_PCC0CSCIER; + + hd64461_sockets[0].cscier = inb(cscier_reg); + outb(0, cscier_reg); + ret = pcmcia_socket_dev_suspend(&dev->dev, state); + + return ret; + } + +static int hd64461_pcmcia_drv_resume(struct platform_device *dev) +{ + int ret = 0; + u32 cscier_reg = HD64461_PCC0CSCIER; + + outb(hd64461_sockets[0].cscier, cscier_reg); + ret = pcmcia_socket_dev_resume(&dev->dev); + + return ret; +} +#endif + +static struct platform_driver hd64461_pcmcia_driver = { + .remove = __devexit_p(hd64461_pcmcia_drv_remove), +#ifdef CONFIG_PM + .suspend = hd64461_pcmcia_drv_suspend, + .resume = hd64461_pcmcia_drv_resume, +#endif + .driver = { + .name = "hd64461-pcmcia", + }, +}; + +static struct platform_device *hd64461_pcmcia_device; + +static int __init init_hd64461_ss(void) +{ + int i; + + printk(KERN_INFO "hd64461 host bridge driver\n"); + + if (platform_driver_register(&hd64461_pcmcia_driver)) + return -ENODEV; + + i = hd64461_init_socket(0, HD64461_IRQ_PCC0, HD64461_PCC0_BASE, 0xf000); + if (i < 0) + goto failed2; + + hd64461_pcmcia_device = platform_device_alloc("hd64461-pcmcia",-1); + if(!hd64461_pcmcia_device) { + printk(KERN_INFO "hd64461_ss_init: Cannot find pcmcia host device!\n"); + return -ENODEV; + } + + i = platform_device_add(hd64461_pcmcia_device); + if (i) { + platform_device_put(hd64461_pcmcia_device); + goto failed2; + } + + hd64461_sockets[0].socket.dev.parent = &hd64461_pcmcia_device->dev; + + i = pcmcia_register_socket(&hd64461_sockets[0].socket); + return 0; + +/* Unregister driver nothing else */ +failed2: + printk(KERN_INFO "hd64461_ss_init: Failed to startup socket 0\n"); + platform_driver_unregister(&hd64461_pcmcia_driver); + return i; +} + +static void __exit exit_hd64461_ss(void) +{ + /* Only remove if there's something to remove */ + if (hd64461_pcmcia_device) { + platform_device_unregister(hd64461_pcmcia_device); + platform_driver_unregister(&hd64461_pcmcia_driver); + } +} +module_init(init_hd64461_ss); +module_exit(exit_hd64461_ss); + +MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); +MODULE_DESCRIPTION("PCMCIA driver for Hitachi HD64461 companion chip"); +MODULE_LICENSE("GPL"); diff --git a/drivers/pcmcia/pxa2xx_mp900.c b/drivers/pcmcia/pxa2xx_mp900.c new file mode 100644 index 00000000000000..d76fa89dc04802 --- /dev/null +++ b/drivers/pcmcia/pxa2xx_mp900.c @@ -0,0 +1,347 @@ +/* + * linux/drivers/pcmcia/pxa2xx_mp900.c + * + * NEC MobilePro900/c PCMCIA specific routines. + * + * based on pxa2xx_mainstone.c + * + * The MobilePro900 has one cf slot and one pcmcia slot + * each managed by a NeoMagic NMC1110 companion chip + * + * Socket0 of the pxa255 (mapped to physical address 0x2000_0000) + * corresponds to the CF card + * with GPIO11 as nCD (card detect) + * and GPIO5 as PRDY (ready/busy) + * NMC1110 PRS/PRC register is at physical address 0x0900_0000 + * + * Socket1 of the pxa255 (mapped to physical address 0x3000_0000) + * corresponds to the PCMCIA card + * with GPIO13 as nCD + * and GPIO7 as PRDY + * NMC1110 PRS/PRC register is at physical address 0x0a00_0000 + * + * the NMC1110 PRS/PRC registers + * are single 16bit read and write (status and command) + * regs which are important for controlling slot power and RESET + * + * If STSCHG is available on GPIOs I havn't found it yet + * + * 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/init.h> +#include <linux/kernel.h> +#include <linux/errno.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/platform_device.h> + +#include <pcmcia/ss.h> + +#include <asm/uaccess.h> +#include <asm/io.h> +#include <asm/hardware.h> +#include <asm/irq.h> + +#include <asm/arch/pxa-regs.h> + +#include "soc_common.h" + +#define CF_CARD_REG 0x09000000 +#define PC_CARD_REG 0x0a000000 + +void *cf_prs_addr, *pc_prs_addr; + +static struct pcmcia_irqs irqs[] = { + { 0, IRQ_GPIO(11), "PCMCIA0 CD" }, + { 1, IRQ_GPIO(13), "PCMCIA1 CD" }, +// { 0, MAINSTONE_S0_STSCHG_IRQ, "PCMCIA0 STSCHG" }, +// { 1, MAINSTONE_S1_STSCHG_IRQ, "PCMCIA1 STSCHG" }, +}; + +static int mp900_pcmcia_hw_init(struct soc_pcmcia_socket *skt) +{ + printk(KERN_INFO "mp900_pcmcia_hw_init %d\n", skt->nr); + /* we just want to set up the gpios for the + * slots and set interrupts on RDY + */ + + /* Setup default state of GPIO outputs + * before we enable them as outputs. + * + * trust bootloader/wince to do this for now + * TODO this MUST happen here as we don't want to rely on + * bootloader/wince... double check that below is as desired + * before uncommenting. + */ +/* GPSR(GPIO48_nPOE) = + GPIO_bit(GPIO48_nPOE) | + GPIO_bit(GPIO49_nPWE) | + GPIO_bit(GPIO50_nPIOR) | + GPIO_bit(GPIO51_nPIOW) | + GPIO_bit(GPIO85_nPCE_1) | + GPIO_bit(GPIO54_nPCE_2); + + pxa_gpio_mode(GPIO48_nPOE_MD); + pxa_gpio_mode(GPIO49_nPWE_MD); + pxa_gpio_mode(GPIO50_nPIOR_MD); + pxa_gpio_mode(GPIO51_nPIOW_MD); + pxa_gpio_mode(GPIO85_nPCE_1_MD); + pxa_gpio_mode(GPIO54_nPCE_2_MD); + pxa_gpio_mode(GPIO79_pSKTSEL_MD); + pxa_gpio_mode(GPIO55_nPREG_MD); + pxa_gpio_mode(GPIO56_nPWAIT_MD); + pxa_gpio_mode(GPIO57_nIOIS16_MD); +*/ + /* PRDY signals for socket irqs? */ + skt->irq = (skt->nr == 0) ? IRQ_GPIO(5) : IRQ_GPIO(7); + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +static void mp900_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) +{ + printk(KERN_INFO "mp900_pcmcia_hw_shutdown %d\n", skt->nr); + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +/* _socket_state gets polled every second or so as not all + * signals generate interrupts, see soc_common.c + */ +static void mp900_pcmcia_socket_state(struct soc_pcmcia_socket *skt, + struct pcmcia_state *state) +{ + int prs_value=0; + + /* first read NMC1110's PRS register for the slot */ + if (skt->nr) + { + prs_value = readw(pc_prs_addr); + } else { + prs_value = readw(cf_prs_addr); + } + + prs_value &= 0xffff; + + /* these are determined from gpios */ + state->detect = (skt->nr == 0) ? !(GPLR(11) & GPIO_bit(11)) + : !(GPLR(13) & GPIO_bit(13)); + state->ready = (skt->nr == 0) ? !!(GPLR(5) & GPIO_bit(5)) + : !!(GPLR(7) & GPIO_bit(7)); + /* these are read from PRS register */ + state->bvd1 = !!(prs_value & 0x10); + state->bvd2 = !!(prs_value & 0x20); + state->vs_3v = !(prs_value & 0x40); + state->vs_Xv = !(prs_value & 0x80); /* seems to detect 5V cards OK */ + state->wrprot = 0; /* what is wrprot? */ +} + +/* this is where we apply or remove power from a socket so we need to get + * this right. Also card reset is implemented here. + * + * Power and reset are handled through the NMC1110 PRC register + */ +static int mp900_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, + const socket_state_t *state) +{ + int ret=0; + int prs_value=0; + int prc_value=0; + int is_powered=0; + + /* check current power state */ + if (skt->nr) { + prs_value = readw(pc_prs_addr); + } else { + prs_value = readw(cf_prs_addr); + } + + is_powered = prs_value & 0xf; + + /* we will set SOE bit */ + prc_value |= 0x80; + + printk(KERN_INFO "mp900_pcmcia_configure_socket %d\n", skt->nr); + + switch (state->Vcc) { + case 0: + /* you can clear whole reg when applying 0v */ +// prc_value &= 0xfff0; + prc_value = 0x0; + printk(KERN_INFO " state->Vcc = 0\n"); + break; + case 33: +// prc_value |= 0x8; + prc_value |= 0x9; + printk(KERN_INFO " state->Vcc = 33\n"); + break; + case 50: +// prc_value |= 0x4; + prc_value |= 0x6; + printk(KERN_INFO " state->Vcc = 50\n"); + break; + default: + printk(KERN_ERR " bad Vcc %u\n", state->Vcc); + ret = -1; + } + + switch (state->Vpp) { + case 0: + printk(KERN_INFO " state->Vpp = 0\n"); + break; + case 120: + printk(KERN_INFO " state->Vpp = 120\n"); + break; + default: + if(state->Vpp == state->Vcc) { + printk(KERN_INFO " state->Vpp = %u\n", + state->Vpp); + } else { + printk(KERN_ERR " bad Vpp %u\n", state->Vpp); + ret = -1; + } + } + + if (state->flags & SS_RESET) { + prc_value |= 0x10; + printk(KERN_INFO " socket reset requested\n"); + } + + if (skt->nr) { + /* this is the pcmcia slot */ + /* leave CFE and SSP till later + * set S1-4 and SOE then delay + */ + if (!is_powered) { + /* we applying power to unpowered socket */ + /* first set S3 and SOE (mask S1/2) */ + writew(prc_value & 0xfffc, pc_prs_addr); + /* then write again with S1/2 unmasked */ + writew(prc_value, pc_prs_addr); + /* then delay */ + udelay(1000); + prc_value &= 0xffbf; // CFE bit = 0 + prc_value |= 0x100; // SSP bit = 1 + writew(prc_value, pc_prs_addr); + } else { + /* we are removing power or it's a reset */ + if (prc_value & 0xf) { + prc_value &= 0xffbf; + prc_value |= 0x100; + } + writew(prc_value, pc_prs_addr); + } + + udelay(10); + prs_value = readw(pc_prs_addr); + } else { + /* this is cf slot */ + if (!is_powered) { + writew(prc_value & 0xfffc, cf_prs_addr); + writew(prc_value, cf_prs_addr); + udelay(1000); + prc_value |= 0x40; // CFE bit = 1 + prc_value &= 0xfeff; // SSP bit = 0 + writew(prc_value, cf_prs_addr); + } else { + if (prc_value & 0xf) { + prc_value |= 0x40; + prc_value &= 0xfeff; + } + writew(prc_value, cf_prs_addr); + } + + udelay(10); + prs_value = readw(cf_prs_addr); + } + + prs_value &= 0xffff; + + printk(KERN_INFO " PRS register value is 0x%04x\n", prs_value); + + return ret; +} + +static void mp900_pcmcia_socket_init(struct soc_pcmcia_socket *skt) +{ + printk(KERN_INFO "mp900_pcmcia_socket_init %d\n", skt->nr); +} + +static void mp900_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) +{ + printk(KERN_INFO "mp900_pcmcia_socket_suspend %d\n", skt->nr); +} + +static struct pcmcia_low_level mp900_pcmcia_ops = { + .owner = THIS_MODULE, + .hw_init = mp900_pcmcia_hw_init, + .hw_shutdown = mp900_pcmcia_hw_shutdown, + .socket_state = mp900_pcmcia_socket_state, + .configure_socket = mp900_pcmcia_configure_socket, + .socket_init = mp900_pcmcia_socket_init, + .socket_suspend = mp900_pcmcia_socket_suspend, + .nr = 2, +}; + +static struct platform_device *mp900_pcmcia_device; + +static int __init mp900_pcmcia_init(void) +{ + int ret; + + /* request and ioremap NMC1110 registers */ + if (!request_mem_region(CF_CARD_REG, 4, "cfcard_prs")) { + printk(KERN_ERR "mp900_pcmcia_init: unable to reserve " + "CF_CARD_REG\n"); + return -ENODEV; + } + cf_prs_addr = ioremap(CF_CARD_REG, 4); + if (!cf_prs_addr) { + printk(KERN_ERR "mp900_pcmcia_init: unable to map " + "cfcard_prs\n"); + return -ENODEV; + } + + if (!request_mem_region(PC_CARD_REG, 4, "pccard_prs")) { + printk(KERN_ERR "mp900_pcmcia_init: unable to reserve " + "PC_CARD_REG\n"); + return -ENODEV; + } + pc_prs_addr = ioremap(PC_CARD_REG, 4); + if (!pc_prs_addr) { + printk(KERN_ERR "mp900_pcmcia_init: unable to map " + "pccard_prs\n"); + return -ENODEV; + } + + mp900_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); + if (!mp900_pcmcia_device) + return -ENOMEM; + + mp900_pcmcia_device->dev.platform_data = &mp900_pcmcia_ops; + + ret = platform_device_add(mp900_pcmcia_device); + + if (ret) + platform_device_put(mp900_pcmcia_device); + + return ret; +} + +static void __exit mp900_pcmcia_exit(void) +{ + /* release NMC1110 register memory */ + iounmap(cf_prs_addr); + release_mem_region(CF_CARD_REG, 4); + iounmap(pc_prs_addr); + release_mem_region(PC_CARD_REG, 4); + + platform_device_unregister(mp900_pcmcia_device); +} + +fs_initcall(mp900_pcmcia_init); +module_exit(mp900_pcmcia_exit); + +MODULE_LICENSE("GPL"); diff --git a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c index c5b2a44b4c3783..a2b1da2e5f4e48 100644 --- a/drivers/pcmcia/sa1100_generic.c +++ b/drivers/pcmcia/sa1100_generic.c @@ -63,6 +63,9 @@ static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = { #ifdef CONFIG_SA1100_COLLIE pcmcia_collie_init, #endif +#ifdef CONFIG_SA1100_JORNADA56X + pcmcia_jornada56x_init, +#endif }; static int sa11x0_drv_pcmcia_probe(struct device *dev) diff --git a/drivers/pcmcia/sa1100_generic.h b/drivers/pcmcia/sa1100_generic.h index 794f96a35bbafb..687b9459dbbcf4 100644 --- a/drivers/pcmcia/sa1100_generic.h +++ b/drivers/pcmcia/sa1100_generic.h @@ -13,6 +13,7 @@ extern int pcmcia_freebird_init(struct device *); extern int pcmcia_gcplus_init(struct device *); extern int pcmcia_graphicsmaster_init(struct device *); extern int pcmcia_h3600_init(struct device *); +extern int pcmcia_jornada56x_init(struct device *); extern int pcmcia_pangolin_init(struct device *); extern int pcmcia_pfs168_init(struct device *); extern int pcmcia_shannon_init(struct device *); diff --git a/drivers/pcmcia/sa1100_jornada56x.c b/drivers/pcmcia/sa1100_jornada56x.c new file mode 100644 index 00000000000000..d57406ebb42bee --- /dev/null +++ b/drivers/pcmcia/sa1100_jornada56x.c @@ -0,0 +1,124 @@ + +/* + * drivers/pcmcia/sa1100_jornada56x.c + * + * PCMCIA implementation routines for the HP Jornada 56x + * + * Copyright 2002 Jamey Hicks <jamey@handhelds.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. + * + * 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/module.h> +#include <linux/kernel.h> +#include <linux/sched.h> +#include <linux/device.h> +#include <linux/init.h> + +#include <asm/hardware.h> +#include <asm/mach-types.h> +#include <asm/irq.h> +#include <asm/arch/jornada56x.h> +#include "sa1100_generic.h" + +#define SOCKET0_POWER GPIO_GPIO7 +static struct pcmcia_irqs irqs[] = { + { 1, IRQ_PCMCIA_REMOVE, "Jornada56x CF Remove" }, + { 1, IRQ_PCMCIA_INSERT, "Jornada56x CF Insert" }, + { 1, IRQ_PCMCIA_STATUSCHANGE, "Jornada56x CF Status" }, + { 1, IRQ_PCMCIA_WAIT_ERROR, "Jornada56x CF Wait err" }, +}; + +static int jornada56x_pcmcia_hw_init(struct soc_pcmcia_socket *skt) +{ + JORNADA_GPDPDR |= SOCKET0_POWER; + JORNADA_GPDPSR = SOCKET0_POWER; + + skt->irq = IRQ_PCMCIA_MAIN; + + return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +static void jornada56x_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) +{ + soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +static void jornada56x_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state) +{ + unsigned long status = JORNADA_CFSR; + + state->detect=(status & JORNADA_CF_VALID)?1:0; + state->ready=(status & JORNADA_CF_READY)?1:0; + state->bvd1=(status & JORNADA_CF_BVD1)?1:0; + state->bvd2=(status & JORNADA_CF_BVD2)?1:0; + state->wrprot=(status & JORNADA_CF_WP)?1:0; + state->vs_3v=(status & JORNADA_CF_VS1)?0:1; + state->vs_Xv=(status & JORNADA_CF_VS2)?0:2; +} + +static int jornada56x_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) +{ + switch (state->Vcc) { + case 0: + JORNADA_GPDPSR = SOCKET0_POWER; + break; + case 33: + JORNADA_GPDPCR = SOCKET0_POWER; + JORNADA_CFCR = JORNADA_CF_PWAIT_EN | JORNADA_CF_FLT; + break; + default: + printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc); + return -1; + } + if (state->flags & SS_RESET) { + JORNADA_CFCR |= JORNADA_CF_RESET; + } + else { + JORNADA_CFCR &= ~JORNADA_CF_RESET; + } + return 0; +} + +static void jornada56x_pcmcia_socket_init(struct soc_pcmcia_socket *skt) +{ + JORNADA_GPDPSR = SOCKET0_POWER; + soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +static void jornada56x_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) +{ + JORNADA_GPDPSR = SOCKET0_POWER; + soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); +} + +static struct pcmcia_low_level jornada56x_pcmcia_ops = { + .owner = THIS_MODULE, + .hw_init = jornada56x_pcmcia_hw_init, + .hw_shutdown = jornada56x_pcmcia_hw_shutdown, + .socket_state = jornada56x_pcmcia_socket_state, + .configure_socket = jornada56x_pcmcia_configure_socket, + .socket_init = jornada56x_pcmcia_socket_init, + .socket_suspend = jornada56x_pcmcia_socket_suspend, +}; + +int __init pcmcia_jornada56x_init(struct device *dev) +{ + int ret = -ENODEV; + + if (machine_is_jornada56x()) + ret = sa11xx_drv_pcmcia_probe(dev, &jornada56x_pcmcia_ops, 0, 1); + + return ret; +}; diff --git a/drivers/pcmcia/sa1100_jornada720.c b/drivers/pcmcia/sa1100_jornada720.c index af485ae386024f..9268757e550b64 100644 --- a/drivers/pcmcia/sa1100_jornada720.c +++ b/drivers/pcmcia/sa1100_jornada720.c @@ -24,84 +24,78 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { - /* - * What is all this crap for? - */ - GRER |= 0x00000002; - /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ - sa1111_set_io_dir(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); - sa1111_set_io(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); - sa1111_set_sleep_io(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); - - return sa1111_pcmcia_hw_init(skt); + /* + * What is all this crap for? + */ + GRER |= 0x00000002; + /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ + sa1111_set_io_dir(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); + sa1111_set_io(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); + sa1111_set_sleep_io(SA1111_DEV(skt->dev), GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); + + return sa1111_pcmcia_hw_init(skt); } static int jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { - unsigned int pa_dwr_mask, pa_dwr_set; - int ret; + unsigned int pa_dwr_mask, pa_dwr_set; + int ret; -printk("%s(): config socket %d vcc %d vpp %d\n", __FUNCTION__, + printk("%s(): config socket %d vcc %d vpp %d\n", __FUNCTION__, skt->nr, state->Vcc, state->Vpp); - switch (skt->nr) { - case 0: - pa_dwr_mask = SOCKET0_POWER | SOCKET0_3V; - - switch (state->Vcc) { - default: - case 0: pa_dwr_set = 0; break; - case 33: pa_dwr_set = SOCKET0_POWER | SOCKET0_3V; break; - case 50: pa_dwr_set = SOCKET0_POWER; break; - } - break; - - case 1: - pa_dwr_mask = SOCKET1_POWER; - - switch (state->Vcc) { - default: - case 0: pa_dwr_set = 0; break; - case 33: pa_dwr_set = SOCKET1_POWER; break; - case 50: pa_dwr_set = SOCKET1_POWER; break; - } - break; - - default: - return -1; - } - - if (state->Vpp != state->Vcc && state->Vpp != 0) { - printk(KERN_ERR "%s(): slot cannot support VPP %u\n", - __FUNCTION__, state->Vpp); - return -1; - } - - ret = sa1111_pcmcia_configure_socket(skt, state); - if (ret == 0) { - unsigned long flags; - - local_irq_save(flags); - sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); - local_irq_restore(flags); - } - - return ret; + switch (skt->nr) { + case 0: pa_dwr_mask = SOCKET0_POWER | SOCKET0_3V; + switch (state->Vcc) { + default: + case 0: pa_dwr_set = 0;break; + case 33:pa_dwr_set = SOCKET0_POWER | SOCKET0_3V;break; + case 50:pa_dwr_set = SOCKET0_POWER;break; + } + break; + + case 1: pa_dwr_mask = SOCKET1_POWER; + switch (state->Vcc) { + default: + case 0: pa_dwr_set = 0;break; + case 33:pa_dwr_set = SOCKET1_POWER;break; + case 50:pa_dwr_set = SOCKET1_POWER;break; + } + break; + + default: return -1; + } + + if (state->Vpp != state->Vcc && state->Vpp != 0) { + printk(KERN_ERR "%s(): slot cannot support VPP %u\n", + __FUNCTION__, state->Vpp); + return -1; + } + + ret = sa1111_pcmcia_configure_socket(skt, state); + if (ret == 0) { + unsigned long flags; + + local_irq_save(flags); + sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); + local_irq_restore(flags); + } + + return ret; } static struct pcmcia_low_level jornada720_pcmcia_ops = { - .owner = THIS_MODULE, - .hw_init = jornada720_pcmcia_hw_init, - .hw_shutdown = sa1111_pcmcia_hw_shutdown, - .socket_state = sa1111_pcmcia_socket_state, - .configure_socket = jornada720_pcmcia_configure_socket, - - .socket_init = sa1111_pcmcia_socket_init, - .socket_suspend = sa1111_pcmcia_socket_suspend, + .owner = THIS_MODULE, + .hw_init = jornada720_pcmcia_hw_init, + .hw_shutdown = sa1111_pcmcia_hw_shutdown, + .socket_state = sa1111_pcmcia_socket_state, + .configure_socket = jornada720_pcmcia_configure_socket, + .socket_init = sa1111_pcmcia_socket_init, + .socket_suspend = sa1111_pcmcia_socket_suspend, }; -int __init pcmcia_jornada720_init(struct device *dev) +int __devinit pcmcia_jornada720_init(struct device *dev) { int ret = -ENODEV; diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 5b3dbcfcda48e6..6d30ca5228ccfc 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -913,6 +913,24 @@ config FB_ATMEL_STN If unsure, say N. +config FB_S1D13MP900 + tristate "Experimental S1D13806 framebuffer support for MP900/C" + depends on FB + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA + select FB_CFB_IMAGEBLIT + help + Support for S1D13XXX framebuffer device family + on the NEC MobilePro900/c. + + This really should not be needed as the existing S1D13XXX + driver should be able to accomodate the Mobilepro900 with a + few tweaks... + + Preliminary backlight/blanking support included in this + driver would be better placed somewhere like + drivers/video/backlight/mp900_bl.c + config FB_NVIDIA tristate "nVidia Framebuffer Support" depends on FB && PCI diff --git a/drivers/video/Makefile b/drivers/video/Makefile index 83e02b3429b64e..d7f9eadbb6c804 100644 --- a/drivers/video/Makefile +++ b/drivers/video/Makefile @@ -104,6 +104,7 @@ obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o obj-$(CONFIG_FB_MAXINE) += maxinefb.o obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o +obj-$(CONFIG_FB_S1D13MP900) += s1d13mp900fb.o obj-$(CONFIG_FB_IMX) += imxfb.o obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o obj-$(CONFIG_FB_PNX4008_DUM) += pnx4008/ diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig index 9609a6c676bea9..b6d7506bd134cb 100644 --- a/drivers/video/backlight/Kconfig +++ b/drivers/video/backlight/Kconfig @@ -75,6 +75,22 @@ config BACKLIGHT_HP680 If you have a HP Jornada 680, say y to enable the backlight driver. +config BACKLIGHT_HP7XX + tristate "HP Jornada 7xx LCD/Backlight Driver" + depends on BACKLIGHT_CLASS_DEVICE && SA1100_JORNADA720 + default y + help + If you have a HP Jornada 710/720/728, say y to enable + the LCD/BL driver. + +config BACKLIGHT_HP56X + tristate "HP Jornada 56x LCD/Backlight Driver" + depends on BACKLIGHT_CLASS_DEVICE && SA1100_JORNADA56X + default y + help + If you have a HP Jornada 564/565/567/568, say y to enable + the LCD/BL driver. + config BACKLIGHT_PROGEAR tristate "Frontpath ProGear Backlight Driver" depends on BACKLIGHT_CLASS_DEVICE && PCI && X86 diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile index 965a78b18118f0..7cf1eb2387c624 100644 --- a/drivers/video/backlight/Makefile +++ b/drivers/video/backlight/Makefile @@ -6,6 +6,8 @@ obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o +obj-$(CONFIG_BACKLIGHT_HP7XX) += jornada720_bllcd.o +obj-$(CONFIG_BACKLIGHT_HP56X) += jornada56x_bllcd.o obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o diff --git a/drivers/video/backlight/hp680_bl.c b/drivers/video/backlight/hp680_bl.c index fbea2bd129c73d..9badb23c1ef813 100644 --- a/drivers/video/backlight/hp680_bl.c +++ b/drivers/video/backlight/hp680_bl.c @@ -1,6 +1,7 @@ /* * Backlight Driver for HP Jornada 680 * + * Copyright (c) 2007 Kristoffer Ericson * Copyright (c) 2005 Andriy Skulysh * * Based on Sharp's Corgi Backlight Driver @@ -27,11 +28,13 @@ static int hp680bl_suspended; static int current_intensity = 0; -static DEFINE_SPINLOCK(bl_lock); +static DEFINE_SPINLOCK(jornada_bl_lock); +unsigned long jornada_flags; +static struct platform_device *hp680_platform_device; +static struct backlight_device *hp680_backlight_device; static void hp680bl_send_intensity(struct backlight_device *bd) { - unsigned long flags; u16 v; int intensity = bd->props.brightness; @@ -42,7 +45,7 @@ static void hp680bl_send_intensity(struct backlight_device *bd) if (hp680bl_suspended) intensity = 0; - spin_lock_irqsave(&bl_lock, flags); + spin_lock_irqsave(&jornada_bl_lock, jornada_flags); if (intensity && current_intensity == 0) { sh_dac_enable(DAC_LCD_BRIGHTNESS); v = inw(HD64461_GPBDR); @@ -58,17 +61,19 @@ static void hp680bl_send_intensity(struct backlight_device *bd) } else if (intensity) { sh_dac_output(255-(u8)intensity, DAC_LCD_BRIGHTNESS); } - spin_unlock_irqrestore(&bl_lock, flags); + spin_unlock_irqrestore(&jornada_bl_lock, jornada_flags); current_intensity = intensity; + } - #ifdef CONFIG_PM static int hp680bl_suspend(struct platform_device *pdev, pm_message_t state) { struct backlight_device *bd = platform_get_drvdata(pdev); + bd->props.power = FB_BLANK_POWERDOWN; + hp680bl_suspended = 1; hp680bl_send_intensity(bd); return 0; @@ -78,6 +83,8 @@ static int hp680bl_resume(struct platform_device *pdev) { struct backlight_device *bd = platform_get_drvdata(pdev); + bd->props.power = FB_BLANK_UNBLANK; + hp680bl_suspended = 0; hp680bl_send_intensity(bd); return 0; @@ -105,18 +112,13 @@ static struct backlight_ops hp680bl_ops = { static int __init hp680bl_probe(struct platform_device *pdev) { - struct backlight_device *bd; + hp680_backlight_device = backlight_device_register ("hp680-bl", &pdev->dev, NULL, &hp680bl_ops); - bd = backlight_device_register ("hp680-bl", &pdev->dev, NULL, - &hp680bl_ops); - if (IS_ERR(bd)) - return PTR_ERR(bd); + platform_set_drvdata(pdev, hp680_backlight_device); - platform_set_drvdata(pdev, bd); - - bd->props.max_brightness = HP680_MAX_INTENSITY; - bd->props.brightness = HP680_DEFAULT_INTENSITY; - hp680bl_send_intensity(bd); + hp680_backlight_device->props.max_brightness = HP680_MAX_INTENSITY; + hp680_backlight_device->props.brightness = HP680_DEFAULT_INTENSITY; + hp680bl_send_intensity(hp680_backlight_device); return 0; } @@ -144,22 +146,20 @@ static struct platform_driver hp680bl_driver = { }, }; -static struct platform_device *hp680bl_device; - static int __init hp680bl_init(void) { int ret; ret = platform_driver_register(&hp680bl_driver); if (!ret) { - hp680bl_device = platform_device_alloc("hp680-bl", -1); - if (!hp680bl_device) + hp680_platform_device = platform_device_alloc("hp680-bl", -1); + if (!hp680_platform_device) return -ENOMEM; - ret = platform_device_add(hp680bl_device); + ret = platform_device_add(hp680_platform_device); if (ret) { - platform_device_put(hp680bl_device); + platform_device_put(hp680_platform_device); platform_driver_unregister(&hp680bl_driver); } } @@ -168,7 +168,7 @@ static int __init hp680bl_init(void) static void __exit hp680bl_exit(void) { - platform_device_unregister(hp680bl_device); + platform_device_unregister(hp680_platform_device); platform_driver_unregister(&hp680bl_driver); } diff --git a/drivers/video/backlight/jornada56x_bllcd.c b/drivers/video/backlight/jornada56x_bllcd.c new file mode 100644 index 00000000000000..b9a609f613c519 --- /dev/null +++ b/drivers/video/backlight/jornada56x_bllcd.c @@ -0,0 +1,238 @@ +/* + * drivers/video/backlight/jornada56x_bllcd.c + * + * HP Jornada560 Series init code + * + * Copyright 2008 Michael J Kaye <mjkaye@ippimail.com> + * Based on jornada56x.c from the Handhelds.org tree, copyright Alex Lange, + * and jornada720_bllcd.c, copyright Kristoffer Ericson. + * + * 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. + * + * 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/module.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/backlight.h> +#include <linux/lcd.h> +#include <linux/delay.h> +#include <linux/platform_device.h> +#include <linux/fb.h> +#include <linux/device.h> +#include <asm/hardware.h> +#include <asm/arch/jornada56x.h> +#include <../drivers/video/sa1100fb.h> + +MODULE_AUTHOR("Michael J Kaye <mjkaye@ippimail.com>"); +MODULE_DESCRIPTION("HP Jornada 560 Series Backlight/LCD Driver"); +MODULE_LICENSE("GPL"); + +/* Brightness */ +#define BL_MAX_BRIGHT 0xbe +#define BL_DEF_BRIGHT 0x19 + +struct bllcd_device { + struct backlight_device *bl_device; + struct lcd_device *lcd_device; +}; + +/* + * BACKLIGHT HANDLING ROUTINES + */ + +static void jornada56x_backlight_power (int on) +{ + if (on) + JORNADA_GPDPCR = JORNADA_BACKLIGHT; + else + JORNADA_GPDPSR = JORNADA_BACKLIGHT; +} + +static int jornada56x_backlight_get_brightness (struct backlight_device *bd) +{ + return (JORNADA_PWM1_DATA - 0x40000000); +} + +static int jornada56x_bl_update_status (struct backlight_device *bd) +{ + int value = bd->props.brightness; + int brightness = 190 - value; + + if (bd->props.power != FB_BLANK_UNBLANK) { + jornada56x_backlight_power(0); + return 0; + } + if (bd->props.fb_blank != FB_BLANK_UNBLANK) { + jornada56x_backlight_power(0); + return 0; + } + + jornada56x_backlight_power(1); + + JORNADA_PWM1_CKDR = 0; + /* range is from 0 (brightest) to 255 (darkest) + * although values > 190 are no good + */ + JORNADA_PWM1_DATA = brightness; + JORNADA_PWM_CTRL = 1; /* enable backlight control - 1=Enable ; 0=Disable */ + return 0; +} + +/* + * LCD HANDLING FUNCTIONS + */ +static void jornada56x_lcd_power(int on) +{ + if (on) { + GPSR = GPIO_GPIO24; + } else { + GPCR = GPIO_GPIO24; + } +} + +static int jornada56x_lcd_get_power(struct lcd_device *ld) +{ + return (GPLR & GPIO_GPIO24) ? 0 : 4; +} + +static int jornada56x_lcd_set_power(struct lcd_device *ld, int state) +{ + if (state==0) + jornada56x_lcd_power(1); + else + jornada56x_lcd_power(0); + + return 0; +} + +static struct backlight_ops jornada56x_bl_ops = { + .get_brightness = jornada56x_backlight_get_brightness, + .update_status = jornada56x_bl_update_status, +}; + +static struct lcd_ops jornada56x_lcd_ops = { + .get_power = jornada56x_lcd_set_power, + .set_power = jornada56x_lcd_get_power, +}; + +static int __init jornada56x_bl_probe(struct platform_device *pdev) +{ + struct bllcd_device *bllcd; + int ret; + + bllcd = kzalloc(sizeof(*bllcd), GFP_KERNEL); + if (bllcd == NULL) + return -ENOMEM; + + /* bl driver - name must match fb driver name */ + bllcd->bl_device = backlight_device_register("sa1100fb", &pdev->dev, NULL, + &jornada56x_bl_ops); + + if (IS_ERR(bllcd->bl_device)) { + ret = PTR_ERR(bllcd->bl_device); + printk(KERN_ERR "bl :failed to register device\n"); + kfree(bllcd); + return ret; + } + + /* lcd driver */ + bllcd->lcd_device = lcd_device_register("sa1100fb", &pdev->dev, NULL, + &jornada56x_lcd_ops); + if (IS_ERR(bllcd->lcd_device)) { + ret = PTR_ERR(bllcd->lcd_device); + backlight_device_unregister(bllcd->bl_device); + printk(KERN_ERR "lcd :failed to register device\n"); + kfree(bllcd); + return ret; + } + + jornada56x_lcd_set_power(bllcd->lcd_device, FB_BLANK_UNBLANK); + + msleep(100); + + bllcd->bl_device->props.power = FB_BLANK_UNBLANK; + bllcd->bl_device->props.brightness = BL_DEF_BRIGHT; + jornada56x_bl_update_status(bllcd->bl_device); + + platform_set_drvdata(pdev, bllcd); + printk(KERN_INFO "HP Jornada 56x Backlight/LCD driver activated\n"); + + return 0; +} + +static int jornada56x_bl_remove(struct platform_device *pdev) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_POWERDOWN; + bllcd->bl_device->props.brightness = 0; + bllcd->bl_device->props.max_brightness = 0; + + backlight_device_unregister(bllcd->bl_device); + lcd_device_unregister(bllcd->lcd_device); + + return 0; +} +static int jornada56x_bl_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_POWERDOWN; + bllcd->bl_device->props.brightness = 0; + bllcd->bl_device->props.max_brightness = 0; + jornada56x_bl_update_status(bllcd->bl_device); + + jornada56x_lcd_set_power(bllcd->lcd_device, FB_BLANK_POWERDOWN); + + return 0; +} + +static int jornada56x_bl_resume(struct platform_device *pdev) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_UNBLANK; + bllcd->bl_device->props.brightness = BL_DEF_BRIGHT; + bllcd->bl_device->props.max_brightness = BL_MAX_BRIGHT; + jornada56x_bl_update_status(bllcd->bl_device); + + jornada56x_lcd_set_power(bllcd->lcd_device, FB_BLANK_UNBLANK); + + return 0; +} + +static struct platform_driver jornada56x_bl_driver = { + .remove = jornada56x_bl_remove, +#ifdef CONFIG_PM + .suspend = jornada56x_bl_suspend, + .resume = jornada56x_bl_resume, +#endif + .driver = { + .name = "jornada56x_bllcd", + }, +}; + +static int __init jornada56x_bl_init(void) +{ + return platform_driver_probe(&jornada56x_bl_driver, jornada56x_bl_probe); +} + +static void __exit jornada56x_bl_exit(void) +{ + platform_driver_unregister(&jornada56x_bl_driver); +} + +module_init(jornada56x_bl_init); +module_exit(jornada56x_bl_exit); diff --git a/drivers/video/backlight/jornada720_bllcd.c b/drivers/video/backlight/jornada720_bllcd.c new file mode 100644 index 00000000000000..b464c465f6bfa7 --- /dev/null +++ b/drivers/video/backlight/jornada720_bllcd.c @@ -0,0 +1,290 @@ +/* + * + * Backlight and LCD Driver for HP Jornada 720 + * Copyright (C) 2007 Kristoffer Ericson <Kristoffer.Ericson@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 + * or any later version as published by the Free Software Foundation. + * + */ +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/backlight.h> +#include <linux/lcd.h> +#include <linux/delay.h> +#include <linux/platform_device.h> +#include <linux/fb.h> +#include <linux/device.h> +#include <asm/hardware.h> +#include <asm/arch/jornada720.h> +#include <video/s1d13xxxfb.h> + +MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); +MODULE_DESCRIPTION("HP Jornada 710/720/728 Backlight/LCD Driver"); +MODULE_LICENSE("GPL"); + +/* Contrast */ +#define LCD_MAX_CONTR 0xff +#define LCD_DEF_CONTR 0x80 +/* Brightness */ +#define BL_MAX_BRIGHT 0xff +#define BL_DEF_BRIGHT 0x19 + +struct bllcd_device { + struct backlight_device *bl_device; + struct lcd_device *lcd_device; +}; + +/* + * BACKLIGHT HANDLING ROUTINES + */ +static int jornada_bl_get_brightness(struct backlight_device *dev) +{ + int ret; + + /* check if backlight is on */ + if (!(PPSR & PPC_LDD1)) + return BL_MAX_BRIGHT; + + jornada_ssp_start(); + if (jornada_ssp_inout(GETBRIGHTNESS) == -ETIMEDOUT) { + printk(KERN_ERR "bl :get brightness timeout\n"); + ret = -1; + } else + ret = jornada_ssp_inout(TXDUMMY); + + jornada_ssp_end(); + + /* 0 is max brightness */ + return BL_MAX_BRIGHT - ret; +} + +static int jornada_bl_update_status(struct backlight_device *dev) +{ + int ret = 0; + int value; + + jornada_ssp_start(); + + if (dev->props.power != FB_BLANK_UNBLANK || + dev->props.fb_blank != FB_BLANK_UNBLANK) { + ret = jornada_ssp_inout(BRIGHTNESSOFF); + if (ret == -ETIMEDOUT) { + printk(KERN_ERR "bl : brightness off timeout\n"); + /* backlight off */ + PPSR &= ~PPC_LDD1; + PPDR |= PPC_LDD1; + } + } else { /* backlight on */ + PPSR |= PPC_LDD1; + /* send setbrightness cmd */ + ret = jornada_ssp_inout(SETBRIGHTNESS); + if (ret != TXDUMMY) { + printk(KERN_ERR "bl :set brightness timeout\n"); + } else { + /* cmd accepted */ + value = BL_MAX_BRIGHT - dev->props.brightness; + if (jornada_ssp_byte(value) == TXDUMMY) + ret = value; + else + printk(KERN_ERR "bl :set brightness failed\n"); + } + } + + jornada_ssp_end(); + + return ret; +} + +/* + * LCD HANDLING FUNCTIONS + */ +static int jornada_lcd_set_contrast(struct lcd_device *pdev, int contrast) +{ + int ret = 0; + + jornada_ssp_start(); + + ret = jornada_ssp_inout(SETCONTRAST); + + if (ret == -ETIMEDOUT) + printk(KERN_ERR "lcd :set contrast timeout\n"); + else + ret = jornada_ssp_byte(contrast); + + jornada_ssp_end(); + + return ret; +} + +static int jornada_lcd_set_power(struct lcd_device *pdev, int power) +{ + if (power != FB_BLANK_UNBLANK) { + /* turn off LCD */ + PPSR &= ~PPC_LDD2; + PPDR |= PPC_LDD2; + } else { + /* turn on LCD */ + PPSR |= PPC_LDD2; + } + + return 0; +} + +static int jornada_lcd_get_power(struct lcd_device *pdev) +{ + if (PPSR & PPC_LDD2) + return FB_BLANK_UNBLANK; + else + return FB_BLANK_POWERDOWN; +} + +static int jornada_lcd_get_contrast(struct lcd_device *pdev) +{ + int ret; + + /* Don't set contrast on off powerd LCD */ + if (jornada_lcd_get_power(pdev) != FB_BLANK_UNBLANK) + return 0; + + jornada_ssp_start(); + + ret = jornada_ssp_inout(GETCONTRAST); + if (ret != -ETIMEDOUT) + ret = jornada_ssp_inout(TXDUMMY); + else { + printk(KERN_ERR "lcd :get contrast timeout\n"); + ret = -1; + } + + jornada_ssp_end(); + + return ret; +} + +static struct backlight_ops jornada_bl_ops = { + .get_brightness = jornada_bl_get_brightness, + .update_status = jornada_bl_update_status, +}; + +static struct lcd_ops jornada_lcd_ops = { + .get_contrast = jornada_lcd_get_contrast, + .set_contrast = jornada_lcd_set_contrast, + .get_power = jornada_lcd_get_power, + .set_power = jornada_lcd_set_power, +}; + +static int jornada_bl_probe(struct platform_device *pdev) +{ + struct bllcd_device *bllcd; + int ret; + + bllcd = kzalloc(sizeof(*bllcd), GFP_KERNEL); + if (bllcd == NULL) + return -ENOMEM; + + /* bl driver - name must match fb driver name */ + bllcd->bl_device = backlight_device_register(S1D_DEVICENAME, + &pdev->dev, NULL, &jornada_bl_ops); + + if (IS_ERR(bllcd->bl_device)) { + ret = PTR_ERR(bllcd->bl_device); + printk(KERN_ERR "bl :failed to register device\n"); + kfree(bllcd); + return ret; + } + + /* lcd driver */ + bllcd->lcd_device = lcd_device_register(S1D_DEVICENAME, + &pdev->dev, NULL, &jornada_lcd_ops); + if (IS_ERR(bllcd->lcd_device)) { + ret = PTR_ERR(bllcd->lcd_device); + backlight_device_unregister(bllcd->bl_device); + printk(KERN_ERR "lcd :failed to register device\n"); + kfree(bllcd); + return ret; + } + + jornada_lcd_set_contrast(bllcd->lcd_device, LCD_DEF_CONTR); + jornada_lcd_set_power(bllcd->lcd_device, FB_BLANK_UNBLANK); + + msleep(100); + + bllcd->bl_device->props.power = FB_BLANK_UNBLANK; + bllcd->bl_device->props.brightness = BL_DEF_BRIGHT; + jornada_bl_update_status(bllcd->bl_device); + + platform_set_drvdata(pdev, bllcd); + printk(KERN_INFO "HP Jornada 7xx Backlight/LCD driver activated\n"); + + return 0; +} + +static int jornada_bl_remove(struct platform_device *pdev) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_POWERDOWN; + bllcd->bl_device->props.brightness = 0; + bllcd->bl_device->props.max_brightness = 0; + + backlight_device_unregister(bllcd->bl_device); + lcd_device_unregister(bllcd->lcd_device); + + return 0; +} + +static int jornada_bl_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_POWERDOWN; + bllcd->bl_device->props.brightness = 0; + bllcd->bl_device->props.max_brightness = 0; + jornada_bl_update_status(bllcd->bl_device); + + jornada_lcd_set_power(bllcd->lcd_device, FB_BLANK_POWERDOWN); + + return 0; +} + +static int jornada_bl_resume(struct platform_device *pdev) +{ + struct bllcd_device *bllcd = platform_get_drvdata(pdev); + + bllcd->bl_device->props.power = FB_BLANK_UNBLANK; + bllcd->bl_device->props.brightness = BL_DEF_BRIGHT; + bllcd->bl_device->props.max_brightness = BL_MAX_BRIGHT; + jornada_bl_update_status(bllcd->bl_device); + + jornada_lcd_set_power(bllcd->lcd_device, FB_BLANK_UNBLANK); + + return 0; +} + +static struct platform_driver jornada_bl_driver = { + .probe = jornada_bl_probe, + .remove = jornada_bl_remove, +#ifdef CONFIG_PM + .suspend = jornada_bl_suspend, + .resume = jornada_bl_resume, +#endif + .driver = { + .name = "jornada_bllcd", + }, +}; + +static int __init jornada_bl_init(void) +{ + return platform_driver_register(&jornada_bl_driver); +} + +static void __exit jornada_bl_exit(void) +{ + platform_driver_unregister(&jornada_bl_driver); +} + +module_init(jornada_bl_init); +module_exit(jornada_bl_exit); diff --git a/drivers/video/s1d13mp900fb.c b/drivers/video/s1d13mp900fb.c new file mode 100644 index 00000000000000..3248004d41fa3f --- /dev/null +++ b/drivers/video/s1d13mp900fb.c @@ -0,0 +1,282 @@ +/* drivers/video/s1d13mp900fb.c + * + * IT IS NOT INTENDED THAT THIS FILE BE SUBMITTED TO VANILLA + * + * for now this is a standalone driver for testing the + * specifics of the MobilePro->S1D13806 interface + * + * the existing s1d13xxxfb.c driver should work with the Mobilepro900c + * if it is told where in memory to find the chip + * physical addresses: + * base/registers 0x0c00_0000 + * framebuffer 0x0c20_0000 + * and initial register settings + * TODO establish default register values + * perhaps all that belongs in + * arch/arm/mach-pxa/mp900.c + * + * blanking/backlight specific code should go in + * drivers/video/backlight/mp900_bl.c or so + * + * Michael Petchkovsky mkpetch@internode.on.net May 2007 + */ + +/* TODO + * clear hardware cursor + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/sched.h> +#include <linux/errno.h> +#include <linux/string.h> +#include <linux/interrupt.h> +#include <linux/slab.h> +#include <linux/delay.h> +#include <linux/fb.h> +#include <linux/init.h> + +#include <linux/ioport.h> +#include <linux/device.h> +#include <linux/dma-mapping.h> + +#include <asm/io.h> +#include <asm/uaccess.h> +#include <asm/hardware.h> + +#include "console/fbcon.h" + +#define PFX "s1d13mp900fb: " +#define S1D13MP900_FB_PHYS 0x0C200000 +#define S1D13MP900_REG_PHYS 0x0C000000 +#define S1D13MP900_FB_SIZE 0x00140000 + +u32 pseudo_pal[16]; +static void *remapped_regs; +static void *remapped_fb; +struct fb_info fb_info; + +static int s1d13mp900fb_setcolreg(unsigned regno, unsigned red, unsigned green, + unsigned blue, unsigned transp, + struct fb_info *fb_info) +{ + int bpp, m = 0; + + bpp = fb_info->var.bits_per_pixel; + m = (bpp <= 8) ? (1 << bpp) : 256; + if (regno >= m) { + printk("regno %d out of range (max %d)\n", regno, m); + return -EINVAL; + } + switch (bpp) { + case 8: + break; + case 16: + pseudo_pal[regno] = ((red & 0xF800) | + ((green & 0xFC00) >> 5) | + ((blue & 0xF800) >> 11)); + break; + } + + return 0; +} + +static int s1d13mp900fb_blank(int blank, struct fb_info *info) +{ + u32 rval; + switch (blank) { + case FB_BLANK_POWERDOWN: + case FB_BLANK_VSYNC_SUSPEND: + case FB_BLANK_HSYNC_SUSPEND: + case FB_BLANK_NORMAL: + /* we want to switch off the backlight via + * the s1d13xxx gpio pins and put the chip + * to sleep + * + * gpio pins are controlled through register + * 0x08/0x09, we clear pins 4,1,2 and set pin 0 + * + * this could be done by + * writel(0x0001, remapped_regs + 0x8) + * but safer to read initial values and set pins + * one-by-one, delays could be introduced between + * steps if required... + */ + rval = readl(remapped_regs + 0x8); + rval &= 0xffef; + writel(rval, remapped_regs + 0x8); + rval &= 0xfffd; + writel(rval, remapped_regs + 0x8); + rval &= 0xfffd; + writel(rval, remapped_regs + 0x8); + rval |= 1; + writel(rval, remapped_regs + 0x8); + /* power save config register is at 0x1f0 + * set it to 0x11 for zzz and 0x10 to wake + */ + writel(0x11, remapped_regs + 0x1f0); + /* after this it would be safe to shutdown + * pixel and memory clocks, read 0x1f1 to + * confirm sleep-mode entered + * + * perhaps PWM0 clock can be disabled with + * backlight off to save a little power + */ + break; + + case FB_BLANK_UNBLANK: + /* we reverse the blanking sequence */ + writel(0x10, remapped_regs + 0x1f0); + rval = readl(remapped_regs + 0x8); + rval &= 0xfffe; + writel(rval, remapped_regs + 0x8); + rval |= 4; + writel(rval, remapped_regs + 0x8); + rval |= 2; + writel(rval, remapped_regs + 0x8); + /* want a delay here? */ + rval |= 0x10; + writel(rval, remapped_regs + 0x8); + } + + return 0; +} + +struct s1d13mp900fb_par { + void __iomem *regs; + unsigned char display; +}; + +static struct fb_fix_screeninfo s1d13mp900fb_fix __initdata = { + .id = "S1DMP_FBID", +// .smem_len = (640 * 240 * 16) / 8, //TODO check this + .smem_len = S1D13MP900_FB_SIZE, + .smem_start = S1D13MP900_FB_PHYS, + .type = FB_TYPE_PACKED_PIXELS, + .visual = FB_VISUAL_TRUECOLOR, + .line_length = (640 * 16) / 8, + .type_aux = 0, + .xpanstep = 0, + .ypanstep = 1, + .ywrapstep = 0, + .accel = FB_ACCEL_NONE, +}; + +static struct fb_var_screeninfo s1d13mp900fb_screeninfo = { + .xres = 640, + .yres = 240, + .xres_virtual = 640, + .yres_virtual = 240, + .bits_per_pixel = 16, + .red.length = 5, + .green.length = 6, + .blue.length = 5, + .transp.length = 0, + .red.offset = 11, + .green.offset = 5, + .blue.offset = 0, + .transp.offset = 0, + .activate = FB_ACTIVATE_NOW, + .height = -1, + .width = -1, + .vmode = FB_VMODE_NONINTERLACED, + .accel_flags = 0, + .nonstd = 0, +}; + +static struct fb_ops s1d13mp900fb_ops = { + .owner = THIS_MODULE, + .fb_setcolreg = s1d13mp900fb_setcolreg, + .fb_fillrect = cfb_fillrect, + .fb_copyarea = cfb_copyarea, + .fb_imageblit = cfb_imageblit, +// .fb_cursor = soft_cursor, + .fb_blank = s1d13mp900fb_blank, +}; + +/* colour lookup tables? l8r if we need them + */ + +unsigned char LUT8[256*3]; + +//static char lut_base[90]; + +void s1d13mp900fb_init_hardware (void) +{ +// unsigned char *pLUT = LUT8; +// unsigned char *pseed = lut_base; +// unsigned char plast[3]; +// int i, j, rgb; + int rval; + + /* OK let's assume chip has been set up by bootloader for now + * this would be a good chance to take a peek at the regs ;) + * TODO let's not assume... + */ + + rval = readb(remapped_regs); + printk (KERN_INFO PFX "reg[0x000] revision code is 0x%X\n", rval); +} + +int __init s1d13mp900fb_init(void) +{ + if (fb_get_options("s1d13mp900fb", NULL)) + return -ENODEV; + + printk (KERN_INFO PFX "initing now...\n"); + + /* remap framebuffer and registers */ + + /* do we need to request_mem_region ? */ + if (!request_mem_region(S1D13MP900_FB_PHYS, + S1D13MP900_FB_SIZE, "s1d13806_fb")) { + printk (KERN_ERR PFX "unable to reserve framebuffer\n"); + } else { + remapped_fb = ioremap_nocache(S1D13MP900_FB_PHYS, + S1D13MP900_FB_SIZE); + if (!remapped_fb) + printk (KERN_INFO PFX "unable to map framebuffer\n"); + } + + if (!request_mem_region(S1D13MP900_REG_PHYS, 512, "s1d13806_regs")) { + printk (KERN_ERR PFX "unable to reserve registers\n"); + } else { + remapped_regs = ioremap_nocache(S1D13MP900_REG_PHYS, 512); + if (!remapped_regs) + printk(KERN_ERR PFX "unable to map registers\n"); + } + + fb_info.screen_base = remapped_fb; + fb_info.screen_size = S1D13MP900_FB_SIZE; //TODO correct?? + memset(&fb_info.var, 0, sizeof(fb_info.var)); + + s1d13mp900fb_init_hardware(); + /* you could zero out the display here with memset */ + + fb_info.fbops = &s1d13mp900fb_ops; + fb_info.var = s1d13mp900fb_screeninfo; + fb_info.fix = s1d13mp900fb_fix; + fb_info.flags = FBINFO_DEFAULT; + fb_info.pseudo_palette= &pseudo_pal; + + if (register_framebuffer(&fb_info) < 0) + return 1; + + return 0; +} + +static void __exit s1d13mp900fb_exit(void) +{ + printk (KERN_INFO PFX "unregistering framebuffer device\n"); + iounmap(remapped_regs); + iounmap(remapped_fb); + release_mem_region(S1D13MP900_REG_PHYS, 512); + release_mem_region(S1D13MP900_FB_PHYS, S1D13MP900_FB_SIZE); + unregister_framebuffer(&fb_info); +} + +module_init(s1d13mp900fb_init); +module_exit(s1d13mp900fb_exit); +MODULE_AUTHOR("Michael Petchkovsky"); +MODULE_DESCRIPTION("Epson S1D13806 fb interface for NEC MobilePro900/c"); +MODULE_LICENSE("GPL"); diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/s1d13xxxfb.c index b829dc7c5edfeb..89f0464c70eb3a 100644 --- a/drivers/video/s1d13xxxfb.c +++ b/drivers/video/s1d13xxxfb.c @@ -607,9 +607,9 @@ s1d13xxxfb_probe(struct platform_device *pdev) goto bail; } - revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE); - if ((revision >> 2) != S1D_CHIP_REV) { - printk(KERN_INFO PFX "chip not found: %i\n", (revision >> 2)); + revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE) >> 2; + if (revision != S1D13806_CHIP_REV && revision != S1D13506_CHIP_REV) { + printk(KERN_INFO PFX "chip not found: %i\n", (revision)); ret = -ENODEV; goto bail; } diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index ab2b2110478bc2..a4bacc265150ad 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c @@ -397,6 +397,26 @@ static struct sa1100fb_mach_info shannon_info __initdata = { }; #endif +#ifdef CONFIG_SA1100_JORNADA56X +static struct sa1100fb_mach_info jornada56x_info __initdata = { + .pixclock = 179264, .bpp = 16, + .xres = 240, .yres = 320, + .hsync_len = 4, .vsync_len = 2, + .left_margin = 7, .upper_margin = 2, + .right_margin = 3, .lower_margin = 3, + .sync = 0, .cmap_static = 1, + .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, + .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), +}; + +static struct sa1100fb_rgb jornada56x_rgb_16 = { + .red = { .offset = 12, .length = 4, }, + .green = { .offset = 7, .length = 4, }, + .blue = { .offset = 1, .length = 4, }, + .transp = { .offset = 0, .length = 0, }, +}; +#endif + static struct sa1100fb_mach_info * __init @@ -461,6 +481,12 @@ sa1100fb_get_machine_info(struct sa1100fb_info *fbi) inf = &shannon_info; } #endif +#ifdef CONFIG_SA1100_JORNADA56X + if (machine_is_jornada56x()) { + inf= &jornada56x_info; + fbi->rgb[RGB_16] = &jornada56x_rgb_16; + } +#endif return inf; } diff --git a/include/asm-arm/arch-sa1100/irqs.h b/include/asm-arm/arch-sa1100/irqs.h index d7940683efb18c..5ca74b6f097f76 100644 --- a/include/asm-arm/arch-sa1100/irqs.h +++ b/include/asm-arm/arch-sa1100/irqs.h @@ -155,6 +155,8 @@ #define NR_IRQS (IRQ_S1_BVD1_STSCHG + 1) #elif defined(CONFIG_SA1100_H3800) #define NR_IRQS (IRQ_BOARD_END) +#elif defined(CONFIG_SA1100_JORNADA56X) +#define NR_IRQS (IRQ_BOARD_END + 64) #elif defined(CONFIG_SHARP_LOCOMO) #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1) #else diff --git a/include/asm-arm/arch-sa1100/jornada56x.h b/include/asm-arm/arch-sa1100/jornada56x.h new file mode 100644 index 00000000000000..3bdbb7af0d1f3d --- /dev/null +++ b/include/asm-arm/arch-sa1100/jornada56x.h @@ -0,0 +1,362 @@ +/* + * linux/include/asm-arm/arch-sa1100/jornada56x.h + * + * Created 2002/3/6 by John Ankcorn <jca@alum.mit.edu> + * + * This file contains the hardware specific definitions for HP Jornada 56x + * + * Copyright 2008 Michael Kaye <mjkaye@ippimail.com> + * Copyright 2002 John Ankcorn <jca@alum.mit.edu> + * + * This source code is distributed under a dual licence of GPL (version 2 or + * later) and MIT/X11. + * + * GPL: + * 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 Generel Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * MIT/X11: + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Changelog: + * 20080303 JCA Relicensed to GPL-MIT/X11 licence + * 20080509 MJK Added IRQs and ASIC REGSTART/REGLEN + * + */ + +#ifndef __ASM_ARCH_JORNADA56X_H +#define __ASM_ARCH_JORNADA56X_H + +#include <linux/irqreturn.h> +#include <asm/hardware.h> +#include <asm/irq.h> + +#ifndef __ASSEMBLY__ + +/* SA-1110 GPIO lines */ +#define GPIO_JORNADA56X_ASIC GPIO_GPIO(10) +#define GPIO_JORNADA56X_ASIC_IRQ IRQ_GPIO10 +#define GPIO_JORNADA56X_POWER_SWITCH GPIO_GPIO0 +#define GPIO_JORNADA56X_POWER_SWITCH_IRQ IRQ_GPIO0 +#define GPIO_JORNADA56X_TOUCH GPIO_GPIO13 +#define GPIO_JORNADA56X_TOUCH_IRQ IRQ_GPIO13 + +#define JORNADA56X_ASIC_BASE 0xf0000000 /* physical 0x40000000 */ +#define JORNADA56X_ASIC_REGSTART 0x40000000 /* phys of JORNADA56X_ASIC_BASE */ +#define JORNADA56X_ASIC_REGLEN 0x00100000 + +#define PMU_BASE ((volatile long *)JORNADA56X_ASIC_BASE) +#define JORNADA_SCR PMU_BASE[0] /* System Control Register - scr */ +#define JORNADA_ASIC_SLEEP_EN 0x0001 +#define JORNADA_RCLK_EN 0x0002 /* 1=Enable internal system reference clock 3.6864MHz */ +#define JORNADA_INT_TEST_BIT 0x0004 +#define JORNADA_PLL_EN 0x0008 /*1=Enable PLL, 0=Bypass PLL */ +#define JORNADA_PLL_LOCK 0x0010 /*1=Locked, 0=Not locked */ +#define JORNADA_SPI_FCLK_EN 0x0020 +#define JORNADA_GPIOAFR PMU_BASE[1] /*GPIO Alternative Function Register - gpioafr */ +#define JORNADA_GP_PWM1 0x02 +#define JORNADA_GP_PWM2 0x04 +#define JORNADA_GP_MW 0x08 +#define JORNADA_GP_L3 0x10 +#define JORNADA_GP_SPI 0x20 +#define JORNADA_PWM1_CKDR PMU_BASE[2] +#define JORNADA_PWM2_CKDR PMU_BASE[3] +#define JORNADA_PCR PMU_BASE[4] /* Power Control register - pcr */ +#define JORNADA_L3CLK_EN 0x0001 +#define JORNADA_PWM1CLK_EN 0x0002 +#define JORNADA_PWM2CLK_EN 0x0004 +#define JORNADA_MW_CLK_EN 0x0010 +#define JORNADA_I2S_CLK_EN 0x0020 +#define JORNADA_GPIO_INT_CLK_EN 0x0040 +#define JORNADA_UART_CLK_EN 0x0080 +#define JORNADA_SM_CLK_EN 0x0100 +#define JORNADA_MMC_CLK_EN 0x0200 +#define JORNADA_SPI_CLK_EN 0x0400 +#define JORNADA_CF_CLK_EN 0x0800 +#define JORNADA_MUX_CLK0 0x1000 +#define JORNADA_MUX_CLK1 0x2000 +#if 0 /* don't use this register */ +#define JORNADA_SRR PMU_BASE[5] +#define JORNADA_L3_RST 0x0001 +#define JORNADA_PWM_RST 0x0002 +#define JORNADA_MW_RST 0x0008 +#define JORNADA_I2S_RST 0x0010 +#define JORNADA_AL_RST 0x0020 +#define JORNADA_GPIO_RST 0x0040 +#define JORNADA_INT_RST 0x0080 +#define JORNADA_UART_RST 0x0100 +#define JORNADA_SM_RST 0x0200 +#define JORNADA_MMC_RST 0x0400 +#define JORNADA_SPI_RST 0x0800 +#define JORNADA_CF_RST 0x1000 +#endif + +/* Interrupt Control Register Locations */ +#define INTR_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x100)) +#define JORNADA_INT_EN INTR_BASE[0] +/* or to set, and to clear */ +#define JORNADA_INT_STAT INTR_BASE[1] /* write 1 to clear */ +/* Interrupt Source for Group 1 - int_en / int_stat */ +#define JORNADA_MMC_INT 0x0001 +#define JORNADA_MMC_DETECT_INT 0x0002 +#define JORNADA_MMC_REMOVE_INT 0x0004 +#define JORNADA_L3_DONE_INT 0x0008 +#define JORNADA_MW_TX_INT 0x0020 +#define JORNADA_MW_RX_INT 0x0040 +#define JORNADA_MW_TUR_INT 0x0080 +#define JORNADA_MW_TOR_INT 0x0100 +#define JORNADA_MW_ROR_INT 0x0200 +#define JORNADA_ALARM_ACK_INT 0x0400 +#define JORNADA_CF_REMOVE 0x0800 +#define JORNADA_GPIO_B_INT 0x1000 +#define JORNADA_GPIO_C_INT 0x2000 +#define JORNADA_INT_WK_EN INTR_BASE[2] +#define JORNADA_INT_WK_POL INTR_BASE[3] +#define JORNADA_INT_TEST INTR_BASE[4] +#define JORNADA_GPIOB_RE_EN INTR_BASE[5] /* rising edge enable */ +#define JORNADA_GPIOB_FE_EN INTR_BASE[6] /* falling edge */ +#define JORNADA_GPIOB_STAT INTR_BASE[7] +#define JORNADA_GPIOB_WK_EN INTR_BASE[8] +#define JORNADA_GPIOB_WK_POL INTR_BASE[9] +#define JORNADA_GPIOC_RE_EN INTR_BASE[10] +#define JORNADA_GPIOC_FE_EN INTR_BASE[11] +#define JORNADA_GPIOC_STAT INTR_BASE[12] +#define JORNADA_GPIOC_WK_EN INTR_BASE[13] +#define JORNADA_GPIOC_WK_POL INTR_BASE[14] +/* no inputs on gpio d */ +#define JORNADA_INT_EN2 INTR_BASE[15] +#define JORNADA_INT_STAT2 INTR_BASE[16] +/* Interrupt Source for Group 2 - int_en2 / int_stat2 */ +#define JORNADA_UART_INT 0x0001 +#define JORNADA_UART_RID_INT 0x0002 +#define JORNADA_SM_DETECT_INT 0x0004 +#define JORNADA_SM_REMOVE_INT 0x0008 +#define JORNADA_SM_RFS_INT 0x0010 +#define JORNADA_SM_TFS_INT 0x0020 +#define JORNADA_SM_RID_INT 0x0040 +#define JORNADA_SPI_TX_INT 0x0080 /*SPI_TX FIFO below threshold */ +#define JORNADA_SPI_RX_INT 0x0100 /*SPI_RX FIFO above threshold */ +#define JORNADA_SPI_TUR_INT 0x0200 /*SPI_TX FIFO under-run */ +#define JORNADA_SPI_TOR_INT 0x0400 /*SPI_TX FIFO overrun */ +#define JORNADA_SPI_ROR_INT 0x0800 /*SPI_RX FIFO overrun */ +#define JORNADA_CF_INT 0x1000 /*CF IREQ Interrupt */ +#define JORNADA_CF_INSERT 0x2000 /*CF Card Detect (insertion) */ +#define JORNADA_CF_STSCHG 0x4000 /*CF Status change */ +#define JORNADA_CF_WAIT_ERR 0x8000 /*CF wait time-out */ +#define JORNADA_INT_WK_EN2 INTR_BASE[17] /* wake up enable */ +#define JORNADA_INT_WK_POL2 INTR_BASE[18] /* wake up polarity rising/falling edge -not used */ +#define JORNADA_INT_TEST2 INTR_BASE[19] + +/* CF Control Register Locations */ +#define CF_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x280)) +/* look at SA-1111 */ +#define JORNADA_CFSR CF_BASE[0] /* CF Status Register Bits */ +#define JORNADA_CF_READY 0x0001 +#define JORNADA_CF_VALID 0x0002 +#define JORNADA_CF_VS1 0x0004 +#define JORNADA_CF_VS2 0x0008 +#define JORNADA_CF_WP 0x0010 +#define JORNADA_CF_BVD1 0x0020 +#define JORNADA_CF_BVD2 0x0040 +#define JORNADA_CF_WAIT_TOUT 0x0080 +#define JORNADA_CF_INSERT_LATCH 0x0100 +#define JORNADA_CF_REMOVE_LATCH 0x0200 +#define JORNADA_CFCR CF_BASE[1] /* CF Status Register Bits */ +#define JORNADA_CF_RESET 0x0001 +#define JORNADA_CF_FLT 0x0002 +#define JORNADA_CF_PWAIT_EN 0x0004 +#define JORNADA_CF_SLEEPSTATE 0x0008 +#define JORNADA_CFWDCR CF_BASE[2] /* not used */ + +/* PWM Control Register Locations */ +#define PWM_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x400)) +#define JORNADA_PWM_CTRL PWM_BASE[0] +#define JORNADA_PWM1_DATA PWM_BASE[1] +#define JORNADA_PWM2_DATA PWM_BASE[2] + +/* Microwire Control Register Locations */ +#define MICROWIRE_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x500)) +#define JORNADA_MWCR MICROWIRE_BASE[0] /* Microwire Control register - mwcr */ +#define JORNADA_MW_EN 0x01 /* 1=Enable Microwire Controller */ +#define JORNADA_DSS_16_BIT 0x06 /* Receive data width = 16 bit */ +#define JORNADA_FIFO_RST 0x08 /* 1= Reset the FIFO */ +#define JORNADA_MWCR_V_SCR 8 /*Serial Clock Rate bit offset */ +#define JORNADA_MWDR MICROWIRE_BASE[1] +/* These values are for programming the AD7873 used for touchscreen + * and battery interface. + * See Table I of data sheet for bit values and Table II for bit positions + */ +#define JORNADA_MW_MAIN_BATTERY 0xa6 /* read main battery */ +#define JORNADA_MW_BACKUP_BATTERY 0xe6 /* read backup battery */ +#define JORNADA_MW_TOUCH_X 0x90 /* read touchscreen X location */ +#define JORNADA_MW_TOUCH_Y 0xD0 /* read touchscreen X location */ +#define JORNADA_MW_END JORNADA_MW_TOUCH_Y /* always end reads with this command */ +#define JORNADA_MWFSR MICROWIRE_BASE[2] /* FIFO Status Register -mwfsr */ +#define JORNADA_MW_TNE 0x0001 /*1=TX FIFO not empty */ +#define JORNADA_MW_TOR 0x0002 /*1=TX FIFO overrun: try to write when FIFO is full */ +#define JORNADA_MW_TFL 0x0004 /*1=TX FIFO is full */ +#define JORNADA_MW_RNE 0x0008 /*1=RX FIFO not empty */ +#define JORNADA_MW_BSY 0x0010 /*1=Busy TX or RX */ +#define JORNADA_MW_TFS 0x0020 /*1=TX FIFO is <= TFL threshold request int */ +#define JORNADA_MW_RFS 0x0040 /*1=RX FIFO is => RFL threshold request int */ +#define JORNADA_MW_ROR 0x0080 /*1=RX FIFO overrun: FIFO full request int */ +#define JORNADA_MWFER MICROWIRE_BASE[3] +#define JORNADA_MWFTR MICROWIRE_BASE[4] /* FIFO Control Register mwftr */ +#define JORNADA_MWFTR_V_TFT 0 /*Transmit FIFO threshold bit offset */ +#define JORNADA_MWFTR_V_RFT 5 /*Receive FIFO threshold bit offset */ + + +/* L3 Control Register Locations */ +#define L3_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x600)) + +#define JORNADA_L3CFR L3_BASE[0] +#define JORNADA_L3_EN 0x01 +#define JORNADA_L3_READ_TRG 0x02 +#define JORNADA_L3_ADDR_DONE 0x04 +#define JORNADA_L3_DATA_DONE 0x08 +#define JORNADA_L3_READ_DONE 0x10 +#define JORNADA_L3CAR L3_BASE[1] /* address reg */ +#define JORNADA_L3CDW L3_BASE[2] /* data write */ +#define JORNADA_L3CDR L3_BASE[3] /* data read doesn't work */ + + +/* HP ASIC GPIO Control Register Locations */ +#define JORNADA_E_GPIO_BASE ((volatile long *)(JORNADA56X_ASIC_BASE+0x700)) +#define JORNADA_GPBPSR JORNADA_E_GPIO_BASE[1] +/* B[0-3] is freq setting for audio */ +/* B[6-8] are rows, B[9-13] are columns for button scan input */ +/* The light sensor is a GPIO interrupt connected to the HP ASIC GPIO B14. + * If the GPIO is high, means the lower + * threshold has been crossed and the front light should be turned on. */ +#define JORNADA_GPCPSR JORNADA_E_GPIO_BASE[2] +#define JORNADA_GPBPCR JORNADA_E_GPIO_BASE[4] +#define JORNADA_GPCPCR JORNADA_E_GPIO_BASE[5] +#define JORNADA_GPBPLR JORNADA_E_GPIO_BASE[7] +#define JORNADA_GPCPLR JORNADA_E_GPIO_BASE[8] +#define JORNADA_GPBPDR JORNADA_E_GPIO_BASE[10] +#define JORNADA_GPCPDR JORNADA_E_GPIO_BASE[11] +#define JORNADA_GPBPSDR JORNADA_E_GPIO_BASE[13] +#define JORNADA_GPCPSDR JORNADA_E_GPIO_BASE[14] +#define JORNADA_GPBPSLR JORNADA_E_GPIO_BASE[16] +#define JORNADA_GPCPSLR JORNADA_E_GPIO_BASE[17] +#define JORNADA_GPBPFDR JORNADA_E_GPIO_BASE[19] +#define JORNADA_GPCPFDR JORNADA_E_GPIO_BASE[20] +#define JORNADA_GPBPFLR JORNADA_E_GPIO_BASE[22] +#define JORNADA_GPCPFLR JORNADA_E_GPIO_BASE[23] +#define JORNADA_GPDPSR JORNADA_E_GPIO_BASE[24] +#define JORNADA_RS232_ON GPIO_GPIO1 /* GPIO D */ +#define JORNADA_CF_POWER_OFF GPIO_GPIO7 /* GPIO D (0 -> power on!) */ +#define JORNADA_BACKLIGHT GPIO_GPIO15 /* GPIO D (0 -> light on!) */ +#define JORNADA_GPDPCR JORNADA_E_GPIO_BASE[25] +#define JORNADA_GPDPLR JORNADA_E_GPIO_BASE[26] +#define JORNADA_GPDPDR JORNADA_E_GPIO_BASE[27] +#define JORNADA_GPDPSDR JORNADA_E_GPIO_BASE[28] +#define JORNADA_GPDPSLR JORNADA_E_GPIO_BASE[29] +#define JORNADA_GPDPFDR JORNADA_E_GPIO_BASE[30] +#define JORNADA_GPDPFLR JORNADA_E_GPIO_BASE[31] + +/* IRQs */ +enum irq_mmc { + IRQ_MMC_MAIN = IRQ_BOARD_END, + IRQ_MMC_DETECT, + IRQ_MMC_REMOVE, +}; + +enum irq_l3 { + IRQ_L3_DONE = IRQ_BOARD_END + 3, +}; + +enum irq_microwire { + IRQ_MICROWIRE_TX = IRQ_BOARD_END + 5, + IRQ_MICROWIRE_RX, + IRQ_MICROWIRE_TX_UNDERRUN, + IRQ_MICROWIRE_TX_OVERRUN, + IRQ_MICROWIRE_RX_OVERRUN, +}; + +enum irq_button { + IRQ_BUTTON_POWER = IRQ_GPIO0, + IRQ_BUTTON_LED = IRQ_BOARD_END + 10, + IRQ_BUTTON_DPADUP_DPADLEFT_HOME = IRQ_BOARD_END + 41, + IRQ_BUTTON_DPADDOWN_DPADRIGHT_CONTACTS, + IRQ_BUTTON_DPADCENTRE_CALENDAR, + IRQ_BUTTON_ROCKERUP_TASKS, + IRQ_BUTTON_ROCKERDOWN_RECORD, +}; + +enum irq_pcmcia { + IRQ_PCMCIA_MAIN = IRQ_BOARD_END + 28, + IRQ_PCMCIA_INSERT, + IRQ_PCMCIA_REMOVE = IRQ_BOARD_END + 11, + IRQ_PCMCIA_STATUSCHANGE = IRQ_BOARD_END + 30, + IRQ_PCMCIA_WAIT_ERROR, +}; + +enum irq_gpiob { + IRQ_GPIOB_MAIN = IRQ_BOARD_END + 12, + IRQ_GPIOB_B0 = IRQ_BOARD_END + 32, + IRQ_GPIOB_B15 = IRQ_BOARD_END + 47, +}; + +enum irq_gpioc { + IRQ_GPIOC_MAIN = IRQ_BOARD_END + 13, + IRQ_GPIOC_C0 = IRQ_BOARD_END + 48, + IRQ_GPIOC_C15 = IRQ_BOARD_END + 63, +}; + +enum irq_uart { + IRQ_UART_MAIN = IRQ_BOARD_END + 16, + IRQ_UART_RID, +}; + +enum irq_sm { + IRQ_SM_DETECT = IRQ_BOARD_END + 18, + IRQ_SM_REMOVE, + IRQ_SM_RFS, + IRQ_SM_TFS, + IRQ_SM_RID, +}; + +enum irq_spi { + IRQ_SPI_TX = IRQ_BOARD_END + 23, + IRQ_SM_RX, + IRQ_SM_TX_UNDERRUN, + IRQ_SM_TX_OVERRUN, + IRQ_SM_RX_OVERRUN, +}; + +void jornada56x_asic_setup(void); +void jornada56x_asic_init_irq(void); +irqreturn_t jornada56x_IRQ_demux(int irq, void *dev_id); + +#endif +#endif /* __ASM_ARCH_JORNADA56X_H */ diff --git a/include/asm-arm/arch-sa1100/jornada720.h b/include/asm-arm/arch-sa1100/jornada720.h index 45d2bb59f9d050..c09aad343e6b17 100644 --- a/include/asm-arm/arch-sa1100/jornada720.h +++ b/include/asm-arm/arch-sa1100/jornada720.h @@ -25,3 +25,8 @@ #define PWMOFF 0xDF #define TXDUMMY 0x11 #define ERRORCODE 0x00 + +extern int jornada_ssp_inout(u8 byte); +extern int jornada_ssp_start(void); +extern int jornada_ssp_end(void); +extern int jornada_ssp_byte(u8 byte); diff --git a/include/asm-sh/hd64461.h b/include/asm-sh/hd64461.h index 342ca55a266aab..1fb26f0ab1b501 100644 --- a/include/asm-sh/hd64461.h +++ b/include/asm-sh/hd64461.h @@ -46,10 +46,10 @@ /* CPU Data Bus Control Register */ #define HD64461_SCPUCR (CONFIG_HD64461_IOBASE + 0x04) -/* Base Adress Register */ +/* Base Address Register */ #define HD64461_LCDCBAR (CONFIG_HD64461_IOBASE + 0x1000) -/* Line increment adress */ +/* Line increment address */ #define HD64461_LCDCLOR (CONFIG_HD64461_IOBASE + 0x1002) /* Controls LCD controller */ @@ -80,9 +80,9 @@ #define HD64461_LDR3 (CONFIG_HD64461_IOBASE + 0x101e) /* Palette Registers */ -#define HD64461_CPTWAR (CONFIG_HD64461_IOBASE + 0x1030) /* Color Palette Write Adress Register */ +#define HD64461_CPTWAR (CONFIG_HD64461_IOBASE + 0x1030) /* Color Palette Write Address Register */ #define HD64461_CPTWDR (CONFIG_HD64461_IOBASE + 0x1032) /* Color Palette Write Data Register */ -#define HD64461_CPTRAR (CONFIG_HD64461_IOBASE + 0x1034) /* Color Palette Read Adress Register */ +#define HD64461_CPTRAR (CONFIG_HD64461_IOBASE + 0x1034) /* Color Palette Read Address Register */ #define HD64461_CPTRDR (CONFIG_HD64461_IOBASE + 0x1036) /* Color Palette Read Data Register */ #define HD64461_GRDOR (CONFIG_HD64461_IOBASE + 0x1040) /* Display Resolution Offset Register */ @@ -97,8 +97,8 @@ #define HD64461_GRCFGR_COLORDEPTH8 0x01 /* Sets Colordepth 8 for Accelerator */ /* Line Drawing Registers */ -#define HD64461_LNSARH (CONFIG_HD64461_IOBASE + 0x1046) /* Line Start Adress Register (H) */ -#define HD64461_LNSARL (CONFIG_HD64461_IOBASE + 0x1048) /* Line Start Adress Register (L) */ +#define HD64461_LNSARH (CONFIG_HD64461_IOBASE + 0x1046) /* Line Start Address Register (H) */ +#define HD64461_LNSARL (CONFIG_HD64461_IOBASE + 0x1048) /* Line Start Address Register (L) */ #define HD64461_LNAXLR (CONFIG_HD64461_IOBASE + 0x104a) /* Axis Pixel Length Register */ #define HD64461_LNDGR (CONFIG_HD64461_IOBASE + 0x104c) /* Diagonal Register */ #define HD64461_LNAXR (CONFIG_HD64461_IOBASE + 0x104e) /* Axial Register */ @@ -106,16 +106,16 @@ #define HD64461_LNMDR (CONFIG_HD64461_IOBASE + 0x1052) /* Line Mode Register */ /* BitBLT Registers */ -#define HD64461_BBTSSARH (CONFIG_HD64461_IOBASE + 0x1054) /* Source Start Adress Register (H) */ -#define HD64461_BBTSSARL (CONFIG_HD64461_IOBASE + 0x1056) /* Source Start Adress Register (L) */ -#define HD64461_BBTDSARH (CONFIG_HD64461_IOBASE + 0x1058) /* Destination Start Adress Register (H) */ -#define HD64461_BBTDSARL (CONFIG_HD64461_IOBASE + 0x105a) /* Destination Start Adress Register (L) */ +#define HD64461_BBTSSARH (CONFIG_HD64461_IOBASE + 0x1054) /* Source Start Address Register (H) */ +#define HD64461_BBTSSARL (CONFIG_HD64461_IOBASE + 0x1056) /* Source Start Address Register (L) */ +#define HD64461_BBTDSARH (CONFIG_HD64461_IOBASE + 0x1058) /* Destination Start Address Register (H) */ +#define HD64461_BBTDSARL (CONFIG_HD64461_IOBASE + 0x105a) /* Destination Start Address Register (L) */ #define HD64461_BBTDWR (CONFIG_HD64461_IOBASE + 0x105c) /* Destination Block Width Register */ #define HD64461_BBTDHR (CONFIG_HD64461_IOBASE + 0x105e) /* Destination Block Height Register */ -#define HD64461_BBTPARH (CONFIG_HD64461_IOBASE + 0x1060) /* Pattern Start Adress Register (H) */ -#define HD64461_BBTPARL (CONFIG_HD64461_IOBASE + 0x1062) /* Pattern Start Adress Register (L) */ -#define HD64461_BBTMARH (CONFIG_HD64461_IOBASE + 0x1064) /* Mask Start Adress Register (H) */ -#define HD64461_BBTMARL (CONFIG_HD64461_IOBASE + 0x1066) /* Mask Start Adress Register (L) */ +#define HD64461_BBTPARH (CONFIG_HD64461_IOBASE + 0x1060) /* Pattern Start Address Register (H) */ +#define HD64461_BBTPARL (CONFIG_HD64461_IOBASE + 0x1062) /* Pattern Start Address Register (L) */ +#define HD64461_BBTMARH (CONFIG_HD64461_IOBASE + 0x1064) /* Mask Start Address Register (H) */ +#define HD64461_BBTMARL (CONFIG_HD64461_IOBASE + 0x1066) /* Mask Start Address Register (L) */ #define HD64461_BBTROPR (CONFIG_HD64461_IOBASE + 0x1068) /* ROP Register */ #define HD64461_BBTMDR (CONFIG_HD64461_IOBASE + 0x106a) /* BitBLT Mode Register */ @@ -225,6 +225,29 @@ #define HD64461_NIRR (CONFIG_HD64461_IOBASE + 0x5000) #define HD64461_NIMR (CONFIG_HD64461_IOBASE + 0x5002) +#define HD64461_TMU_TCR0 (CONFIG_HD64461_IOBASE + 0x600a) +#define HD64461_TMU_TIRR (CONFIG_HD64461_IOBASE + 0x600c) +#define HD64461_TMU_TIDR (CONFIG_HD64461_IOBASE + 0x600e) + +/* Timer Control Register */ +#define HD64461_TMU_TCR_EADT 0x10 /* Enable Signal */ +#define HD64461_TMU_TCR_ENABLE 0x08 /* Enable timer output */ +#define HD64461_TMU_TCR_SCL1 0x06 /* 1:1 */ +#define HD64461_TMU_TCR_SCL4 0x04 /* 1:4 */ +#define HD64461_TMU_TCR_SCL8 0x02 /* 1:8 */ +#define HD64461_TMU_TCR_STRT 0x01 /* Start Counting */ +#define HD64461_TMU_TCR_SCL16 0x00 /* 1:16 */ + +/* Timer Control Adresses */ +#define HD64461_TMU_TCVR0 (CONFIG_HD64461_IOBASE + 0x6002) + +/* Timer Interrupt Request Register */ +#define HD64461_TMU_TIRR_TMU1 0x02 +#define HD64461_TMU_TIRR_TMU0 0x01 + +#define HD64461_TMU_TIMR_TMU1 0x02 +#define HD64461_TMU_TIMR_TMU0 0x01 + #define HD64461_IRQBASE OFFCHIP_IRQ_BASE #define OFFCHIP_IRQ_BASE 64 #define HD64461_IRQ_NUM 16 diff --git a/include/asm-sh/hd64465/gpio.h b/include/asm-sh/hd64465/gpio.h deleted file mode 100644 index a3cdca2713ddd0..00000000000000 --- a/include/asm-sh/hd64465/gpio.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _ASM_SH_HD64465_GPIO_ -#define _ASM_SH_HD64465_GPIO_ 1 -/* - * $Id: gpio.h,v 1.3 2003/05/04 19:30:14 lethal Exp $ - * - * Hitachi HD64465 companion chip: General Purpose IO pins support. - * This layer enables other device drivers to configure GPIO - * pins, get and set their values, and register an interrupt - * routine for when input pins change in hardware. - * - * by Greg Banks <gbanks@pocketpenguins.com> - * (c) 2000 PocketPenguins Inc. - */ -#include <asm/hd64465.h> - -/* Macro to construct a portpin number (used in all - * subsequent functions) from a port letter and a pin - * number, e.g. HD64465_GPIO_PORTPIN('A', 5). - */ -#define HD64465_GPIO_PORTPIN(port,pin) (((port)-'A')<<3|(pin)) - -/* Pin configuration constants for _configure() */ -#define HD64465_GPIO_FUNCTION2 0 /* use the pin's *other* function */ -#define HD64465_GPIO_OUT 1 /* output */ -#define HD64465_GPIO_IN_PULLUP 2 /* input, pull-up MOS on */ -#define HD64465_GPIO_IN 3 /* input */ - -/* Configure a pin's direction */ -extern void hd64465_gpio_configure(int portpin, int direction); - -/* Get, set value */ -extern void hd64465_gpio_set_pin(int portpin, unsigned int value); -extern unsigned int hd64465_gpio_get_pin(int portpin); -extern void hd64465_gpio_set_port(int port, unsigned int value); -extern unsigned int hd64465_gpio_get_port(int port); - -/* mode constants for _register_irq() */ -#define HD64465_GPIO_FALLING 0 -#define HD64465_GPIO_RISING 1 - -/* Interrupt on external value change */ -extern void hd64465_gpio_register_irq(int portpin, int mode, - void (*handler)(int portpin, void *dev), void *dev); -extern void hd64465_gpio_unregister_irq(int portpin); - -#endif /* _ASM_SH_HD64465_GPIO_ */ diff --git a/include/asm-sh/hd64465/hd64465.h b/include/asm-sh/hd64465/hd64465.h deleted file mode 100644 index cfd0e803d2a27e..00000000000000 --- a/include/asm-sh/hd64465/hd64465.h +++ /dev/null @@ -1,256 +0,0 @@ -#ifndef _ASM_SH_HD64465_ -#define _ASM_SH_HD64465_ 1 -/* - * $Id: hd64465.h,v 1.3 2003/05/04 19:30:15 lethal Exp $ - * - * Hitachi HD64465 companion chip support - * - * by Greg Banks <gbanks@pocketpenguins.com> - * (c) 2000 PocketPenguins Inc. - * - * Derived from <asm/hd64461.h> which bore the message: - * Copyright (C) 2000 YAEGASHI Takeshi - */ -#include <asm/io.h> -#include <asm/irq.h> - -/* - * Note that registers are defined here as virtual port numbers, - * which have no meaning except to get translated by hd64465_isa_port2addr() - * to an address in the range 0xb0000000-0xb3ffffff. Note that - * this translation happens to consist of adding the lower 16 bits - * of the virtual port number to 0xb0000000. Note also that the manual - * shows addresses as absolute physical addresses starting at 0x10000000, - * so e.g. the NIRR register is listed as 0x15000 here, 0x10005000 in the - * manual, and accessed using address 0xb0005000 - Greg. - */ - -/* System registers */ -#define HD64465_REG_SRR 0x1000c /* System Revision Register */ -#define HD64465_REG_SDID 0x10010 /* System Device ID Reg */ -#define HD64465_SDID 0x8122 /* 64465 device ID */ - -/* Power Management registers */ -#define HD64465_REG_SMSCR 0x10000 /* System Module Standby Control Reg */ -#define HD64465_SMSCR_PS2ST 0x4000 /* PS/2 Standby */ -#define HD64465_SMSCR_ADCST 0x1000 /* ADC Standby */ -#define HD64465_SMSCR_UARTST 0x0800 /* UART Standby */ -#define HD64465_SMSCR_SCDIST 0x0200 /* Serial Codec Standby */ -#define HD64465_SMSCR_PPST 0x0100 /* Parallel Port Standby */ -#define HD64465_SMSCR_PC0ST 0x0040 /* PCMCIA0 Standby */ -#define HD64465_SMSCR_PC1ST 0x0020 /* PCMCIA1 Standby */ -#define HD64465_SMSCR_AFEST 0x0010 /* AFE Standby */ -#define HD64465_SMSCR_TM0ST 0x0008 /* Timer0 Standby */ -#define HD64465_SMSCR_TM1ST 0x0004 /* Timer1 Standby */ -#define HD64465_SMSCR_IRDAST 0x0002 /* IRDA Standby */ -#define HD64465_SMSCR_KBCST 0x0001 /* Keyboard Controller Standby */ - -/* Interrupt Controller registers */ -#define HD64465_REG_NIRR 0x15000 /* Interrupt Request Register */ -#define HD64465_REG_NIMR 0x15002 /* Interrupt Mask Register */ -#define HD64465_REG_NITR 0x15004 /* Interrupt Trigger Mode Register */ - -/* Timer registers */ -#define HD64465_REG_TCVR1 0x16000 /* Timer 1 constant value register */ -#define HD64465_REG_TCVR0 0x16002 /* Timer 0 constant value register */ -#define HD64465_REG_TRVR1 0x16004 /* Timer 1 read value register */ -#define HD64465_REG_TRVR0 0x16006 /* Timer 0 read value register */ -#define HD64465_REG_TCR1 0x16008 /* Timer 1 control register */ -#define HD64465_REG_TCR0 0x1600A /* Timer 0 control register */ -#define HD64465_TCR_EADT 0x10 /* Enable ADTRIG# signal */ -#define HD64465_TCR_ETMO 0x08 /* Enable TMO signal */ -#define HD64465_TCR_PST_MASK 0x06 /* Clock Prescale */ -#define HD64465_TCR_PST_1 0x06 /* 1:1 */ -#define HD64465_TCR_PST_4 0x04 /* 1:4 */ -#define HD64465_TCR_PST_8 0x02 /* 1:8 */ -#define HD64465_TCR_PST_16 0x00 /* 1:16 */ -#define HD64465_TCR_TSTP 0x01 /* Start/Stop timer */ -#define HD64465_REG_TIRR 0x1600C /* Timer interrupt request register */ -#define HD64465_REG_TIDR 0x1600E /* Timer interrupt disable register */ -#define HD64465_REG_PWM1CS 0x16010 /* PWM 1 clock scale register */ -#define HD64465_REG_PWM1LPC 0x16012 /* PWM 1 low pulse width counter register */ -#define HD64465_REG_PWM1HPC 0x16014 /* PWM 1 high pulse width counter register */ -#define HD64465_REG_PWM0CS 0x16018 /* PWM 0 clock scale register */ -#define HD64465_REG_PWM0LPC 0x1601A /* PWM 0 low pulse width counter register */ -#define HD64465_REG_PWM0HPC 0x1601C /* PWM 0 high pulse width counter register */ - -/* Analog/Digital Converter registers */ -#define HD64465_REG_ADDRA 0x1E000 /* A/D data register A */ -#define HD64465_REG_ADDRB 0x1E002 /* A/D data register B */ -#define HD64465_REG_ADDRC 0x1E004 /* A/D data register C */ -#define HD64465_REG_ADDRD 0x1E006 /* A/D data register D */ -#define HD64465_REG_ADCSR 0x1E008 /* A/D control/status register */ -#define HD64465_ADCSR_ADF 0x80 /* A/D End Flag */ -#define HD64465_ADCSR_ADST 0x40 /* A/D Start Flag */ -#define HD64465_ADCSR_ADIS 0x20 /* A/D Interrupt Status */ -#define HD64465_ADCSR_TRGE 0x10 /* A/D Trigger Enable */ -#define HD64465_ADCSR_ADIE 0x08 /* A/D Interrupt Enable */ -#define HD64465_ADCSR_SCAN 0x04 /* A/D Scan Mode */ -#define HD64465_ADCSR_CH_MASK 0x03 /* A/D Channel */ -#define HD64465_REG_ADCALCR 0x1E00A /* A/D calibration sample control */ -#define HD64465_REG_ADCAL 0x1E00C /* A/D calibration data register */ - - -/* General Purpose I/O ports registers */ -#define HD64465_REG_GPACR 0x14000 /* Port A Control Register */ -#define HD64465_REG_GPBCR 0x14002 /* Port B Control Register */ -#define HD64465_REG_GPCCR 0x14004 /* Port C Control Register */ -#define HD64465_REG_GPDCR 0x14006 /* Port D Control Register */ -#define HD64465_REG_GPECR 0x14008 /* Port E Control Register */ -#define HD64465_REG_GPADR 0x14010 /* Port A Data Register */ -#define HD64465_REG_GPBDR 0x14012 /* Port B Data Register */ -#define HD64465_REG_GPCDR 0x14014 /* Port C Data Register */ -#define HD64465_REG_GPDDR 0x14016 /* Port D Data Register */ -#define HD64465_REG_GPEDR 0x14018 /* Port E Data Register */ -#define HD64465_REG_GPAICR 0x14020 /* Port A Interrupt Control Register */ -#define HD64465_REG_GPBICR 0x14022 /* Port B Interrupt Control Register */ -#define HD64465_REG_GPCICR 0x14024 /* Port C Interrupt Control Register */ -#define HD64465_REG_GPDICR 0x14026 /* Port D Interrupt Control Register */ -#define HD64465_REG_GPEICR 0x14028 /* Port E Interrupt Control Register */ -#define HD64465_REG_GPAISR 0x14040 /* Port A Interrupt Status Register */ -#define HD64465_REG_GPBISR 0x14042 /* Port B Interrupt Status Register */ -#define HD64465_REG_GPCISR 0x14044 /* Port C Interrupt Status Register */ -#define HD64465_REG_GPDISR 0x14046 /* Port D Interrupt Status Register */ -#define HD64465_REG_GPEISR 0x14048 /* Port E Interrupt Status Register */ - -/* PCMCIA bridge interface */ -#define HD64465_REG_PCC0ISR 0x12000 /* socket 0 interface status */ -#define HD64465_PCCISR_PREADY 0x80 /* mem card ready / io card IREQ */ -#define HD64465_PCCISR_PIREQ 0x80 -#define HD64465_PCCISR_PMWP 0x40 /* mem card write-protected */ -#define HD64465_PCCISR_PVS2 0x20 /* voltage select pin 2 */ -#define HD64465_PCCISR_PVS1 0x10 /* voltage select pin 1 */ -#define HD64465_PCCISR_PCD_MASK 0x0c /* card detect */ -#define HD64465_PCCISR_PBVD_MASK 0x03 /* battery voltage */ -#define HD64465_PCCISR_PBVD_BATGOOD 0x03 /* battery good */ -#define HD64465_PCCISR_PBVD_BATWARN 0x01 /* battery low warning */ -#define HD64465_PCCISR_PBVD_BATDEAD1 0x02 /* battery dead */ -#define HD64465_PCCISR_PBVD_BATDEAD2 0x00 /* battery dead */ -#define HD64465_REG_PCC0GCR 0x12002 /* socket 0 general control */ -#define HD64465_PCCGCR_PDRV 0x80 /* output drive */ -#define HD64465_PCCGCR_PCCR 0x40 /* PC card reset */ -#define HD64465_PCCGCR_PCCT 0x20 /* PC card type, 1=IO&mem, 0=mem */ -#define HD64465_PCCGCR_PVCC0 0x10 /* voltage control pin VCC0SEL0 */ -#define HD64465_PCCGCR_PMMOD 0x08 /* memory mode */ -#define HD64465_PCCGCR_PPA25 0x04 /* pin A25 */ -#define HD64465_PCCGCR_PPA24 0x02 /* pin A24 */ -#define HD64465_PCCGCR_PREG 0x01 /* ping PCC0REG# */ -#define HD64465_REG_PCC0CSCR 0x12004 /* socket 0 card status change */ -#define HD64465_PCCCSCR_PSCDI 0x80 /* sw card detect intr */ -#define HD64465_PCCCSCR_PSWSEL 0x40 /* power select */ -#define HD64465_PCCCSCR_PIREQ 0x20 /* IREQ intr req */ -#define HD64465_PCCCSCR_PSC 0x10 /* STSCHG (status change) pin */ -#define HD64465_PCCCSCR_PCDC 0x08 /* CD (card detect) change */ -#define HD64465_PCCCSCR_PRC 0x04 /* ready change */ -#define HD64465_PCCCSCR_PBW 0x02 /* battery warning change */ -#define HD64465_PCCCSCR_PBD 0x01 /* battery dead change */ -#define HD64465_REG_PCC0CSCIER 0x12006 /* socket 0 card status change interrupt enable */ -#define HD64465_PCCCSCIER_PCRE 0x80 /* change reset enable */ -#define HD64465_PCCCSCIER_PIREQE_MASK 0x60 /* IREQ enable */ -#define HD64465_PCCCSCIER_PIREQE_DISABLED 0x00 /* IREQ disabled */ -#define HD64465_PCCCSCIER_PIREQE_LEVEL 0x20 /* IREQ level-triggered */ -#define HD64465_PCCCSCIER_PIREQE_FALLING 0x40 /* IREQ falling-edge-trig */ -#define HD64465_PCCCSCIER_PIREQE_RISING 0x60 /* IREQ rising-edge-trig */ -#define HD64465_PCCCSCIER_PSCE 0x10 /* status change enable */ -#define HD64465_PCCCSCIER_PCDE 0x08 /* card detect change enable */ -#define HD64465_PCCCSCIER_PRE 0x04 /* ready change enable */ -#define HD64465_PCCCSCIER_PBWE 0x02 /* battery warn change enable */ -#define HD64465_PCCCSCIER_PBDE 0x01 /* battery dead change enable*/ -#define HD64465_REG_PCC0SCR 0x12008 /* socket 0 software control */ -#define HD64465_PCCSCR_SHDN 0x10 /* TPS2206 SHutDowN pin */ -#define HD64465_PCCSCR_SWP 0x01 /* write protect */ -#define HD64465_REG_PCCPSR 0x1200A /* serial power switch control */ -#define HD64465_REG_PCC1ISR 0x12010 /* socket 1 interface status */ -#define HD64465_REG_PCC1GCR 0x12012 /* socket 1 general control */ -#define HD64465_REG_PCC1CSCR 0x12014 /* socket 1 card status change */ -#define HD64465_REG_PCC1CSCIER 0x12016 /* socket 1 card status change interrupt enable */ -#define HD64465_REG_PCC1SCR 0x12018 /* socket 1 software control */ - - -/* PS/2 Keyboard and mouse controller -- *not* register compatible */ -#define HD64465_REG_KBCSR 0x1dc00 /* Keyboard Control/Status reg */ -#define HD64465_KBCSR_KBCIE 0x8000 /* KBCK Input Enable */ -#define HD64465_KBCSR_KBCOE 0x4000 /* KBCK Output Enable */ -#define HD64465_KBCSR_KBDOE 0x2000 /* KB DATA Output Enable */ -#define HD64465_KBCSR_KBCD 0x1000 /* KBCK Driven */ -#define HD64465_KBCSR_KBDD 0x0800 /* KB DATA Driven */ -#define HD64465_KBCSR_KBCS 0x0400 /* KBCK pin Status */ -#define HD64465_KBCSR_KBDS 0x0200 /* KB DATA pin Status */ -#define HD64465_KBCSR_KBDP 0x0100 /* KB DATA Parity bit */ -#define HD64465_KBCSR_KBD_MASK 0x00ff /* KD DATA shift reg */ -#define HD64465_REG_KBISR 0x1dc04 /* Keyboard Interrupt Status reg */ -#define HD64465_KBISR_KBRDF 0x0001 /* KB Received Data Full */ -#define HD64465_REG_MSCSR 0x1dc10 /* Mouse Control/Status reg */ -#define HD64465_REG_MSISR 0x1dc14 /* Mouse Interrupt Status reg */ - - -/* - * Logical address at which the HD64465 is mapped. Note that this - * should always be in the P2 segment (uncached and untranslated). - */ -#ifndef CONFIG_HD64465_IOBASE -#define CONFIG_HD64465_IOBASE 0xb0000000 -#endif -/* - * The HD64465 multiplexes all its modules' interrupts onto - * this single interrupt. - */ -#ifndef CONFIG_HD64465_IRQ -#define CONFIG_HD64465_IRQ 5 -#endif - - -#define _HD64465_IO_MASK 0xf8000000 -#define is_hd64465_addr(addr) \ - ((addr & _HD64465_IO_MASK) == (CONFIG_HD64465_IOBASE & _HD64465_IO_MASK)) - -/* - * A range of 16 virtual interrupts generated by - * demuxing the HD64465 muxed interrupt. - */ -#define HD64465_IRQ_BASE OFFCHIP_IRQ_BASE -#define HD64465_IRQ_NUM 16 -#define HD64465_IRQ_ADC (HD64465_IRQ_BASE+0) -#define HD64465_IRQ_USB (HD64465_IRQ_BASE+1) -#define HD64465_IRQ_SCDI (HD64465_IRQ_BASE+2) -#define HD64465_IRQ_PARALLEL (HD64465_IRQ_BASE+3) -/* bit 4 is reserved */ -#define HD64465_IRQ_UART (HD64465_IRQ_BASE+5) -#define HD64465_IRQ_IRDA (HD64465_IRQ_BASE+6) -#define HD64465_IRQ_PS2MOUSE (HD64465_IRQ_BASE+7) -#define HD64465_IRQ_KBC (HD64465_IRQ_BASE+8) -#define HD64465_IRQ_TIMER1 (HD64465_IRQ_BASE+9) -#define HD64465_IRQ_TIMER0 (HD64465_IRQ_BASE+10) -#define HD64465_IRQ_GPIO (HD64465_IRQ_BASE+11) -#define HD64465_IRQ_AFE (HD64465_IRQ_BASE+12) -#define HD64465_IRQ_PCMCIA1 (HD64465_IRQ_BASE+13) -#define HD64465_IRQ_PCMCIA0 (HD64465_IRQ_BASE+14) -#define HD64465_IRQ_PS2KBD (HD64465_IRQ_BASE+15) - -/* Constants for PCMCIA mappings */ -#define HD64465_PCC_WINDOW 0x01000000 - -#define HD64465_PCC0_BASE 0xb8000000 /* area 6 */ -#define HD64465_PCC0_ATTR (HD64465_PCC0_BASE) -#define HD64465_PCC0_COMM (HD64465_PCC0_BASE+HD64465_PCC_WINDOW) -#define HD64465_PCC0_IO (HD64465_PCC0_BASE+2*HD64465_PCC_WINDOW) - -#define HD64465_PCC1_BASE 0xb4000000 /* area 5 */ -#define HD64465_PCC1_ATTR (HD64465_PCC1_BASE) -#define HD64465_PCC1_COMM (HD64465_PCC1_BASE+HD64465_PCC_WINDOW) -#define HD64465_PCC1_IO (HD64465_PCC1_BASE+2*HD64465_PCC_WINDOW) - -/* - * Base of USB controller interface (as memory) - */ -#define HD64465_USB_BASE (CONFIG_HD64465_IOBASE+0xb000) -#define HD64465_USB_LEN 0x1000 -/* - * Base of embedded SRAM, used for USB controller. - */ -#define HD64465_SRAM_BASE (CONFIG_HD64465_IOBASE+0x9000) -#define HD64465_SRAM_LEN 0x1000 - - - -#endif /* _ASM_SH_HD64465_ */ diff --git a/include/asm-sh/hd64465/io.h b/include/asm-sh/hd64465/io.h deleted file mode 100644 index 139f1472e5bbfe..00000000000000 --- a/include/asm-sh/hd64465/io.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * include/asm-sh/hd64465/io.h - * - * By Greg Banks <gbanks@pocketpenguins.com> - * (c) 2000 PocketPenguins Inc. - * - * Derived from io_hd64461.h, which bore the message: - * Copyright 2000 Stuart Menefy (stuart.menefy@st.com) - * - * May be copied or modified under the terms of the GNU General Public - * License. See linux/COPYING for more information. - * - * IO functions for an HD64465 "Windows CE Intelligent Peripheral Controller". - */ - -#ifndef _ASM_SH_IO_HD64465_H -#define _ASM_SH_IO_HD64465_H - -extern unsigned char hd64465_inb(unsigned long port); -extern unsigned short hd64465_inw(unsigned long port); -extern unsigned int hd64465_inl(unsigned long port); - -extern void hd64465_outb(unsigned char value, unsigned long port); -extern void hd64465_outw(unsigned short value, unsigned long port); -extern void hd64465_outl(unsigned int value, unsigned long port); - -extern unsigned char hd64465_inb_p(unsigned long port); -extern void hd64465_outb_p(unsigned char value, unsigned long port); - -extern unsigned long hd64465_isa_port2addr(unsigned long offset); -extern int hd64465_irq_demux(int irq); -/* Provision for generic secondary demux step -- used by PCMCIA code */ -extern void hd64465_register_irq_demux(int irq, - int (*demux)(int irq, void *dev), void *dev); -extern void hd64465_unregister_irq_demux(int irq); -/* Set this variable to 1 to see port traffic */ -extern int hd64465_io_debug; -/* Map a range of ports to a range of kernel virtual memory. - */ -extern void hd64465_port_map(unsigned short baseport, unsigned int nports, - unsigned long addr, unsigned char shift); -extern void hd64465_port_unmap(unsigned short baseport, unsigned int nports); - -#endif /* _ASM_SH_IO_HD64465_H */ diff --git a/include/asm-sh/hp6xx.h b/include/asm-sh/hp6xx.h index 53ca5643d9c7ef..08eb50d0c39f62 100644 --- a/include/asm-sh/hp6xx.h +++ b/include/asm-sh/hp6xx.h @@ -2,6 +2,7 @@ #define __ASM_SH_HP6XX_H /* + * Copyright (C) 2008 Kristoffer Ericson * Copyright (C) 2003, 2004, 2005 Andriy Skulysh * * This file is subject to the terms and conditions of the GNU General Public @@ -10,13 +11,14 @@ * */ -#define HP680_BTN_IRQ 32 /* IRQ0_IRQ */ -#define HP680_TS_IRQ 35 /* IRQ3_IRQ */ -#define HP680_HD64461_IRQ 36 /* IRQ4_IRQ */ +#define HP680_BTN_IRQ 32 /* IRQ0 - power button */ +#define HP680_TS_IRQ 35 /* IRQ3 - touchscreen */ +#define HP680_HD64461_IRQ 36 /* IRQ4 - hd64461 */ #define DAC_LCD_BRIGHTNESS 0 #define DAC_SPEAKER_VOLUME 1 +#define PGDR 0xa400012c #define PGDR_OPENED 0x01 #define PGDR_MAIN_BATTERY_OUT 0x04 #define PGDR_PLAY_BUTTON 0x08 @@ -29,6 +31,9 @@ #define PKDR_LED_GREEN 0x10 +/* HP Palmtop 620lx/660lx speaker on/off */ +#define PKDR_SPEAKER 0x20 + #define SCPDR_TS_SCAN_ENABLE 0x20 #define SCPDR_TS_SCAN_Y 0x02 #define SCPDR_TS_SCAN_X 0x01 @@ -42,6 +47,7 @@ #define ADC_CHANNEL_BACKUP 4 #define ADC_CHANNEL_CHARGE 5 +/* HP Jornada 680/690 speaker on/off */ #define HD64461_GPADR_SPEAKER 0x01 #define HD64461_GPADR_PCMCIA0 (0x02|0x08) @@ -55,26 +61,4 @@ #define PJDR 0xa4000130 #define PKDR 0xa4000132 -static inline void hp6xx_led_red(int on) -{ - u16 v16; - v16 = ctrl_inw(CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); - if (on) - ctrl_outw(v16 & (~HD64461_GPBDR_LED_RED), CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); - else - ctrl_outw(v16 | HD64461_GPBDR_LED_RED, CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); -} - -static inline void hp6xx_led_green(int on) -{ - u8 v8; - - v8 = ctrl_inb(PKDR); - if (on) - ctrl_outb(v8 & (~PKDR_LED_GREEN), PKDR); - else - ctrl_outb(v8 | PKDR_LED_GREEN, PKDR); -} - - #endif /* __ASM_SH_HP6XX_H */ diff --git a/include/video/s1d13xxxfb.h b/include/video/s1d13xxxfb.h index c99d261df8f72a..fe41b840794600 100644 --- a/include/video/s1d13xxxfb.h +++ b/include/video/s1d13xxxfb.h @@ -14,7 +14,8 @@ #define S1D13XXXFB_H #define S1D_PALETTE_SIZE 256 -#define S1D_CHIP_REV 7 /* expected chip revision number for s1d13806 */ +#define S1D13506_CHIP_REV 4 /* expected chip revision number for s1d13506 */ +#define S1D13806_CHIP_REV 7 /* expected chip revision number for s1d13806 */ #define S1D_FBID "S1D13806" #define S1D_DEVICENAME "s1d13806fb" diff --git a/kernel/printk.c b/kernel/printk.c index 89011bf8c10661..5a806a0fd0cd29 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -628,11 +628,13 @@ asmlinkage int printk(const char *fmt, ...) /* cpu currently holding logbuf_lock */ static volatile unsigned int printk_cpu = UINT_MAX; +extern void printascii(const char *); + asmlinkage int vprintk(const char *fmt, va_list args) { unsigned long flags; int printed_len; - char *p; + char *p,*s; static char printk_buf[1024]; static int log_level_unknown = 1; @@ -653,6 +655,9 @@ asmlinkage int vprintk(const char *fmt, va_list args) /* Emit the output into the temporary buffer */ printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); +#ifdef CONFIG_SA1100_JORNADA720 + printascii(printk_buf); +#endif /* * Copy the output into log_buf. If the caller didn't provide * appropriate log level tags, we insert them here diff --git a/sound/sh/Kconfig b/sound/sh/Kconfig index b7e08ef22a940e..e41fcce27013d2 100644 --- a/sound/sh/Kconfig +++ b/sound/sh/Kconfig @@ -10,5 +10,13 @@ config SND_AICA help ALSA Sound driver for the SEGA Dreamcast console. +config SND_SH_DAC_AUDIO + tristate "SuperH DAC audio support" + depends on SND + depends on CPU_SH3 + select SND_PCM + help + Alsa Sound driver for the HP Jornada 620/660/680/690. + endmenu diff --git a/sound/sh/Makefile b/sound/sh/Makefile index 8fdcb6e26f0067..c4b81c40b17d1f 100644 --- a/sound/sh/Makefile +++ b/sound/sh/Makefile @@ -6,3 +6,4 @@ snd-aica-objs := aica.o # Toplevel Module Dependency obj-$(CONFIG_SND_AICA) += snd-aica.o +obj-$(CONFIG_SND_SH_DAC_AUDIO) += snd_sh_dac_audio.o diff --git a/sound/sh/snd_sh_dac_audio.c b/sound/sh/snd_sh_dac_audio.c new file mode 100644 index 00000000000000..85e748888f0ead --- /dev/null +++ b/sound/sh/snd_sh_dac_audio.c @@ -0,0 +1,566 @@ +/* + * snd_sh_dac_audio.c - SuperH DAC audio driver for ALSA + * + * Copyright (c) 2007 by Rafael Ignacio Zurita <rizurita@yahoo.com> + * + * + * Based completely on sh_dac_audio.c (Copyright (C) 2004,2005 by Andriy + * Skulysh) and "Writing an ALSA driver" (Copyright (c) 2002-2005 by Takashi + * Iwai <tiwai@suse.de>). + * + * 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/interrupt.h> +#include <linux/platform_device.h> +#include <sound/driver.h> +#include <sound/core.h> +#include <sound/pcm.h> +#include <sound/initval.h> +#include <asm/io.h> +#include <asm/clock.h> +#include <asm/cpu/dac.h> +#include <asm/hp6xx.h> +#include <asm/hd64461.h> + +MODULE_AUTHOR("Rafael Ignacio Zurita <rizurita@yahoo.com>"); +MODULE_DESCRIPTION("SuperH DAC audio driver"); +MODULE_LICENSE("GPL"); +MODULE_SUPPORTED_DEVICE("{{SuperH DAC audio support}}"); + +/* Module Parameters */ +static int index = SNDRV_DEFAULT_IDX1; +static char *id = SNDRV_DEFAULT_STR1; +module_param(index, int, 0444); +MODULE_PARM_DESC(index, "Index value for SuperH DAC audio."); +module_param(id, charp, 0444); +MODULE_PARM_DESC(id, "ID string for SuperH DAC audio."); + +/* Simple platform device */ +static struct platform_device *pd; + +#define SND_SH_DAC_DRIVER "SH_DAC" +#define BUFFER_SIZE 64000 +#define SH_DAC_AUDIO_CHANNEL 1 + +/* main struct */ +struct snd_sh_dac { + struct snd_card *card; + struct snd_pcm_substream *substream; + int irq; + + int rate; + int empty; + char *data_buffer, *buffer_begin, *buffer_end; + int processed; /* bytes proccesed, to compare with period_size */ + int buffer_size; +}; + + +/* + * Hardware functions (timer, DAC, speaker) + * Note: The driver uses a hd64461 timer + */ + +static void dac_audio_start_timer(void) +{ + u16 tmu_tcr; + + /* Start HD64461 timer 0 countdown */ + tmu_tcr = inb(HD64461_TMU_TCR0); + tmu_tcr |= HD64461_TMU_TCR_STRT; + outb(tmu_tcr, HD64461_TMU_TCR0); +} + +static void dac_audio_stop_timer(void) +{ + u16 tmu_tcr; + + /* Stop HD64461 timer 0 countdown */ + tmu_tcr = inb(HD64461_TMU_TCR0); + tmu_tcr &= ~HD64461_TMU_TCR_STRT; + outb(tmu_tcr, HD64461_TMU_TCR0); +} + +static void dac_audio_reset(struct snd_sh_dac *chip) +{ + dac_audio_stop_timer(); + + chip->buffer_begin = chip->buffer_end = chip->data_buffer; + chip->processed = 0; + chip->empty = 1; +} + +static void dac_audio_sync(struct snd_sh_dac *chip) +{ + while (!chip->empty) + schedule(); +} + +static void dac_audio_start(void) +{ + u16 v; + u8 v8; + + if (mach_is_hp6xx()) { + /* HP Jornada 680/690 speaker on */ + v = inw(HD64461_GPADR); + v &= ~HD64461_GPADR_SPEAKER; + outw(v, HD64461_GPADR); + + /* HP Palmtop 620lx/660lx speaker on */ + v8 = inb(PKDR); + v8 &= ~PKDR_SPEAKER; + outb(v8, PKDR); + } + + sh_dac_enable(SH_DAC_AUDIO_CHANNEL); +} + +static void dac_audio_stop(void) +{ + u16 v; + u8 v8; + + dac_audio_stop_timer(); + + if (mach_is_hp6xx()) { + /* HP Jornada 680/690 speaker off */ + v = inw(HD64461_GPADR); + v |= HD64461_GPADR_SPEAKER; + outw(v, HD64461_GPADR); + + /* HP Palmtop 620lx/660lx speaker off */ + v8 = inb(PKDR); + v8 |= PKDR_SPEAKER; + outb(v8, PKDR); + } + + sh_dac_output(0, SH_DAC_AUDIO_CHANNEL); + sh_dac_disable(SH_DAC_AUDIO_CHANNEL); +} + +static void dac_audio_set_rate(int rate) +{ + unsigned long interval; + struct clk *clk; + + /* + * Constant is autoloaded once zero is reached + * We need 8K interrupts per second + */ + clk = clk_get(NULL, "module_clk"); + interval = (clk_get_rate(clk) / 16) / rate; + ctrl_outl(interval, HD64461_TMU_TCVR0); +} + +/* end of the hardware functions */ + + +/* PCM INTERFACE */ + +static struct snd_pcm_hardware snd_sh_dac_pcm_hw = { + .info = (SNDRV_PCM_INFO_MMAP | + SNDRV_PCM_INFO_MMAP_VALID | + SNDRV_PCM_INFO_INTERLEAVED | + SNDRV_PCM_INFO_HALF_DUPLEX), + .formats = SNDRV_PCM_FMTBIT_U8, + .rates = SNDRV_PCM_RATE_8000, + .rate_min = 8000, + .rate_max = 8000, + .channels_min = 1, + .channels_max = 1, + .buffer_bytes_max = (48*1024), + .period_bytes_min = 1, + .period_bytes_max = (48*1024), + .periods_min = 1, + .periods_max = 1024, +}; + +static int snd_sh_dac_pcm_open(struct snd_pcm_substream *substream) +{ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = substream->runtime; + + runtime->hw = snd_sh_dac_pcm_hw; + + chip->substream = substream; + chip->buffer_begin = chip->buffer_end = chip->data_buffer; + chip->processed = 0; + chip->empty = 1; + + dac_audio_start(); + + return 0; +} + +static int snd_sh_dac_pcm_close(struct snd_pcm_substream *substream) +{ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + + dac_audio_sync(chip); + dac_audio_stop(); + + return 0; +} + +static int snd_sh_dac_pcm_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *hw_params) +{ + return + snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); +} + +static int snd_sh_dac_pcm_hw_free(struct snd_pcm_substream *substream) +{ + /* Free the buffer */ + return snd_pcm_lib_free_pages(substream); +} + +static int snd_sh_dac_pcm_prepare(struct snd_pcm_substream *substream) +{ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = chip->substream->runtime; + chip->buffer_size = runtime->buffer_size; + memset(chip->data_buffer, 0, BUFFER_SIZE); + return 0; +} + +static int snd_sh_dac_pcm_trigger(struct snd_pcm_substream *substream, int cmd) +{ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + dac_audio_start_timer(); + break; + case SNDRV_PCM_TRIGGER_STOP: + chip->buffer_begin = chip->buffer_end = chip->data_buffer; + chip->processed = 0; + chip->empty = 1; + dac_audio_stop_timer(); + break; + default: + return -EINVAL; + } + return 0; +} + +static int snd_sh_dac_pcm_copy(struct snd_pcm_substream *substream, int channel, + snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count) +{ + /* channel is not used (interleaved data) */ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = substream->runtime; + ssize_t b_count = frames_to_bytes(runtime , count); + ssize_t b_pos = frames_to_bytes(runtime , pos); + + if (count < 0) + return -EINVAL; + + if (!count) { + dac_audio_sync(chip); + return 0; + } + + memcpy_toio(chip->data_buffer + b_pos, src, b_count); + chip->buffer_end = chip->data_buffer + b_pos + b_count; + + if (chip->empty) { + chip->empty = 0; + dac_audio_start_timer(); + } + + return 0; +} + +static int snd_sh_dac_pcm_silence(struct snd_pcm_substream *substream, + int channel, snd_pcm_uframes_t pos, + snd_pcm_uframes_t count) +{ + /* channel is not used (interleaved data) */ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + struct snd_pcm_runtime *runtime = substream->runtime; + ssize_t b_count = frames_to_bytes(runtime , count); + ssize_t b_pos = frames_to_bytes(runtime , pos); + + if (count < 0) + return -EINVAL; + + if (!count) { + dac_audio_sync(chip); + return 0; + } + + memset_io(chip->data_buffer + b_pos, 0, b_count); + chip->buffer_end = chip->data_buffer + b_pos + b_count; + + if (chip->empty) { + chip->empty = 0; + dac_audio_start_timer(); + } + return 0; +} + +static snd_pcm_uframes_t snd_sh_dac_pcm_pointer(struct snd_pcm_substream *substream) +{ + struct snd_sh_dac *chip = snd_pcm_substream_chip(substream); + int pointer = chip->buffer_begin - chip->data_buffer; + + return pointer; +} + +/* pcm ops */ +static struct snd_pcm_ops snd_sh_dac_pcm_ops = { + .open = snd_sh_dac_pcm_open, + .close = snd_sh_dac_pcm_close, + .ioctl = snd_pcm_lib_ioctl, + .hw_params = snd_sh_dac_pcm_hw_params, + .hw_free = snd_sh_dac_pcm_hw_free, + .prepare = snd_sh_dac_pcm_prepare, + .trigger = snd_sh_dac_pcm_trigger, + .pointer = snd_sh_dac_pcm_pointer, + .copy = snd_sh_dac_pcm_copy, + .silence = snd_sh_dac_pcm_silence, + .mmap = snd_pcm_lib_mmap_iomem, +}; + +static int __devinit snd_sh_dac_pcm(struct snd_sh_dac *chip, int device) +{ + int err; + struct snd_pcm *pcm; + /* device should be always 0 for us */ + err = snd_pcm_new(chip->card, "SH_DAC PCM", device, 1, 0, &pcm); + if (err < 0) + return err; + pcm->private_data = chip; + strcpy(pcm->name, "SH_DAC PCM"); + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_sh_dac_pcm_ops); + + /* buffer size=48K */ + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS, + snd_dma_continuous_data(GFP_KERNEL), + 48 * 1024, + 48 * 1024); + return 0; +} +/* END OF PCM INTERFACE */ + + +/* driver .remove -- destructor */ +static int snd_sh_dac_remove(struct platform_device *devptr) +{ + snd_card_free(platform_get_drvdata(devptr)); + platform_set_drvdata(devptr, NULL); + return 0; +} + +/* free -- it has been defined by create */ +static int snd_sh_dac_free(struct snd_sh_dac *chip) +{ + /* release the irq */ + free_irq(chip->irq, (void *)chip); + + /* release the data */ + kfree(chip->data_buffer); + kfree(chip); + + return 0; +} + +static int snd_sh_dac_dev_free(struct snd_device *device) +{ + struct snd_sh_dac *chip = device->device_data; + return snd_sh_dac_free(chip); +} + +static irqreturn_t snd_sh_dac_interrupt(int irq, void *pdev) +{ + u16 timer_status; + struct snd_sh_dac *chip = (struct snd_sh_dac *) pdev; + struct snd_pcm_runtime *runtime = chip->substream->runtime; + ssize_t b_ps = frames_to_bytes(runtime, runtime->period_size); + + /* HD64461_TMU0 mask interrupt */ + timer_status = inw(HD64461_TMU_TIRR); + timer_status &= ~HD64461_TMU_TIRR_TMU0; + outw(timer_status, HD64461_TMU_TIRR); + + if (!chip->empty) { + sh_dac_output(*chip->buffer_begin, SH_DAC_AUDIO_CHANNEL); + chip->buffer_begin++; + chip->processed++; + + if (chip->processed >= b_ps) { + chip->processed -= b_ps; + snd_pcm_period_elapsed(chip->substream); + } + + if (chip->buffer_begin == (chip->data_buffer + + chip->buffer_size - 1)) + chip->buffer_begin = chip->data_buffer; + + if (chip->buffer_begin == chip->buffer_end) { + chip->empty = 1; + dac_audio_stop_timer(); + } + + } + return IRQ_HANDLED; +} + +/* create -- chip-specific constructor for the cards components */ +static int __devinit snd_sh_dac_create(struct snd_card *card, + struct platform_device *devptr, + struct snd_sh_dac **rchip) +{ + struct snd_sh_dac *chip; + int err; + u16 timer_status; + u16 hd64461_stbcr; + + static struct snd_device_ops ops = { + .dev_free = snd_sh_dac_dev_free, + }; + + *rchip = NULL; + + chip = kzalloc(sizeof(*chip), GFP_KERNEL); + if (chip == NULL) + return -ENOMEM; + + /* initialize the stuff */ + chip->card = card; + chip->irq = -1; + + /* Hardware Initialization */ + /* get standby status of all devices */ + hd64461_stbcr = inw(HD64461_STBCR); + /* remove standby mode for timer 0 */ + hd64461_stbcr &= ~HD64461_STBCR_STM0ST; + outw(hd64461_stbcr, HD64461_STBCR); + + /* set bit interrupt service request */ + timer_status = inw(HD64461_TMU_TIRR); + timer_status &= ~HD64461_TMU_TIRR_TMU0; + outw(timer_status, HD64461_TMU_TIRR); + + /* set interrupt service request mask bit */ + timer_status = inw(HD64461_TMU_TIDR); + timer_status &= ~HD64461_TMU_TIMR_TMU0; + outw(timer_status, HD64461_TMU_TIDR); + + chip->data_buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL); + if (chip->data_buffer == NULL) + return -ENOMEM; + + dac_audio_reset(chip); + chip->rate = 8000; + dac_audio_set_rate(chip->rate); + + if (request_irq(HD64461_IRQ_TMU0, snd_sh_dac_interrupt, IRQF_DISABLED, + "snd_sh_dac", (void *)chip)) { + snd_sh_dac_free(chip); + printk(KERN_ERR "cannot grab irq\n"); + return -EBUSY; + } + chip->irq = HD64461_IRQ_TMU0; + + if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { + snd_sh_dac_free(chip); + return err; + } + *rchip = chip; + + return 0; +} + +/* driver .probe -- constructor */ +static int __devinit snd_sh_dac_probe(struct platform_device *devptr) +{ + struct snd_sh_dac *chip; + struct snd_card *card; + int err; + + card = snd_card_new(index, id, THIS_MODULE, 0); + if (card == NULL) + return -ENOMEM; + + err = snd_sh_dac_create(card, devptr, &chip); + if (err < 0) + goto probe_error; + + err = snd_sh_dac_pcm(chip, 0); + if (err < 0) + goto probe_error; + + strcpy(card->driver, "snd_sh_dac"); + strcpy(card->shortname, "SuperH DAC audio driver"); + sprintf(card->longname, "%s at HD64461 irq %i", card->shortname, + chip->irq); + + err = snd_card_register(card); + if (err < 0) + goto probe_error; + + snd_printk("ALSA driver for SuperH DAC audio"); + + platform_set_drvdata(devptr, card); + return 0; + +probe_error: + snd_card_free(card); + return err; +} + +/* + * "driver" definition + */ +static struct platform_driver driver = { + .probe = snd_sh_dac_probe, + .remove = snd_sh_dac_remove, + .driver = { + .name = SND_SH_DAC_DRIVER, + }, +}; + +/* clean up the module */ +static void __exit sh_dac_exit(void) +{ + platform_device_unregister(pd); + platform_driver_unregister(&driver); + + free_irq(HD64461_IRQ_TMU0, 0); +} + + +static int __init sh_dac_init(void) +{ + int err; + err = platform_driver_register(&driver); + if (unlikely(err < 0)) + return err; + + pd = platform_device_register_simple(SND_SH_DAC_DRIVER, -1, NULL, 0); + if (unlikely(IS_ERR(pd))) { + platform_driver_unregister(&driver); + return PTR_ERR(pd); + } + + return 0; +} + +module_init(sh_dac_init); +module_exit(sh_dac_exit); diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig index a83e22937c270c..62b0d9446d98d9 100644 --- a/sound/soc/pxa/Kconfig +++ b/sound/soc/pxa/Kconfig @@ -27,6 +27,15 @@ config SND_PXA2XX_SOC_CORGI Say Y if you want to add support for SoC audio on Sharp Zaurus SL-C7x0 models (Corgi, Shepherd, Husky). +config SND_PXA2XX_SOC_MP900 + tristate "SoC Audio support for MobilePro 900c" + depends on SND_PXA2XX_SOC && ARCH_MP900C + select SND_PXA2XX_SOC_I2S + select SND_SOC_WM8731 + help + Say Y if you want to add support for SoC audio on + MobilePro 900C. + config SND_PXA2XX_SOC_SPITZ tristate "SoC Audio support for Sharp Zaurus SL-Cxx00" depends on SND_PXA2XX_SOC && PXA_SHARP_Cxx00 diff --git a/sound/soc/sh/Kconfig b/sound/soc/sh/Kconfig index f03220d23e73aa..4c1e013381c9db 100644 --- a/sound/soc/sh/Kconfig +++ b/sound/soc/sh/Kconfig @@ -1,4 +1,5 @@ menu "SoC Audio support for SuperH" + depends on SUPERH config SND_SOC_PCM_SH7760 tristate "SoC Audio support for Renesas SH7760" |