summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/linux/linux/progear/progear_bl-r6.patch200
-rw-r--r--packages/linux/linux/simpad/defconfig161
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch315
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch (renamed from packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch)470
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-and-gpio_keys.patch194
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch (renamed from packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch)22
-rw-r--r--packages/linux/linux/simpad/linux-2.6.21-pcmcia-device-to-platform-driver.patch54
-rw-r--r--packages/linux/linux_2.6.20.bb11
-rw-r--r--packages/linux/linux_2.6.21.bb23
9 files changed, 995 insertions, 455 deletions
diff --git a/packages/linux/linux/progear/progear_bl-r6.patch b/packages/linux/linux/progear/progear_bl-r6.patch
deleted file mode 100644
index 6ac01714b7..0000000000
--- a/packages/linux/linux/progear/progear_bl-r6.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Add control of LCD backlight for Frontpath ProGear HX1050+.
-Patch is based on http://downloads.sf.net/progear/progear-lcd-0.2.tar.gz
-driver by M Schacht.
-
-Signed-Off-By: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
----
-Patch follow kernel version 2.6.20
-
- Kconfig | 8 +++
- Makefile | 1
- progear_bl.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 163 insertions(+)
-
-Index: git/drivers/video/backlight/Kconfig
-===================================================================
---- git.orig/drivers/video/backlight/Kconfig 2006-12-29 17:31:36.511043439 +0100
-+++ git/drivers/video/backlight/Kconfig 2007-02-07 08:57:31.020095845 +0100
-@@ -66,3 +66,11 @@
- If you have a HP Jornada 680, say y to enable the
- backlight driver.
-
-+config BACKLIGHT_PROGEAR
-+ tristate "Frontpath ProGear Backlight Driver"
-+ depends on BACKLIGHT_DEVICE && PCI && X86
-+ default y
-+ help
-+ If you have a Frontpath ProGear say Y to enable the
-+ backlight driver.
-+
-Index: git/drivers/video/backlight/progear_bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/video/backlight/progear_bl.c 2007-02-07 08:55:46.813993140 +0100
-@@ -0,0 +1,154 @@
-+/*
-+ * Backlight Driver for Frontpath ProGear HX1050+
-+ *
-+ * Copyright (c) 2006 Marcin Juszkiewicz
-+ *
-+ * Based on Progear LCD driver by M Schacht
-+ * <mschacht at alumni dot washington dot edu>
-+ *
-+ * Based on Sharp's Corgi Backlight Driver
-+ * Based on Backlight Driver for HP Jornada 680
-+ *
-+ * 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/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/fb.h>
-+#include <linux/backlight.h>
-+#include <linux/pci.h>
-+#include <asm/uaccess.h>
-+
-+#define PMU_LPCR 0xB0
-+#define SB_MPS1 0x61
-+#define HW_LEVEL_MAX 0x77
-+#define HW_LEVEL_MIN 0x4f
-+
-+static struct pci_dev *pmu_dev = NULL;
-+static struct pci_dev *sb_dev = NULL;
-+
-+static int progearbl_set_intensity(struct backlight_device *bd)
-+{
-+ int intensity = bd->props->brightness;
-+
-+ if (bd->props->power != FB_BLANK_UNBLANK)
-+ intensity = 0;
-+ if (bd->props->fb_blank != FB_BLANK_UNBLANK)
-+ intensity = 0;
-+
-+ pci_write_config_byte(pmu_dev, PMU_LPCR, intensity + HW_LEVEL_MIN);
-+
-+ return 0;
-+}
-+
-+static int progearbl_get_intensity(struct backlight_device *bd)
-+{
-+ u8 intensity;
-+ pci_read_config_byte(pmu_dev, PMU_LPCR, &intensity);
-+
-+ return intensity - HW_LEVEL_MIN;
-+}
-+
-+static struct backlight_properties progearbl_data = {
-+ .owner = THIS_MODULE,
-+ .get_brightness = progearbl_get_intensity,
-+ .update_status = progearbl_set_intensity,
-+};
-+
-+static int progearbl_probe(struct platform_device *pdev)
-+{
-+ u8 temp;
-+ struct backlight_device *progear_backlight_device;
-+
-+ pmu_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101, 0);
-+ if (!pmu_dev) {
-+ printk("ALI M7101 PMU not found.\n");
-+ return -ENODEV;
-+ }
-+
-+ sb_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, 0);
-+ if (!sb_dev) {
-+ printk("ALI 1533 SB not found.\n");
-+ pci_dev_put(pmu_dev);
-+ return -ENODEV;
-+ }
-+
-+ /* Set SB_MPS1 to enable brightness control. */
-+ pci_read_config_byte(sb_dev, SB_MPS1, &temp);
-+ pci_write_config_byte(sb_dev, SB_MPS1, temp | 0x20);
-+
-+ progear_backlight_device = backlight_device_register("progear-bl",
-+ &pdev->dev, NULL,
-+ &progearbl_data);
-+ if (IS_ERR(progear_backlight_device))
-+ return PTR_ERR(progear_backlight_device);
-+
-+ platform_set_drvdata(pdev, progear_backlight_device);
-+
-+ progearbl_data.power = FB_BLANK_UNBLANK;
-+ progearbl_data.brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
-+ progearbl_data.max_brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
-+ progearbl_set_intensity(progear_backlight_device);
-+
-+ return 0;
-+}
-+
-+static int progearbl_remove(struct platform_device *pdev)
-+{
-+ struct backlight_device *bd = platform_get_drvdata(pdev);
-+ backlight_device_unregister(bd);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver progearbl_driver = {
-+ .probe = progearbl_probe,
-+ .remove = progearbl_remove,
-+ .driver = {
-+ .name = "progear-bl",
-+ },
-+};
-+
-+static struct platform_device *progearbl_device;
-+
-+static int __init progearbl_init(void)
-+{
-+ int ret = platform_driver_register(&progearbl_driver);
-+
-+ if (!ret) {
-+ progearbl_device = platform_device_alloc("progear-bl", -1);
-+ if (!progearbl_device)
-+ return -ENOMEM;
-+
-+ ret = platform_device_add(progearbl_device);
-+
-+ if (ret) {
-+ platform_device_put(progearbl_device);
-+ platform_driver_unregister(&progearbl_driver);
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+static void __exit progearbl_exit(void)
-+{
-+ pci_dev_put(pmu_dev);
-+ pci_dev_put(sb_dev);
-+
-+ platform_device_unregister(progearbl_device);
-+ platform_driver_unregister(&progearbl_driver);
-+}
-+
-+module_init(progearbl_init);
-+module_exit(progearbl_exit);
-+
-+MODULE_AUTHOR("Marcin Juszkiewicz <linux@hrw.one.pl>");
-+MODULE_DESCRIPTION("ProGear Backlight Driver");
-+MODULE_LICENSE("GPL");
-Index: git/drivers/video/backlight/Makefile
-===================================================================
---- git.orig/drivers/video/backlight/Makefile 2006-12-29 17:31:36.511043439 +0100
-+++ git/drivers/video/backlight/Makefile 2007-02-06 21:34:54.503712923 +0100
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
- obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
- obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
-+obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
diff --git a/packages/linux/linux/simpad/defconfig b/packages/linux/linux/simpad/defconfig
index 2115d30a2c..36d5e942b4 100644
--- a/packages/linux/linux/simpad/defconfig
+++ b/packages/linux/linux/simpad/defconfig
@@ -1,11 +1,14 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Mon Apr 2 11:51:54 2007
+# Linux kernel version: 2.6.21
+# Sun May 6 14:01:42 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
# CONFIG_GENERIC_TIME is not set
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -15,6 +18,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# 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"
@@ -35,6 +39,7 @@ CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
@@ -43,7 +48,7 @@ CONFIG_SYSVIPC=y
# CONFIG_IKCONFIG is not set
CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
@@ -71,9 +76,8 @@ CONFIG_BASE_SMALL=0
# Loadable module support
#
CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -122,6 +126,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
@@ -167,6 +172,7 @@ CONFIG_CPU_CP15_MMU=y
#
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
#
# Bus support
@@ -177,7 +183,7 @@ CONFIG_ISA=y
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
+# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
@@ -208,6 +214,7 @@ CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
CONFIG_LEDS=y
CONFIG_LEDS_TIMER=y
# CONFIG_LEDS_CPU is not set
@@ -220,6 +227,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="mtdparts=sa1100:512k(boot),1m(kernel),-(root) console=ttySA0 root=1f02 noinitrd mem=64M jffs2_orphaned_inodes=delete rootfstype=jffs2"
# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
#
# CPU Frequency scaling
@@ -249,11 +257,10 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-CONFIG_PM_DEBUG=y
-CONFIG_DISABLE_CONSOLE_SUSPEND=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
+# CONFIG_APM_EMULATION is not set
#
# Networking
@@ -270,6 +277,7 @@ 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
@@ -403,12 +411,7 @@ CONFIG_BT_BNEP_PROTO_FILTER=y
# CONFIG_BT_HCIBLUECARD is not set
# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
+# CONFIG_IEEE80211 is not set
CONFIG_WIRELESS_EXT=y
#
@@ -422,6 +425,7 @@ 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
#
@@ -528,6 +532,7 @@ CONFIG_MTD_SA1100=y
# Plug and Play support
#
# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
#
# Block devices
@@ -540,38 +545,13 @@ CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-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
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
+# CONFIG_IDE is not set
#
# SCSI device support
@@ -749,7 +729,14 @@ CONFIG_INPUT_EVBUG=y
#
# Input Device Drivers
#
-# CONFIG_INPUT_KEYBOARD is not set
+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_TOUCHSCREEN is not set
@@ -798,7 +785,7 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
@@ -836,12 +823,6 @@ CONFIG_HW_RANDOM=y
# Hardware Monitoring support
#
CONFIG_HWMON=y
-
-#
-# Hardware Monitoring - Battery
-#
-CONFIG_BATTERY_MONITOR=y
-CONFIG_MCP_UCB1200_SIMPAD_BATTERY=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
# CONFIG_SENSORS_F71805F is not set
@@ -852,7 +833,11 @@ CONFIG_MCP_UCB1200_SIMPAD_BATTERY=y
#
# Misc devices
#
-# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
#
# Multimedia Capabilities Port drivers
@@ -889,15 +874,26 @@ CONFIG_MCP_UCB1200_SWITCHES=y
#
# Graphics support
#
-CONFIG_FIRMWARE_EDID=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_SIMPAD=y
+CONFIG_LCD_SIMPAD=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_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
+
+#
+# Frambuffer hardware drivers
+#
# CONFIG_FB_SA1100 is not set
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_MQ200=y
@@ -922,13 +918,6 @@ CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_FB_MQ200_LCD=y
-CONFIG_FB_MQ200_BACKLIGHT=y
#
# Sound
@@ -949,6 +938,7 @@ CONFIG_SOUND=y
# HID Devices
#
CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
# USB support
@@ -997,7 +987,7 @@ CONFIG_REISERFS_FS=m
CONFIG_REISERFS_PROC_INFO=y
# CONFIG_REISERFS_FS_XATTR is not set
# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
+# 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
@@ -1010,7 +1000,6 @@ CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
-CONFIG_GENERIC_ACL=y
#
# CD-ROM/DVD Filesystems
@@ -1034,8 +1023,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1160,16 +1148,17 @@ CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_SLAB 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_RWSEMS is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
@@ -1180,6 +1169,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_FRAME_POINTER=y
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y
@@ -1194,43 +1184,7 @@ CONFIG_DEBUG_LL=y
#
# Cryptographic options
#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# 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 is not set
-# 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 is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES 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=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
+# CONFIG_CRYPTO is not set
#
# Library routines
@@ -1243,4 +1197,5 @@ CONFIG_CRC32=y
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch
new file mode 100644
index 0000000000..6d6c373271
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-cs3-simpad.patch
@@ -0,0 +1,315 @@
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/Makefile linux-2.6.21/arch/arm/mach-sa1100/Makefile
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/Makefile 2007-05-01 16:40:44.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-sa1100/Makefile 2007-05-01 16:52:10.000000000 +0200
+@@ -40,6 +40,7 @@
+ obj-$(CONFIG_SA1100_SHANNON) += shannon.o
+
+ obj-$(CONFIG_SA1100_SIMPAD) += simpad.o
++obj-$(CONFIG_SA1100_SIMPAD) += cs3-simpad.o
+ led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
+
+ # LEDs support
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/cs3-simpad.c linux-2.6.21/arch/arm/mach-sa1100/cs3-simpad.c
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/cs3-simpad.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/arch/arm/mach-sa1100/cs3-simpad.c 2007-05-01 16:52:10.000000000 +0200
+@@ -0,0 +1,300 @@
++/*
++ * cs3-simpad.c
++ *
++ * This driver shows the GPIO states of the cs3 latch. You can also
++ * switch some GPIOS.
++ *
++ * (c) 2007 Bernhard Guillon <Bernhard.Guillon@OpenSIMpad.org>
++ *
++ * You may use this code as per GPL version 2
++ *
++ * Some parts are based on battery.c
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/device.h>
++
++#include <asm/arch/simpad.h>
++
++extern long get_cs3_shadow(void);
++extern void set_cs3_bit(int value);
++extern void clear_cs3_bit(int value);
++
++struct cs3 {
++ struct class_device class_dev;
++ const char *name;
++ char *id;
++ int type;
++};
++
++struct cs3 cs3 ={
++ .name = "latch_cs3",
++};
++
++static ssize_t get_VCC_5V_EN (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & VCC_5V_EN )
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_VCC_3V_EN (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & VCC_3V_EN)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_EN1 (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & EN1)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_EN0 (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & EN0)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_DISPLAY_ON (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & DISPLAY_ON)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_PCMCIA_BUFF_DIS (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & PCMCIA_BUFF_DIS)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_MQ_RESET (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & MQ_RESET)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_PCMCIA_RESET (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & PCMCIA_RESET)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_DECT_POWER_ON (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & DECT_POWER_ON)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_IRDA_SD (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & IRDA_SD)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_RS232_ON (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & RS232_ON)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_SD_MEDIAQ (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & SD_MEDIAQ)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_LED2_ON (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & LED2_ON)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_IRDA_MODE (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & IRDA_MODE)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_ENABLE_5V (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & ENABLE_5V)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++static ssize_t get_RESET_SIMCARD (struct class_device *class_dev, char *buf) {
++ if (get_cs3_shadow() & RESET_SIMCARD)
++ return sprintf(buf, "1\n");
++ else
++ return sprintf(buf, "0\n");
++}
++
++
++static ssize_t write_DISPLAY_ON (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(DISPLAY_ON);
++ else if (val=='0')
++ clear_cs3_bit(DISPLAY_ON);
++ return strlen(buf);
++}
++
++static ssize_t write_DECT_POWER_ON (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(DECT_POWER_ON);
++ else if (val=='0')
++ clear_cs3_bit(DECT_POWER_ON);
++ return strlen(buf);
++}
++
++static ssize_t write_IRDA_SD (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(IRDA_SD);
++ else if (val=='0')
++ clear_cs3_bit(IRDA_SD);
++ return strlen(buf);
++}
++
++static ssize_t write_SD_MEDIAQ (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(SD_MEDIAQ);
++ else if (val=='0')
++ clear_cs3_bit(SD_MEDIAQ);
++ return strlen(buf);
++}
++
++static ssize_t write_LED2_ON (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(LED2_ON);
++ else if (val=='0')
++ clear_cs3_bit(LED2_ON);
++ return strlen(buf);
++}
++
++static ssize_t write_IRDA_MODE (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(IRDA_MODE);
++ else if (val=='0')
++ clear_cs3_bit(IRDA_MODE);
++ return strlen(buf);
++}
++
++static ssize_t write_RESET_SIMCARD (struct class_device *cdev, const char * buf, size_t count){
++ char val;
++ if (sscanf(buf, "%c",&val) !=1)
++ return -EINVAL;
++ if (val=='1')
++ set_cs3_bit(RESET_SIMCARD);
++ else if (val=='0')
++ clear_cs3_bit(RESET_SIMCARD);
++ return strlen(buf);
++}
++
++static CLASS_DEVICE_ATTR(vcc_5v_en, 0444, get_VCC_5V_EN, NULL);
++static CLASS_DEVICE_ATTR(vcc_3v_en, 0444, get_VCC_3V_EN, NULL);
++static CLASS_DEVICE_ATTR(en1, 0444, get_EN1, NULL);
++static CLASS_DEVICE_ATTR(en0, 0444, get_EN0, NULL);
++static CLASS_DEVICE_ATTR(display_on, 0664, get_DISPLAY_ON, write_DISPLAY_ON);
++static CLASS_DEVICE_ATTR(pcmcia_buff_dis, 0444, get_PCMCIA_BUFF_DIS, NULL);
++static CLASS_DEVICE_ATTR(mq_reset, 0444, get_MQ_RESET, NULL);
++static CLASS_DEVICE_ATTR(pcmcia_reset, 0444, get_PCMCIA_RESET, NULL);
++static CLASS_DEVICE_ATTR(dect_power_on, 0664, get_DECT_POWER_ON, write_DECT_POWER_ON);
++static CLASS_DEVICE_ATTR(irda_sd, 0664, get_IRDA_SD, write_IRDA_SD);
++static CLASS_DEVICE_ATTR(rs232_on, 0444, get_RS232_ON, NULL);
++static CLASS_DEVICE_ATTR(sd_mediaq, 0664, get_SD_MEDIAQ, write_SD_MEDIAQ);
++static CLASS_DEVICE_ATTR(led2_on, 0664, get_LED2_ON, write_LED2_ON);
++static CLASS_DEVICE_ATTR(irda_mode, 0664, get_IRDA_MODE, write_IRDA_MODE);
++static CLASS_DEVICE_ATTR(enable_5v, 0444, get_ENABLE_5V, NULL);
++static CLASS_DEVICE_ATTR(reset_simcard, 0664, get_RESET_SIMCARD, write_RESET_SIMCARD);
++
++static struct class simpad_gpios_class = {
++ .name = "simpad"
++};
++
++#define create_entry_conditional(name) \
++ rc = class_device_create_file(&cs3->class_dev, &class_device_attr_##name); \
++ if (rc) goto out; \
++
++static int register_cs3_latch(struct cs3 *cs3){
++ int rc = 0;
++ cs3->class_dev.class = &simpad_gpios_class;
++ strcpy(cs3->class_dev.class_id, cs3->name);
++ rc = class_device_register(&cs3->class_dev);
++ if(rc)
++ goto out;
++
++ create_entry_conditional(vcc_5v_en);
++ create_entry_conditional(vcc_3v_en);
++ create_entry_conditional(en1);
++ create_entry_conditional(en0);
++ create_entry_conditional(display_on);
++ create_entry_conditional(pcmcia_buff_dis);
++ create_entry_conditional(mq_reset);
++ create_entry_conditional(pcmcia_reset);
++ create_entry_conditional(dect_power_on);
++ create_entry_conditional(irda_sd);
++ create_entry_conditional(rs232_on);
++ create_entry_conditional(sd_mediaq);
++ create_entry_conditional(led2_on);
++ create_entry_conditional(irda_mode);
++ create_entry_conditional(enable_5v);
++ create_entry_conditional(reset_simcard);
++
++out:
++ return rc;
++}
++
++static int __init simpad_gpios_class_init(void)
++{
++ if (class_register(&simpad_gpios_class) != 0)
++ printk(KERN_ERR "cs3 latch class failed "
++ "to register properly\n");
++ register_cs3_latch(&cs3);
++ return 0;
++}
++
++static void __exit simpad_gpios_class_exit(void)
++{
++ class_unregister(&simpad_gpios_class);
++}
++
++module_init(simpad_gpios_class_init);
++module_exit(simpad_gpios_class_exit);
++
++MODULE_DESCRIPTION("CS3_latch driver");
++MODULE_AUTHOR("Bernhard Guillon");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch
index 841cf4566c..5726779ad6 100644
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-mq200.patch
@@ -1,9 +1,18 @@
-diff -uNr linux-2.6.20.vanilla/drivers/video/Kconfig linux-2.6.20/drivers/video/Kconfig
---- linux-2.6.20.vanilla/drivers/video/Kconfig 2007-03-24 21:25:52.000000000 +0100
-+++ linux-2.6.20/drivers/video/Kconfig 2007-03-28 22:53:44.000000000 +0200
-@@ -1147,6 +1147,15 @@
- help
- If you have a S3 Trio say Y. Say N for S3 Virge.
+diff -uNr linux-2.6.21.vanilla/drivers/video/Kconfig linux-2.6.21/drivers/video/Kconfig
+--- linux-2.6.21.vanilla/drivers/video/Kconfig 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/Kconfig 2007-05-01 17:02:17.000000000 +0200
+@@ -139,7 +139,7 @@
+ This is particularly important to one driver, matroxfb. If
+ unsure, say N.
+
+-comment "Frame buffer hardware drivers"
++comment "Frambuffer hardware drivers"
+ depends on FB
+
+ config FB_CIRRUS
+@@ -1120,6 +1120,15 @@
+ ---help---
+ Driver for graphics boards with S3 Trio / S3 Virge chip.
+config FB_MQ200
+ bool "MQ200 Driver"
@@ -17,10 +26,10 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/Kconfig linux-2.6.20/drivers/video/
config FB_SAVAGE
tristate "S3 Savage support"
depends on FB && PCI && EXPERIMENTAL
-diff -uNr linux-2.6.20.vanilla/drivers/video/Makefile linux-2.6.20/drivers/video/Makefile
---- linux-2.6.20.vanilla/drivers/video/Makefile 2007-03-24 21:25:52.000000000 +0100
-+++ linux-2.6.20/drivers/video/Makefile 2007-03-28 22:53:44.000000000 +0200
-@@ -30,6 +30,7 @@
+diff -uNr linux-2.6.21.vanilla/drivers/video/Makefile linux-2.6.21/drivers/video/Makefile
+--- linux-2.6.21.vanilla/drivers/video/Makefile 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/Makefile 2007-05-01 17:02:17.000000000 +0200
+@@ -29,6 +29,7 @@
obj-$(CONFIG_FB_PM2) += pm2fb.o
obj-$(CONFIG_FB_PM3) += pm3fb.o
@@ -28,33 +37,43 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/Makefile linux-2.6.20/drivers/video
obj-$(CONFIG_FB_MATROX) += matrox/
obj-$(CONFIG_FB_RIVA) += riva/ vgastate.o
obj-$(CONFIG_FB_NVIDIA) += nvidia/
-diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/Kconfig linux-2.6.20/drivers/video/backlight/Kconfig
---- linux-2.6.20.vanilla/drivers/video/backlight/Kconfig 2007-03-24 21:25:53.000000000 +0100
-+++ linux-2.6.20/drivers/video/backlight/Kconfig 2007-03-28 22:53:44.000000000 +0200
-@@ -66,3 +66,10 @@
- If you have a HP Jornada 680, say y to enable the
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/Kconfig linux-2.6.21/drivers/video/backlight/Kconfig
+--- linux-2.6.21.vanilla/drivers/video/backlight/Kconfig 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/backlight/Kconfig 2007-05-01 17:02:17.000000000 +0200
+@@ -63,3 +63,20 @@
+ help
+ If you have a Frontpath ProGear say Y to enable the
backlight driver.
-
-+config FB_MQ200_LCD
-+ bool "MQ200 LCD class implemetation"
-+ depends on SA1100_SIMPAD && LCD_DEVICE
-+
-+config FB_MQ200_BACKLIGHT
-+ bool "MQ200 Backlight class implementation"
-+ depends on SA1100_SIMPAD && BACKLIGHT_DEVICE
-diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/Makefile linux-2.6.20/drivers/video/backlight/Makefile
---- linux-2.6.20.vanilla/drivers/video/backlight/Makefile 2007-03-24 21:25:53.000000000 +0100
-+++ linux-2.6.20/drivers/video/backlight/Makefile 2007-03-28 22:53:44.000000000 +0200
-@@ -5,3 +5,5 @@
- obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
++
++config BACKLIGHT_SIMPAD
++ tristate "SIMpad MQ200 Backlight driver"
++ depends on SA1100_SIMPAD && BACKLIGHT_CLASS_DEVICE
++ default y
++ help
++ If you have a Siemens SIMpad say Y to enable the
++ backlight driver.
++
++config LCD_SIMPAD
++ tristate "SIMpad MQ200 LCD driver"
++ depends on SA1100_SIMPAD && LCD_CLASS_DEVICE
++ default y
++ help
++ If you have a Siemens SIMpad say Y to enable the
++ LCD driver.
++
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/Makefile linux-2.6.21/drivers/video/backlight/Makefile
+--- linux-2.6.21.vanilla/drivers/video/backlight/Makefile 2007-05-01 16:40:48.000000000 +0200
++++ linux-2.6.21/drivers/video/backlight/Makefile 2007-05-01 17:02:17.000000000 +0200
+@@ -6,3 +6,5 @@
obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
-+obj-$(CONFIG_FB_MQ200_BACKLIGHT) += simpad_bl.o
-+obj-$(CONFIG_FB_MQ200_LCD) += simpad_lcd.o
-diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_bl.c linux-2.6.20/drivers/video/backlight/simpad_bl.c
---- linux-2.6.20.vanilla/drivers/video/backlight/simpad_bl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/backlight/simpad_bl.c 2007-03-28 22:53:44.000000000 +0200
-@@ -0,0 +1,109 @@
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
++obj-$(CONFIG_BACKLIGHT_SIMPAD) += simpad_bl.o
++obj-$(CONFIG_LCD_SIMPAD) += simpad_lcd.o
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/simpad_bl.c linux-2.6.21/drivers/video/backlight/simpad_bl.c
+--- linux-2.6.21.vanilla/drivers/video/backlight/simpad_bl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/backlight/simpad_bl.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,208 @@
+/*
+ * GPLv2 <zecke@handhelds.org
+ *
@@ -73,90 +92,189 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_bl.c linux-2.6.20/
+ * - added .brightness=127 in
+ * struct backlight_properties simpad_bl_props()
+ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
+#include <asm/types.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+
-+#include <linux/device.h>
-+#include <linux/backlight.h>
-+#include <linux/fb.h>
-+
+#include "../mq200/mq200_data.h"
+
+#define SIMPAD_BACKLIGHT_MASK 0x00a10044
-+#define MAX_BRIGHT 254
++#define SIMPAD_DEFAULT_INTENSITY 127
++#define SIMPAD_MAX_INTENSITY 254
+#define REGISTER_BASE 0xf2e00000
+
++static int simpad_bl_suspended;
++static int current_intensity = 0;
+
-+static int simpad_bl_get_brightness(struct backlight_device *dev)
++static void simpad_bl_send_intensity(struct backlight_device *bd)
+{
-+ u32 pwmctl;
++ int intensity = bd->props.brightness;
++
++ union fp0fr fp0fr;
++ unsigned long dutyCycle, pwmcontrol;
++
++ if (intensity > SIMPAD_MAX_INTENSITY)
++ intensity = SIMPAD_MAX_INTENSITY;
++
++ if (bd->props.power != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if (bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if (simpad_bl_suspended)
++ intensity = 0;
++
++ if (intensity != current_intensity)
++ {
++ /*
++ * Determine dutyCycle.
++ * Note: the lower the value, the brighter the display!
++ */
++
++ dutyCycle = SIMPAD_MAX_INTENSITY - intensity;
++
++ /*
++ * Configure PWM0 (source clock = oscillator clock, pwm always enabled,
++ * zero, clock pre-divider = 4) pwm frequency = 12.0kHz
++ */
++
++ fp0fr.whole = readl(FP0FR(REGISTER_BASE));
++ pwmcontrol = fp0fr.whole & 0xffff00ff;
++ fp0fr.whole &= 0xffffff00;
++ fp0fr.whole |= 0x00000044;
++ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
++
++ /* Write to pwm duty cycle register. */
++ fp0fr.whole = dutyCycle << 8;
++ fp0fr.whole &= 0x0000ff00;
++ fp0fr.whole |= pwmcontrol;
++ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
++
++ current_intensity = intensity;
++ }
++}
+
-+ pwmctl = readl(FP0FR(REGISTER_BASE));
-+ pwmctl &= ~SIMPAD_BACKLIGHT_MASK;
-+ pwmctl = pwmctl >> 8;
-+ pwmctl = MAX_BRIGHT - pwmctl;
+
-+ return pwmctl;
++#ifdef CONFIG_PM
++static int simpad_bl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ simpad_bl_suspended = 1;
++ simpad_bl_send_intensity(bd);
++ return 0;
+}
+
-+static int simpad_bl_set_brightness(int bright)
++static int simpad_bl_resume(struct platform_device *pdev)
+{
-+ union fp0fr fp0fr;
-+ unsigned long dutyCycle, pwmcontrol;
++ struct backlight_device *bd = platform_get_drvdata(pdev);
+
-+ if(bright > MAX_BRIGHT)
-+ bright = MAX_BRIGHT;
++ simpad_bl_suspended = 0;
++ simpad_bl_send_intensity(bd);
++ return 0;
++}
++#else
++#define simpad_bl_suspend NULL
++#define simpad_bl_resume NULL
++#endif
+
-+ /*
-+ * Determine dutyCycle.
-+ * Note: the lower the value, the brighter the display!
-+ */
+
-+ dutyCycle = MAX_BRIGHT - bright;
++static int simpad_bl_set_intensity(struct backlight_device *bd)
++{
++ simpad_bl_send_intensity(bd);
++ return 0;
++}
+
-+ /*
-+ *Configure PWM0 (source clock = oscillator clock, pwm always enabled,
-+ *zero, clock pre-divider = 4) pwm frequency = 12.0kHz
-+ */
-+ fp0fr.whole = readl(FP0FR(REGISTER_BASE));
-+ pwmcontrol = fp0fr.whole & 0xffff00ff;
-+ fp0fr.whole &= 0xffffff00;
-+ fp0fr.whole |= 0x00000044;
-+ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
-+
-+ /* Write to pwm duty cycle register. */
-+ fp0fr.whole = dutyCycle << 8;
-+ fp0fr.whole &= 0x0000ff00;
-+ fp0fr.whole |= pwmcontrol;
-+ writel(fp0fr.whole, FP0FR(REGISTER_BASE));
+
-+ return 0;
++static int simpad_bl_get_intensity(struct backlight_device *bd)
++{
++ return current_intensity;
+}
+
-+static int simpad_bl_update_status(struct backlight_device *dev)
++
++static struct backlight_ops simpad_bl_ops = {
++ .get_brightness = simpad_bl_get_intensity,
++ .update_status = simpad_bl_set_intensity,
++};
++
++
++static int __init simpad_bl_probe(struct platform_device *pdev)
+{
-+ return simpad_bl_set_brightness(dev->props->brightness);
++ struct backlight_device *bd;
++
++ bd = backlight_device_register("simpad-mq200-bl", &pdev->dev, NULL, &simpad_bl_ops);
++
++ if (IS_ERR (bd))
++ return PTR_ERR (bd);
++
++ platform_set_drvdata(pdev, bd);
++
++ bd->props.max_brightness = SIMPAD_MAX_INTENSITY;
++ bd->props.brightness = SIMPAD_DEFAULT_INTENSITY;
++ simpad_bl_send_intensity(bd);
++
++ return 0;
+}
+
-+static struct backlight_properties simpad_bl_props = {
-+ .owner = THIS_MODULE,
-+ .update_status = simpad_bl_update_status,
-+ .get_brightness = simpad_bl_get_brightness,
-+ .brightness=127,
-+ .max_brightness = MAX_BRIGHT,
++
++static int simpad_bl_remove(struct platform_device *pdev)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ bd->props.brightness = 0;
++ bd->props.power = 0;
++ simpad_bl_send_intensity(bd);
++
++ backlight_device_unregister(bd);
++
++ return 0;
++}
++
++static struct platform_driver simpad_bl_driver = {
++ .probe = simpad_bl_probe,
++ .remove = simpad_bl_remove,
++ .suspend = simpad_bl_suspend,
++ .resume = simpad_bl_resume,
++ .driver = {
++ .name = "simpad-mq200-bl",
++ },
+};
+
-+static struct backlight_device *simpad_bl_device = NULL;
++static struct platform_device *simpad_bl_device = NULL;
+
-+static int __init simpad_bl_init(void) {
-+ simpad_bl_device = backlight_device_register("mq200_fb0", NULL,
-+ NULL, &simpad_bl_props);
-+ return simpad_bl_device != NULL;
++static int __init simpad_bl_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&simpad_bl_driver);
++ if (!ret) {
++ simpad_bl_device = platform_device_alloc("simpad-mq200-bl", -1);
++ if (!simpad_bl_device)
++ return -ENOMEM;
++
++ ret = platform_device_add(simpad_bl_device);
++
++ if (ret) {
++ platform_device_put(simpad_bl_device);
++ platform_driver_unregister(&simpad_bl_driver);
++ }
++ }
++ return ret;
+}
+
-+static void __exit simpad_bl_exit(void) {
-+ backlight_device_unregister(simpad_bl_device);
++static void __exit simpad_bl_exit(void)
++{
++ platform_device_unregister(simpad_bl_device);
++ platform_driver_unregister(&simpad_bl_driver);
+}
+
+
@@ -164,10 +282,10 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_bl.c linux-2.6.20/
+module_exit(simpad_bl_exit);
+MODULE_AUTHOR("Holger Hans Peter Freyther");
+MODULE_LICENSE("GPL");
-diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_lcd.c linux-2.6.20/drivers/video/backlight/simpad_lcd.c
---- linux-2.6.20.vanilla/drivers/video/backlight/simpad_lcd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/backlight/simpad_lcd.c 2007-03-28 22:58:41.000000000 +0200
-@@ -0,0 +1,80 @@
+diff -uNr linux-2.6.21.vanilla/drivers/video/backlight/simpad_lcd.c linux-2.6.21/drivers/video/backlight/simpad_lcd.c
+--- linux-2.6.21.vanilla/drivers/video/backlight/simpad_lcd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/backlight/simpad_lcd.c 2007-05-01 17:02:17.000000000 +0200
+@@ -0,0 +1,170 @@
+/*
+ * GPLv2 <zecke@handhelds.org
+ *
@@ -178,12 +296,16 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_lcd.c linux-2.6.20
+ * - added simpad_lcd_set_contrast()
+ * - modify struct lcd_properties simpad_lcd_props
+ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/lcd.h>
++
+#include <asm/arch/simpad.h>
+#include <asm/hardware.h>
+
-+#include <linux/device.h>
-+#include <linux/lcd.h>
-+
+extern long get_cs3_shadow(void);
+extern void set_cs3_bit(int);
+extern void clear_cs3_bit(int);
@@ -192,65 +314,151 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/backlight/simpad_lcd.c linux-2.6.20
+
+static int simpad_lcd_get_power(struct lcd_device* dev)
+{
-+ UNUSED(dev);
++ UNUSED(dev);
+
-+ return (get_cs3_shadow() & DISPLAY_ON) ? 0 : 4;
++ return (get_cs3_shadow() & DISPLAY_ON) ? 0 : 4;
+}
+
+static int simpad_lcd_set_power(struct lcd_device* dev, int power)
+{
-+ UNUSED(dev);
++ UNUSED(dev);
+
-+ if( power == 4 )
-+ clear_cs3_bit(DISPLAY_ON);
-+ else
-+ set_cs3_bit(DISPLAY_ON);
++ if( power == 4 )
++ clear_cs3_bit(DISPLAY_ON);
++ else
++ set_cs3_bit(DISPLAY_ON);
+
-+ return 0;
++ return 0;
+}
+
+static int simpad_lcd_get_contrast(struct lcd_device* dev)
+{
-+ UNUSED(dev);
++ UNUSED(dev);
+
-+ return 0;
++ return 0;
+}
+
+static int simpad_lcd_set_contrast(struct lcd_device* dev, int contrast)
+{
-+ UNUSED(dev);
++ UNUSED(dev);
+
-+ UNUSED(contrast);
++ UNUSED(contrast);
+
-+ return 0;
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int simpad_lcd_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ UNUSED(state);
++ static int ret;
++
++ struct lcd_device* ld;
++
++ ld = platform_get_drvdata(pdev);
++
++ ret = simpad_lcd_set_power(ld, 4);
++
++ return ret;
++}
++
++static int simpad_lcd_resume(struct platform_device *pdev)
++{
++ struct lcd_device *ld;
++ static int ret;
++
++ ld = platform_get_drvdata(pdev);
++
++ ret = simpad_lcd_set_power(ld, 0);
++
++ return ret;
+}
++#else
++#define simpad_lcd_suspend NULL
++#define simpad_lcd_resume NULL
++#endif
+
+static struct lcd_properties simpad_lcd_props = {
-+ .owner = THIS_MODULE,
-+ .get_power = simpad_lcd_get_power,
-+ .set_power = simpad_lcd_set_power,
-+ .get_contrast = simpad_lcd_get_contrast,
-+ .set_contrast = simpad_lcd_set_contrast,
-+ .max_contrast = 0
++ .max_contrast = 0,
++};
++
++
++static struct lcd_ops simpad_lcd_ops = {
++ .get_power = simpad_lcd_get_power,
++ .set_power = simpad_lcd_set_power,
++ .get_contrast = simpad_lcd_get_contrast,
++ .set_contrast = simpad_lcd_set_contrast,
++};
++
++static int __init simpad_lcd_probe(struct platform_device *pdev)
++{
++ struct lcd_device *ld;
++
++ ld = lcd_device_register ("simpad-mq200-lcd", &pdev->dev, &simpad_lcd_ops);
++
++ if (IS_ERR(ld))
++ return PTR_ERR(ld);
++
++ platform_set_drvdata(pdev, ld);
++
++ ld->props.max_contrast = 0;
++
++ return 0;
++}
++
++static int simpad_lcd_remove(struct platform_device *pdev)
++{
++ struct lcd_device *ld = platform_get_drvdata(pdev);
++
++ lcd_device_unregister(ld);
++
++ return 0;
++}
++
++static struct platform_driver simpad_lcd_driver = {
++ .probe = simpad_lcd_probe,
++ .remove = simpad_lcd_remove,
++ .suspend = simpad_lcd_suspend,
++ .resume = simpad_lcd_resume,
++ .driver = {
++ .name = "simpad-mq200-lcd",
++ },
+};
+
-+static struct lcd_device* simpad_lcd_device = NULL;
++static struct platform_device *simpad_lcd_device = NULL;
+
-+static int __init simpad_lcd_init(void) {
-+ simpad_lcd_device = lcd_device_register("mq200_fb0", NULL,
-+ &simpad_lcd_props);
-+ return simpad_lcd_device != NULL;
++static int __init simpad_lcd_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&simpad_lcd_driver);
++ if (!ret) {
++ simpad_lcd_device = platform_device_alloc("simpad-mq200-lcd", -1);
++ if (!simpad_lcd_device)
++ return -ENOMEM;
++
++ ret = platform_device_add(simpad_lcd_device);
++
++ if (ret) {
++ platform_device_put(simpad_lcd_device);
++ platform_driver_unregister(&simpad_lcd_driver);
++ }
++ }
++ return ret;
+}
+
+static void __exit simpad_lcd_exit(void) {
-+ lcd_device_unregister(simpad_lcd_device);
++ platform_driver_unregister(&simpad_lcd_driver);
++ platform_device_unregister(simpad_lcd_device);
+}
+
+module_init(simpad_lcd_init);
+module_exit(simpad_lcd_exit);
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/Makefile linux-2.6.20/drivers/video/mq200/Makefile
---- linux-2.6.20.vanilla/drivers/video/mq200/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/Makefile 2007-03-28 22:53:44.000000000 +0200
++MODULE_AUTHOR("Holger Hans Peter Freyther");
++MODULE_LICENSE("GPL");
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/Makefile linux-2.6.21/drivers/video/mq200/Makefile
+--- linux-2.6.21.vanilla/drivers/video/mq200/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/Makefile 2007-05-01 17:02:17.000000000 +0200
@@ -0,0 +1,6 @@
+# Makefile for mq200 video driver
+# 4 Aug 2003, Holger Hans Peter Freyther
@@ -258,9 +466,9 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/Makefile linux-2.6.20/drivers
+
+obj-$(CONFIG_FB_MQ200) += mq_skeleton.o mq_external.o
+
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/drivers/video/mq200/mq200_data.h
---- linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq200_data.h 2007-03-28 22:53:44.000000000 +0200
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.21/drivers/video/mq200/mq200_data.h
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq200_data.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq200_data.h 2007-05-01 17:02:17.000000000 +0200
@@ -0,0 +1,1120 @@
+/*
+ * From ucLinux mq200fb.c and mq200fb.h
@@ -1382,9 +1590,9 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/dri
+
+
+#endif
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/drivers/video/mq200/mq_external.c
---- linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq_external.c 2007-03-28 22:53:44.000000000 +0200
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq_external.c linux-2.6.21/drivers/video/mq200/mq_external.c
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq_external.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq_external.c 2007-05-01 17:02:17.000000000 +0200
@@ -0,0 +1,513 @@
+/*
+ * Copyright (C) 2005 Holger Hans Peter Freyther
@@ -1899,9 +2107,9 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ pc00r.part.device, pc00r.part.vendor);
+ return 1;
+}
-diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.20/drivers/video/mq200/mq_skeleton.c
---- linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/video/mq200/mq_skeleton.c 2007-03-28 22:53:44.000000000 +0200
+diff -uNr linux-2.6.21.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.21/drivers/video/mq200/mq_skeleton.c
+--- linux-2.6.21.vanilla/drivers/video/mq200/mq_skeleton.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/video/mq200/mq_skeleton.c 2007-05-01 17:02:17.000000000 +0200
@@ -0,0 +1,398 @@
+/*
+ * Author: Holger Hans Peter Freyther
diff --git a/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-and-gpio_keys.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-and-gpio_keys.patch
new file mode 100644
index 0000000000..90ce4cb009
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-serial-and-gpio_keys.patch
@@ -0,0 +1,194 @@
+diff -uNr linux-2.6.21.vanilla/arch/arm/mach-sa1100/simpad.c linux-2.6.21/arch/arm/mach-sa1100/simpad.c
+--- linux-2.6.21.vanilla/arch/arm/mach-sa1100/simpad.c 2007-05-01 16:40:44.000000000 +0200
++++ linux-2.6.21/arch/arm/mach-sa1100/simpad.c 2007-05-01 19:23:29.000000000 +0200
+@@ -1,5 +1,14 @@
+ /*
+ * linux/arch/arm/mach-sa1100/simpad.c
++ *
++ * 2007/04/11 mrdata:
++ * - insert simpad_uart_set_mctrl()
++ * simpad_uart_get_mctrl()
++ * - internal RS232/DECT/Bluetooth
++ * works again (based on 2.4 simpad-serial.patch)
++ *
++ * 2007/04/12 Bernhard Guillon:
++ * -added gpio_keys (based on h3000.c from hh.org)
+ */
+
+ #include <linux/module.h>
+@@ -27,6 +36,8 @@
+
+ #include <linux/serial_core.h>
+ #include <linux/ioport.h>
++#include <linux/input.h>
++#include <linux/gpio_keys.h>
+ #include <asm/io.h>
+
+ #include "generic.h"
+@@ -55,6 +66,7 @@
+ *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
+ }
+
++EXPORT_SYMBOL(get_cs3_shadow);
+ EXPORT_SYMBOL(set_cs3_bit);
+ EXPORT_SYMBOL(clear_cs3_bit);
+
+@@ -73,23 +85,71 @@
+ };
+
+
++static void simpad_uart_set_mctrl(struct uart_port *port, u_int mctrl)
++{
++ if (port->mapbase == _Ser1UTCR0) {
++ /* internal serial port (ttySA1, DECT/Bluetooth) */
++ if (mctrl & TIOCM_RTS) GPCR = GPIO_UART1_RTS;
++ else GPSR = GPIO_UART1_RTS;
++
++ if (mctrl & TIOCM_DTR) GPCR = GPIO_UART1_DTR;
++ else GPSR = GPIO_UART1_DTR;
++ }
++
++ else if (port->mapbase == _Ser3UTCR0) {
++ /* external serial port (ttySA0, RS232) */
++ if (mctrl & TIOCM_RTS) GPCR = GPIO_UART3_RTS;
++ else GPSR = GPIO_UART3_RTS;
++
++ if (mctrl & TIOCM_DTR) GPCR = GPIO_UART3_DTR;
++ else GPSR = GPIO_UART3_DTR;
++ }
++}
++
++
++static u_int simpad_uart_get_mctrl(struct uart_port *port)
++{
++ u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
++
++ if (port->mapbase == _Ser1UTCR0) {
++ /* internal serial port (ttySA1, DECT/Bluetooth) */
++ int gplr = GPLR;
++ if (gplr & GPIO_UART1_DCD) ret &= ~TIOCM_CD;
++ if (gplr & GPIO_UART1_CTS) ret &= ~TIOCM_CTS;
++ if (gplr & GPIO_UART1_DSR) ret &= ~TIOCM_DSR;
++ }
++
++ else if (port->mapbase == _Ser3UTCR0) {
++ /* external serial port (ttySA0, RS232) */
++ int gplr = GPLR;
++ if (gplr & GPIO_UART3_DCD) ret &= ~TIOCM_CD;
++ if (gplr & GPIO_UART3_CTS) ret &= ~TIOCM_CTS;
++ if (gplr & GPIO_UART3_DSR) ret &= ~TIOCM_DSR;
++ }
++ return ret;
++}
++
++
+ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
+ {
+- if (port->mapbase == (u_int)&Ser1UTCR0) {
+- if (state)
+- {
+- clear_cs3_bit(RS232_ON);
+- clear_cs3_bit(DECT_POWER_ON);
+- }else
+- {
+- set_cs3_bit(RS232_ON);
+- set_cs3_bit(DECT_POWER_ON);
+- }
+- }
++ if (port->mapbase == (u_int)&Ser3UTCR0) {
++ if (state)
++ {
++ clear_cs3_bit(RS232_ON);
++ /* clear_cs3_bit(DECT_POWER_ON); */
++ }else
++ {
++ set_cs3_bit(RS232_ON);
++ /* set_cs3_bit(DECT_POWER_ON); */
++ }
++ }
+ }
+
++
+ static struct sa1100_port_fns simpad_port_fns __initdata = {
+- .pm = simpad_uart_pm,
++ .set_mctrl = simpad_uart_set_mctrl,
++ .get_mctrl = simpad_uart_get_mctrl,
++ .pm = simpad_uart_pm,
+ };
+
+
+@@ -150,7 +210,7 @@
+ sa1100_register_uart(0, 3); /* serial interface */
+ sa1100_register_uart(1, 1); /* DECT */
+
+- // Reassign UART 1 pins
++ /* Reassign UART 1 pins */
+ GAFR |= GPIO_UART_TXD | GPIO_UART_RXD;
+ GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15;
+ GPDR &= ~GPIO_UART_RXD;
+@@ -173,7 +233,7 @@
+
+ static void simpad_power_off(void)
+ {
+- local_irq_disable(); // was cli
++ local_irq_disable(); /* was cli */
+ set_cs3(0x800); /* only SD_MEDIAQ */
+
+ /* disable internal oscillator, float CS lines */
+@@ -197,19 +257,42 @@
+
+
+ /*
++ * gpio_keys
++*/
++
++static struct gpio_keys_button simpad_button_table[] = {
++ { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 0, "power button" },
++};
++
++static struct gpio_keys_platform_data simpad_keys_data = {
++ .buttons = simpad_button_table,
++ .nbuttons = ARRAY_SIZE(simpad_button_table),
++};
++
++static struct platform_device simpad_keys = {
++ .name = "gpio-keys",
++ .dev = {
++ .platform_data = &simpad_keys_data,
++ },
++};
++
++
++/*
+ * MediaQ Video Device
+ */
++
+ static struct platform_device simpad_mq200fb = {
+ .name = "simpad-mq200",
+ .id = 0,
+ };
+
++
+ static struct platform_device *devices[] __initdata = {
+- &simpad_mq200fb
++ &simpad_keys,
++ &simpad_mq200fb,
+ };
+
+
+-
+ static int __init simpad_init(void)
+ {
+ int ret;
+diff -uNr linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad.h linux-2.6.21/include/asm-arm/arch-sa1100/simpad.h
+--- linux-2.6.21.vanilla/include/asm-arm/arch-sa1100/simpad.h 2007-05-01 16:40:51.000000000 +0200
++++ linux-2.6.21/include/asm-arm/arch-sa1100/simpad.h 2007-05-01 19:22:45.000000000 +0200
+@@ -12,7 +12,7 @@
+ #define __ASM_ARCH_SIMPAD_H
+
+
+-#define GPIO_UART1_RTS GPIO_GPIO14
++#define GPIO_UART1_RTS GPIO_GPIO9
+ #define GPIO_UART1_DTR GPIO_GPIO7
+ #define GPIO_UART1_CTS GPIO_GPIO8
+ #define GPIO_UART1_DCD GPIO_GPIO23
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch
index 7cf2f28c89..ff2f50566c 100644
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch
+++ b/packages/linux/linux/simpad/linux-2.6.21-SIMpad-ucb1x00-switches.patch
@@ -1,7 +1,7 @@
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/Kconfig linux-2.6.20/drivers/mfd/Kconfig
---- linux-2.6.20.vanilla/drivers/mfd/Kconfig 2007-02-10 19:01:56.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/Kconfig 2007-02-28 16:36:01.000000000 +0100
-@@ -23,4 +23,7 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/Kconfig linux-2.6.21/drivers/mfd/Kconfig
+--- linux-2.6.21.vanilla/drivers/mfd/Kconfig 2007-05-01 16:40:45.000000000 +0200
++++ linux-2.6.21/drivers/mfd/Kconfig 2007-05-01 16:55:38.000000000 +0200
+@@ -37,4 +37,7 @@
tristate "Touchscreen interface support"
depends on MCP_UCB1200 && INPUT
@@ -9,10 +9,10 @@ diff -uNr linux-2.6.20.vanilla/drivers/mfd/Kconfig linux-2.6.20/drivers/mfd/Kcon
+ tristate "SIMpad Switches support"
+ depends on MCP_UCB1200 && INPUT
endmenu
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/Makefile linux-2.6.20/drivers/mfd/Makefile
---- linux-2.6.20.vanilla/drivers/mfd/Makefile 2007-02-10 19:01:56.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/Makefile 2007-02-28 16:36:01.000000000 +0100
-@@ -6,7 +6,7 @@
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/Makefile linux-2.6.21/drivers/mfd/Makefile
+--- linux-2.6.21.vanilla/drivers/mfd/Makefile 2007-05-01 16:40:45.000000000 +0200
++++ linux-2.6.21/drivers/mfd/Makefile 2007-05-01 16:55:38.000000000 +0200
+@@ -8,7 +8,7 @@
obj-$(CONFIG_MCP_SA11X0) += mcp-sa11x0.o
obj-$(CONFIG_MCP_UCB1200) += ucb1x00-core.o
obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-ts.o
@@ -21,9 +21,9 @@ diff -uNr linux-2.6.20.vanilla/drivers/mfd/Makefile linux-2.6.20/drivers/mfd/Mak
ifeq ($(CONFIG_SA1100_ASSABET),y)
obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
endif
-diff -uNr linux-2.6.20.vanilla/drivers/mfd/ucb1x00-switches.c linux-2.6.20/drivers/mfd/ucb1x00-switches.c
---- linux-2.6.20.vanilla/drivers/mfd/ucb1x00-switches.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.20/drivers/mfd/ucb1x00-switches.c 2007-02-28 16:36:43.000000000 +0100
+diff -uNr linux-2.6.21.vanilla/drivers/mfd/ucb1x00-switches.c linux-2.6.21/drivers/mfd/ucb1x00-switches.c
+--- linux-2.6.21.vanilla/drivers/mfd/ucb1x00-switches.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.21/drivers/mfd/ucb1x00-switches.c 2007-05-01 16:55:38.000000000 +0200
@@ -0,0 +1,162 @@
+/*
+ * linux/drivers/mfd/ucb1x00-switches.c
diff --git a/packages/linux/linux/simpad/linux-2.6.21-pcmcia-device-to-platform-driver.patch b/packages/linux/linux/simpad/linux-2.6.21-pcmcia-device-to-platform-driver.patch
new file mode 100644
index 0000000000..e6233cbe30
--- /dev/null
+++ b/packages/linux/linux/simpad/linux-2.6.21-pcmcia-device-to-platform-driver.patch
@@ -0,0 +1,54 @@
+diff -uNr linux-2.6.21.vanilla/drivers/pcmcia/sa1100_generic.c linux-2.6.21/drivers/pcmcia/sa1100_generic.c
+--- linux-2.6.21.vanilla/drivers/pcmcia/sa1100_generic.c 2007-05-01 16:40:46.000000000 +0200
++++ linux-2.6.21/drivers/pcmcia/sa1100_generic.c 2007-05-01 19:38:05.000000000 +0200
+@@ -28,6 +28,9 @@
+ the provisions above, a recipient may use your version of this
+ file under either the MPL or the GPL.
+
++ 2007 mrnice: added thesings changes from device_driver
++ to platform_driver - many thx to thesing
++
+ ======================================================================*/
+
+ #include <linux/module.h>
+@@ -81,13 +84,15 @@
+ return ret;
+ }
+
+-static struct device_driver sa11x0_pcmcia_driver = {
+- .probe = sa11x0_drv_pcmcia_probe,
+- .remove = soc_common_drv_pcmcia_remove,
+- .name = "sa11x0-pcmcia",
+- .bus = &platform_bus_type,
+- .suspend = pcmcia_socket_dev_suspend,
+- .resume = pcmcia_socket_dev_resume,
++static struct platform_driver sa11x0_pcmcia_driver = {
++ .driver = {
++ .name = "sa11x0-pcmcia",
++ .probe = sa11x0_drv_pcmcia_probe,
++ .remove = soc_common_drv_pcmcia_remove,
++ .suspend= pcmcia_socket_dev_suspend,
++ .resume = pcmcia_socket_dev_resume,
++ //.bus = &platform_bus_type,
++ },
+ };
+
+ /* sa11x0_pcmcia_init()
+@@ -100,7 +105,7 @@
+ */
+ static int __init sa11x0_pcmcia_init(void)
+ {
+- return driver_register(&sa11x0_pcmcia_driver);
++ return platform_driver_register(&sa11x0_pcmcia_driver);
+ }
+
+ /* sa11x0_pcmcia_exit()
+@@ -110,7 +115,7 @@
+ */
+ static void __exit sa11x0_pcmcia_exit(void)
+ {
+- driver_unregister(&sa11x0_pcmcia_driver);
++ platform_driver_unregister(&sa11x0_pcmcia_driver);
+ }
+
+ MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
diff --git a/packages/linux/linux_2.6.20.bb b/packages/linux/linux_2.6.20.bb
index 178a44dd14..80f6c71442 100644
--- a/packages/linux/linux_2.6.20.bb
+++ b/packages/linux/linux_2.6.20.bb
@@ -1,19 +1,11 @@
DESCRIPTION = "Linux Kernel"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r5"
+PR = "r6"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://defconfig"
-SRC_URI_append_progear = " \
- file://progear_bl-r6.patch;patch=1 \
- "
-SRC_URI_append_simpad = "\
- file://linux-2.6.20.SIMpad-battery.patch;patch=1\
- file://linux-2.6.20.SIMpad-mq200.patch;patch=1 \
- file://linux-2.6.20.SIMpad-ucb1x00-switches.patch;patch=1 \
- "
SRC_URI_append_n2100 = "\
file://n2100-r8169-parity.patch;patch=1 \
file://rtc-rs5c372-n2100.patch;patch=1 \
@@ -22,7 +14,6 @@ SRC_URI_append_n2100 = "\
inherit kernel
KERNEL_IMAGETYPE = "bzImage"
-KERNEL_IMAGETYPE_simpad = "zImage"
KERNEL_IMAGETYPE_n2100 = "zImage"
do_configure_prepend() {
diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb
new file mode 100644
index 0000000000..d801f88507
--- /dev/null
+++ b/packages/linux/linux_2.6.21.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Linux Kernel"
+SECTION = "kernel"
+LICENSE = "GPL"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://defconfig"
+
+SRC_URI_append_simpad = "\
+ file://linux-2.6.21-SIMpad-cs3-simpad.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-mq200.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-serial-and-gpio_keys.patch;patch=1 \
+ file://linux-2.6.21-SIMpad-ucb1x00-switches.patch;patch=1 \
+ file://linux-2.6.21-pcmcia-device-to-platform-driver.patch;patch=1 \
+ "
+
+inherit kernel
+
+KERNEL_IMAGETYPE_simpad = "zImage"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
+