summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Guillon <Bernhard.Guillon@opensimpad.org>2007-04-22 15:43:50 +0000
committerMarcin Juszkiewicz <hrw@openembedded.org>2007-04-22 15:43:50 +0000
commit5899bca83b0cd4e217fd175cabef47ae7acec526 (patch)
treee2b4d916a1e665a4ba2d74b71a99d14adf7a8137
parent5c8d92d9090cac0c44bdafd549911f4dd29ac85f (diff)
linux: update Simpad patchset - close #2073
-rw-r--r--packages/linux/linux/simpad/defconfig99
-rw-r--r--packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch (renamed from packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch)681
-rw-r--r--packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch (renamed from packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch)0
-rw-r--r--packages/linux/linux_2.6.20.bb9
4 files changed, 698 insertions, 91 deletions
diff --git a/packages/linux/linux/simpad/defconfig b/packages/linux/linux/simpad/defconfig
index a718a46989..2115d30a2c 100644
--- a/packages/linux/linux/simpad/defconfig
+++ b/packages/linux/linux/simpad/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.20
-# Mon Feb 12 16:35:21 2007
+# Mon Apr 2 11:51:54 2007
#
CONFIG_ARM=y
# CONFIG_GENERIC_TIME is not set
@@ -71,8 +71,9 @@ CONFIG_BASE_SMALL=0
# Loadable module support
#
CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -176,7 +177,7 @@ CONFIG_ISA=y
# PCCARD (PCMCIA/CardBus) support
#
CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA_DEBUG=y
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
CONFIG_PCMCIA_IOCTL=y
@@ -248,8 +249,9 @@ CONFIG_BINFMT_MISC=m
# Power management options
#
CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+CONFIG_DISABLE_CONSOLE_SUSPEND=y
# CONFIG_PM_SYSFS_DEPRECATED is not set
CONFIG_APM=y
@@ -401,7 +403,12 @@ 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 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_WIRELESS_EXT=y
#
@@ -540,7 +547,31 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
#
# ATA/ATAPI/MFM/RLL support
#
-# CONFIG_IDE is not set
+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
#
# SCSI device support
@@ -805,6 +836,12 @@ 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
@@ -885,7 +922,13 @@ CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+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
@@ -1151,7 +1194,43 @@ CONFIG_DEBUG_LL=y
#
# Cryptographic options
#
-# CONFIG_CRYPTO is not set
+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
+#
#
# Library routines
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch b/packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch
index 6b315de79d..841cf4566c 100644
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch
+++ b/packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch
@@ -1,7 +1,7 @@
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-02-10 19:02:14.000000000 +0100
-+++ linux-2.6.20/drivers/video/Kconfig 2007-02-11 16:39:54.000000000 +0100
-@@ -1147,6 +1147,18 @@
+--- 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.
@@ -12,17 +12,14 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/Kconfig linux-2.6.20/drivers/video/
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+ help
-+ This is a MQ200 driver tested only on Simens SIMpads. You may need to
-+ boot your SIMpad with a 2.4 SIMpad Kernel first in order to use this
-+ driver. This is also needed if the SIMpad lost his power
-+ connection (empty accu or accu disconnect).
++ This is a MQ200 driver tested only on Siemens SIMpads.
+
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-02-10 19:02:14.000000000 +0100
-+++ linux-2.6.20/drivers/video/Makefile 2007-02-11 16:40:07.000000000 +0100
+--- 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 @@
obj-$(CONFIG_FB_PM2) += pm2fb.o
obj-$(CONFIG_FB_PM3) += pm3fb.o
@@ -31,22 +28,245 @@ 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
+ 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
+ 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 @@
++/*
++ * GPLv2 <zecke@handhelds.org
++ *
++ * Implementation of the backlight_driver for
++ * the mq200 framebuffer
++ *
++ * 2007/03/17 mrdata:
++ * - small changes simpad_bl_get_brightness()
++ * simpad_bl_set_brightness()
++ * - new function simpad_bl_update_status()
++ * - changed struct backlight_properties simpad_bl_props()
++ * to new one
++ * - changed __init simpad_bl_init() -> backlight_device_register
++ *
++ * 2007/03/24 mrdata
++ * - added .brightness=127 in
++ * struct backlight_properties simpad_bl_props()
++ */
++#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 REGISTER_BASE 0xf2e00000
++
++
++static int simpad_bl_get_brightness(struct backlight_device *dev)
++{
++ u32 pwmctl;
++
++ pwmctl = readl(FP0FR(REGISTER_BASE));
++ pwmctl &= ~SIMPAD_BACKLIGHT_MASK;
++ pwmctl = pwmctl >> 8;
++ pwmctl = MAX_BRIGHT - pwmctl;
++
++ return pwmctl;
++}
++
++static int simpad_bl_set_brightness(int bright)
++{
++ union fp0fr fp0fr;
++ unsigned long dutyCycle, pwmcontrol;
++
++ if(bright > MAX_BRIGHT)
++ bright = MAX_BRIGHT;
++
++ /*
++ * Determine dutyCycle.
++ * Note: the lower the value, the brighter the display!
++ */
++
++ dutyCycle = MAX_BRIGHT - bright;
++
++ /*
++ *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_update_status(struct backlight_device *dev)
++{
++ return simpad_bl_set_brightness(dev->props->brightness);
++}
++
++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 struct backlight_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 void __exit simpad_bl_exit(void) {
++ backlight_device_unregister(simpad_bl_device);
++}
++
++
++module_init(simpad_bl_init);
++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 @@
++/*
++ * GPLv2 <zecke@handhelds.org
++ *
++ * Implementation of the lcd_driver for the mq200 framebuffer
++ *
++ * 2007/03/24 mrdata:
++ * - added simpad_lcd_get_contrast()
++ * - added simpad_lcd_set_contrast()
++ * - modify struct lcd_properties simpad_lcd_props
++ */
++#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);
++
++#define UNUSED(x) x=x
++
++static int simpad_lcd_get_power(struct lcd_device* dev)
++{
++ UNUSED(dev);
++
++ return (get_cs3_shadow() & DISPLAY_ON) ? 0 : 4;
++}
++
++static int simpad_lcd_set_power(struct lcd_device* dev, int power)
++{
++ UNUSED(dev);
++
++ if( power == 4 )
++ clear_cs3_bit(DISPLAY_ON);
++ else
++ set_cs3_bit(DISPLAY_ON);
++
++ return 0;
++}
++
++static int simpad_lcd_get_contrast(struct lcd_device* dev)
++{
++ UNUSED(dev);
++
++ return 0;
++}
++
++static int simpad_lcd_set_contrast(struct lcd_device* dev, int contrast)
++{
++ UNUSED(dev);
++
++ UNUSED(contrast);
++
++ return 0;
++}
++
++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
++};
++
++static struct lcd_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 void __exit simpad_lcd_exit(void) {
++ lcd_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-02-11 16:41:44.000000000 +0100
++++ linux-2.6.20/drivers/video/mq200/Makefile 2007-03-28 22:53:44.000000000 +0200
@@ -0,0 +1,6 @@
+# Makefile for mq200 video driver
+# 4 Aug 2003, Holger Hans Peter Freyther
-+# 2 Jan 2007, mr nice
++#
+
+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-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,893 @@
++++ linux-2.6.20/drivers/video/mq200/mq200_data.h 2007-03-28 22:53:44.000000000 +0200
+@@ -0,0 +1,1120 @@
+/*
+ * From ucLinux mq200fb.c and mq200fb.h
++ *
++ * 2007/03/11 mrdata:
++ * insert registers for graphics controller 2 module
+ */
+
+#ifndef __MQ200_FB_H__
@@ -154,8 +374,10 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/dri
+ start address */
+#define GC0DR(addr) (addr + GC_OFFSET + 0x34) /* alternate window 1
+ start address */
-+#define GC0ER(addr) (addr + GC_OFFSET + 0x38) /* window 1 stride */
-+#define GC0FR(addr) (addr + GC_OFFSET + 0x3c) /* reserved */
++#define GC0ER(addr) (addr + GC_OFFSET + 0x38) /* alternate window 1
++ stride */
++#define GC0FR(addr) (addr + GC_OFFSET + 0x3c) /* alternate window 1
++ line size */
+#define GC10R(addr) (addr + GC_OFFSET + 0x40) /* hardware cursor 1
+ position */
+#define GC11R(addr) (addr + GC_OFFSET + 0x44) /* hardware cursor 1
@@ -165,6 +387,48 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/dri
+ foreground color */
+#define GC13R(addr) (addr + GC_OFFSET + 0x4c) /* hardware cursor 1
+ background color */
++
++/* graphics controller 2 module */
++#define GC20R(addr) (addr + GC_OFFSET + 0x80) /* graphics controller 2
++ control */
++#define GC21R(addr) (addr + GC_OFFSET + 0x84) /* graphics controller
++ CRC control */
++#define GC22R(addr) (addr + GC_OFFSET + 0x88) /* horizontal display 2
++ control */
++#define GC23R(addr) (addr + GC_OFFSET + 0x8c) /* vertical display 2
++ control */
++#define GC24R(addr) (addr + GC_OFFSET + 0x90) /* horizontal sync 2
++ control */
++#define GC25R(addr) (addr + GC_OFFSET + 0x94) /* vertical sync 2
++ control */
++#define GC27R(addr) (addr + GC_OFFSET + 0x9c) /* vertical display 2
++ count */
++#define GC28R(addr) (addr + GC_OFFSET + 0xa0) /* horizontal window 2
++ control */
++#define GC29R(addr) (addr + GC_OFFSET + 0xa4) /* vertical window 2
++ control */
++#define GC2AR(addr) (addr + GC_OFFSET + 0xa8) /* alternate horizontal
++ window 2 control */
++#define GC2BR(addr) (addr + GC_OFFSET + 0xac) /* alternate vertical
++ window 2 control */
++#define GC2CR(addr) (addr + GC_OFFSET + 0xb0) /* window 2
++ start address */
++#define GC2DR(addr) (addr + GC_OFFSET + 0xb4) /* alternate window 2
++ start address */
++#define GC2ER(addr) (addr + GC_OFFSET + 0xb8) /* alternate window 2
++ stride */
++#define GC2FR(addr) (addr + GC_OFFSET + 0xbc) /* alternate window 2
++ line size */
++#define GC30R(addr) (addr + GC_OFFSET + 0xc0) /* hardware cursor 2
++ position */
++#define GC31R(addr) (addr + GC_OFFSET + 0xc4) /* hardware cursor 2
++ start address and
++ offset */
++#define GC32R(addr) (addr + GC_OFFSET + 0xc8) /* hardware cursor 2
++ foreground color */
++#define GC33R(addr) (addr + GC_OFFSET + 0xcc) /* hardware cursor 2
++ background color */
++
+/* graphics engine */
+#define ROP_SRCCOPY 0xCC /* dest = source */
+#define ROP_SRCPAINT 0xEE /* dest = source OR dest */
@@ -671,6 +935,186 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq200_data.h linux-2.6.20/dri
+ u32 whole;
+};
+
++
++/* graphics controller 2 register */
++union gc20r {
++ struct {
++ u32 ctl_enbl :1; /* Controller 2 Enable */
++ u32 hc_reset :1; /* Horizontal Counter 2 Reset */
++ u32 vc_reset :1; /* Vertical Counter 2 Reset */
++ u32 iwin_enbl :1; /* Image Window 2 Enable */
++ u32 gcd :4; /* Graphics Color Depth (GCD) */
++
++ u32 hc_enbl :1; /* Hardware Cursor 2 Enable */
++ u32 reserved_1 :2;
++ u32 aiwin_enbl :1; /* Alternate Image Window Enable */
++ u32 agcd :4; /* Alternate Graphics Color Depth (AGCD) */
++
++ u32 g2rclk_src :2; /* G2RCLK Source */
++ u32 tm0 :1; /* Test Mode 0 */
++ u32 tm1 :1; /* Test Mode 1 */
++ u32 fd :3; /* G2MCLK First Clock Divisor (FD1) */
++ u32 reserved_2 :1;
++
++ u32 sd :8; /* G2MCLK Second Clock Divisor (SD1) */
++ } part;
++ u32 whole;
++};
++
++/* graphics controller CRC control */
++union gc21r {
++ struct {
++ u32 crc_enbl :1; /* CRC enable */
++ u32 vsync_wait :1; /* CRC input data control waitime of VSYNC */
++ u32 crc_o_sel :2; /* CRC output select */
++ u32 reserved_1 :4;
++ u32 crc_result :22; /* CRC result (read only) */
++ u32 reserved_2 :2;
++ } part;
++ u32 whole;
++};
++
++/* horizontal display 2 control */
++union gc22r {
++ struct {
++ u32 hd2t :12; /* horizontal display 2 total */
++ u32 reserved_1 :4;
++
++ u32 hd2e :12; /* horizontal display 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 2 control */
++union gc23r {
++ struct {
++ u32 vd2t :12; /* vertical display 2 total */
++ u32 reserved_1 :4;
++
++ u32 vd2e :12; /* vertical display 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* horizontal sync 2 control */
++union gc24r {
++ struct {
++ u32 hs2s :12; /* horizontal sync 2 start */
++ u32 reserved_1 :4;
++
++ u32 hs2e :12; /* horizontal sync 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical sync 2 control */
++union gc25r {
++ struct {
++ u32 vs2s :12; /* vertical sync 2 start */
++ u32 reserved_1 :4;
++
++ u32 vs2e :12; /* vertical sync 2 end */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* vertical display 2 count */
++union gc27r {
++ struct {
++ u32 vd_cnt :12; /* vertical display 2 count */
++ u32 reverved_1 :20;
++ } part;
++ u32 whole;
++};
++
++/* horizontal window 2 control */
++union gc28r {
++ struct {
++ u32 hw2s :12; /* horizontal window 2 start (HW2S) */
++ u32 reserved_1 :4;
++
++ u32 hw2w :12; /* horizontal window 2 width (HW2W) */
++ u32 w2ald :4; /* window 2 additional line data */
++ } part;
++ u32 whole;
++};
++
++/* vertical window 2 control */
++union gc29r {
++ struct {
++ u32 vw2s :12; /* vertical window 2 start */
++ u32 reserved_1 :4;
++ u32 vw2h :12; /* vertical window 2 height */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* window 2 start address */
++union gc2cr {
++ struct {
++ u32 w2sa :21; /* window 2 start address */
++ u32 reserved_1 :11;
++ } part;
++ u32 whole;
++};
++
++/* window 2 stride */
++union gc2er {
++ struct {
++ s16 w2st; /* window 2 stride */
++ s16 aw2st; /* alternate window 2 stride */
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 position */
++union gc30r {
++ struct {
++ u32 hc2s :12; /* horizontal cursor 2 start */
++ u32 reserved_1 :4;
++ u32 vc2s :12; /* vertical cursor 2 start */
++ u32 reserved_2 :4;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 start address and offset */
++union gc31r {
++ struct {
++ u32 hc2sa :11; /* hardware cursor 2 start address */
++ u32 reserved_1 :5;
++ u32 hc2o :6; /* horizontal cursor 2 offset */
++ u32 reserved_2 :2;
++ u32 vc2o :6; /* vertical cursor 2 offset */
++ u32 reserved_3 :2;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 foreground color */
++union gc32r {
++ struct {
++ u32 hc2fc :24; /* hardware cursor 2 foreground color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++/* hardware cursor 2 background color */
++union gc33r {
++ struct {
++ u32 hc2bc :24; /* hardware cursor 2 background color */
++ u32 reserved_1 :8;
++ } part;
++ u32 whole;
++};
++
++
+/* primary drawing command register */
+union ge00r {
+ struct {
@@ -940,8 +1384,8 @@ 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-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,427 @@
++++ linux-2.6.20/drivers/video/mq200/mq_external.c 2007-03-28 22:53:44.000000000 +0200
+@@ -0,0 +1,513 @@
+/*
+ * Copyright (C) 2005 Holger Hans Peter Freyther
+ *
@@ -950,6 +1394,10 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ * linux/drivers/video/mq200fb.c -- MQ-200 for a frame buffer device
+ * based on linux/driver/video/pm2fb.c
+ *
++ * 2007/03/11 mrdata:
++ * bug found in gc1_reset(), renaming to gc1_gc2_reset()
++ * extend mq200_external_ondisplay() -> LCD for GC2 and CRT for GC1
++ *
+ * Copyright (C) 2000 Lineo, Japan
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
@@ -962,6 +1410,8 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+#include <linux/delay.h>
+#include <linux/spinlock.h>
+
++#include <asm/hardware.h>
++
+#include "mq200_data.h"
+
+
@@ -980,6 +1430,7 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+{
+ int i;
+ writel(state, PMCSR(register_base));
++ mdelay(300);
+ for (i = 1; ; i++) {
+ udelay(100);
+ if ((readl(PMCSR(register_base)) & 0x3) == state) {
@@ -1000,13 +1451,12 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ /* Reset First */
+ dc00r.whole = DC_RESET;
+ writel(dc00r.whole, DC00R(register_base));
-+ udelay(10);
-+
++ mdelay(100);
+
+ dc00r.whole = 0xEF2082A;
+ writel(dc00r.whole, DC00R(register_base));
-+ udelay(5);
-+ PRINTK(CHIPNAME ": DC00R = %xx\n", readl(DC00R(register_base)));
++ mdelay(300);
++ PRINTK(CHIPNAME ": DC00R = 0x%08X\n", readl(DC00R(register_base)));
+}
+
+
@@ -1025,14 +1475,14 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ /* MIU interface control 1 */
+ mm00r.whole = 0x4;
+ writel(mm00r.whole, MM00R(register_base));
-+ udelay(5);
++ mdelay(50);
+ writel(0, MM00R(register_base));
-+ udelay(50);
++ mdelay(50);
+
+ /* MIU interface control 2
+ * o PLL 1 output is used as memory clock source.
+ */
-+ mm01r.whole = 0x4143e086;
++ mm01r.whole = 0x4143e086;
+ writel(mm01r.whole, MM01R(register_base));
+
+ /* memory interface control 3 */
@@ -1046,7 +1496,7 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ /* memory interface control 4 */
+ mm03r.whole = 0x1;
+ writel(mm03r.whole, MM03R(register_base));
-+ mdelay(10);
++ mdelay(50);
+
+ /* MIU interface control 1 */
+ mm00r.whole = 0x3;
@@ -1089,7 +1539,6 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ fp0fr.whole = 0xA16c44;
+ writel(fp0fr.whole, FP0FR(addr));
+
-+
+ /* Set them again */
+ fp02r.whole = 0x0;
+ writel(fp02r.whole, FP02R(addr));
@@ -1108,8 +1557,6 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ union pm00r pm00r;
+ union pm01r pm01r;
+ union pm02r pm02r;
-+// union pm06r pm06r;
-+// union pm07r pm07r;
+
+ /* power management miscellaneous control
+ * o GE is driven by PLL 1 clock.
@@ -1124,23 +1571,14 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ /* D2 state control */
+ pm02r.whole = 0x271;
+ writel(pm02r.whole, PM02R(register_base));
-+
-+#if 0
-+ /* PLL 2 programming */
-+ pm06r.whole = 0xE90830;
-+ writel(pm06r.whole, PM06R(register_base));
-+
-+ /* PLL 3 programming */
-+ pm07r.whole = 0xE90830;
-+ writel(pm07r.whole, PM07R(register_base));
-+#endif
+}
+
+/****
-+ * initialize graphics controller 1.
++ * initialize graphics controller 1
++ * and graphics controller 2
+ */
+static void
-+gc1_reset(unsigned long register_base, spinlock_t *lock )
++gc1_gc2_reset(unsigned long register_base, spinlock_t *lock )
+{
+ unsigned long flags;
+ union gc00r gc00r;
@@ -1151,16 +1589,50 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ union gc05r gc05r;
+ union gc08r gc08r;
+ union gc09r gc09r;
-+// union gc0er gc0er;
-+// union gc11r gc11r;
++ union gc0cr gc0cr;
++ union gc0er gc0er;
++ union gc20r gc20r;
++ union gc22r gc22r;
++ union gc23r gc23r;
++ union gc24r gc24r;
++ union gc25r gc25r;
++ union gc28r gc28r;
++ union gc29r gc29r;
++ union gc2cr gc2cr;
++ union gc2er gc2er;
++
+ union pm00r pm00r;
+ union pm06r pm06r;
++ union pm06r pm07r;
+
+ spin_lock_irqsave(lock, flags);
+
-+ /* graphics controller CRT control */
-+ gc01r.whole = 0x800;
-+ writel(gc01r.whole, GC01R(register_base));
++ /* alternate window 1 stride */
++ gc0er.whole = 0x640;
++ writel(gc0er.whole, GC0ER(register_base));
++
++ /* image window 1 start address */
++ gc0cr.whole = 0x0;
++ writel(gc0cr.whole, GC0CR(register_base));
++
++ /* alternate window 2 stride */
++ gc2er.whole = 0x640;
++ writel(gc0er.whole, GC2ER(register_base));
++
++ /* image window 2 start address */
++ gc2cr.whole = 0x0;
++ writel(gc2cr.whole, GC2CR(register_base));
++
++ /* read PM Register */
++ pm00r.whole = readl(PM00R(register_base));
++
++ /* horizontal window 1 control */
++ gc08r.whole = 0x131f0000;
++ writel(gc08r.whole, GC08R(register_base));
++
++ /* vertical window 1 control */
++ gc09r.whole = 0x12570000;
++ writel(gc09r.whole, GC09R(register_base));
+
+ /* horizontal display 1 control */
+ gc02r.whole = 0x320041e;
@@ -1178,13 +1650,20 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ gc05r.whole = 0x25d0259;
+ writel(gc05r.whole, GC05R(register_base));
+
-+ /* horizontal window 1 control */
-+ gc08r.whole = 0x131f0000;
-+ writel(gc08r.whole, GC08R(register_base));
++ /* graphics controller CRT control */
++ gc01r.whole = 0x800;
++ writel(gc01r.whole, GC01R(register_base));
+
-+ /* vertical window 1 control */
-+ gc09r.whole = 0x2570000;
-+ writel(gc09r.whole, GC09R(register_base));
++ /* PLL 2 programming */
++ pm06r.whole = 0xE90830;
++ writel(pm06r.whole, PM06R(register_base));
++
++ /* graphics controller 1 register
++ * o GC1 clock source is PLL 2.
++ * o hardware cursor is disabled.
++ */
++ gc00r.whole = 0x10000C8 | 0x20000;
++ writel(gc00r.whole, GC00R(register_base));
+
+#if 0
+ /* alternate horizontal window 1 control */
@@ -1222,23 +1701,50 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ writel(0x00000000, GC13R(register_base));
+#endif
+
-+ /* PLL 2 programming */
-+ pm06r.whole = 0xE90830;
-+ writel(pm06r.whole, PM06R(register_base));
++ /* horizontal window 2 control */
++ gc28r.whole = 0x31f0000;
++ writel(gc28r.whole, GC28R(register_base));
+
++ /* vertical window 2 control */
++ gc29r.whole = 0x2570000;
++ writel(gc29r.whole, GC29R(register_base));
+
-+ /* graphics controller 1 register
-+ * o GC1 clock source is PLL 2.
++ /* horizontal display 2 control */
++ gc22r.whole = 0x320041e;
++ writel(gc22r.whole, GC22R(register_base));
++
++ /* vertical display 2 control */
++ gc23r.whole = 0x2570273;
++ writel(gc23r.whole, GC23R(register_base));
++
++ /* horizontal sync 2 control */
++ gc24r.whole = 0x3c70347;
++ writel(gc24r.whole, GC24R(register_base));
++
++ /* vertical sync 2 control */
++ gc25r.whole = 0x25d0259;
++ writel(gc25r.whole, GC25R(register_base));
++
++ /* graphics controller CRT control */
++ gc01r.whole = 0x800;
++ writel(gc01r.whole, GC01R(register_base));
++
++ /* PLL 3 programming */
++ pm07r.whole = 0xE90830;
++ writel(pm07r.whole, PM07R(register_base));
++
++ /* graphics controller 2 register
++ * o GC2 clock source is PLL 3.
+ * o hardware cursor is disabled.
+ */
-+ gc00r.whole = 0x10200C8;
-+ writel(gc00r.whole, GC00R(register_base));
++ gc20r.whole = 0x10000C8 | 0x30000;
++ writel(gc20r.whole, GC20R(register_base));
+
+ /*
-+ * Enable PLL2 in the PM Register
++ * Enable PLL2 and PLL3 in the PM Register
+ */
-+ pm00r.whole = readl(PM00R(register_base));
+ pm00r.part.pll2_enbl = 0x1;
++ pm00r.part.pll3_enbl = 0x1;
+ writel(pm00r.whole, PM00R(register_base));
+
+ spin_unlock_irqrestore(lock, flags);
@@ -1288,7 +1794,6 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ writel(0, GE0BR(register_base));
+}
+
-+
+/****
+ * initialize Color Palette 1.
+ */
@@ -1302,8 +1807,6 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+}
+
+
-+
-+
+/*
+ * Below functions are called from the skeleton
+ */
@@ -1318,13 +1821,20 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ dc_reset(addr); /* device configuration */
+
+ power_state_transition(addr, 0); /* transition to D0 state */
++
+ pmu_reset(addr); /* power management unit */
++
+ miu_reset(addr); /* memory interface unit */
++
+ ge_reset(addr); /* graphics engine */
++
+ fpctrl_reset(addr); /* reset the panel settings */
-+ gc1_reset(addr, lock); /* graphics controller 1 */
++
++ gc1_gc2_reset(addr, lock); /* graphics controller 1 and 2 */
++
+ cp1_reset(addr); /* color palette 1 */
-+ mq200_external_ondisplay(addr);
++
++ mq200_external_ondisplay(addr); /* LCD and CRT */
+}
+
+void mq200_external_offdisplay(unsigned long addr)
@@ -1343,19 +1853,39 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ /*
+ * Set the framebuffer details
+ */
-+ #warning FIX HERE AS WELL
+ union gc00r gc00r;
++ union gc01r gc01r;
++ union gc20r gc20r;
+ union fp00r fp00r;
++
++ /* enable LCD for GC2 */
++ fp00r.whole = readl(FP00R(addr));
++ fp00r.whole &= 0xfffffffc;
++
++ gc20r.whole = readl(GC20R(addr));
++
++ if(!(gc20r.whole & 0x1)) {
++ gc20r.whole |= 0x1;
++ writel(gc20r.whole, GC20R(addr));
++ }
++
++ fp00r.whole |= 0x3;
++ writel(fp00r.whole, FP00R(addr));
++
++ /* enable CRT for GC1 */
+ gc00r.whole = readl(GC00R(addr));
-+ fp00r.whole = readl(FP00R(addr));
+
+ if(!(gc00r.whole & 0x1)) {
-+ gc00r.whole |= 1;
++ gc00r.whole |= 0x1;
+ writel(gc00r.whole, GC00R(addr));
+ }
++
++ gc01r.whole = readl(GC01R(addr));
++ gc01r.whole &= 0xfffffffc;
+
-+ fp00r.whole |= 0x01;
-+ writel(fp00r.whole, FP00R(addr));
++ gc01r.whole |= 0x1;
++ writel(gc01r.whole, GC01R(addr));
++
+}
+
+int mq200_external_probe(unsigned long addr)
@@ -1365,14 +1895,14 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_external.c linux-2.6.20/dr
+ return 0;
+
+ pc00r.whole = readl(PC00R(addr));
-+ printk(KERN_INFO "mq200 video driver found Vendor:%d Device:%d\n",
++ printk(KERN_INFO "mq200 video driver found Vendor: 0x%X Device: 0x%X\n",
+ 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-02-11 16:41:09.000000000 +0100
-@@ -0,0 +1,401 @@
++++ linux-2.6.20/drivers/video/mq200/mq_skeleton.c 2007-03-28 22:53:44.000000000 +0200
+@@ -0,0 +1,398 @@
+/*
+ * Author: Holger Hans Peter Freyther
+ *
@@ -1511,8 +2041,6 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.20/dr
+}
+
+
-+
-+
+static struct fb_ops mq200_ops = {
+ .owner = THIS_MODULE,
+ .fb_check_var = mq200_check_var,
@@ -1657,10 +2185,9 @@ diff -uNr linux-2.6.20.vanilla/drivers/video/mq200/mq_skeleton.c linux-2.6.20/dr
+ if(!mq200_external_probe(info->io_regions.virt_mmio_base))
+ goto error_out;
+
-+
++ GPDR |= (1<<3);
+ GAFR &= ~(1<<3);
+ GPSR |= (1<<3);
-+ GPDR |= (1<<3);
+
+ mq200_external_setqmode(&info->monitor_info,
+ info->io_regions.virt_mmio_base,
diff --git a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch b/packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch
index 7cf2f28c89..7cf2f28c89 100644
--- a/packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch
+++ b/packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch
diff --git a/packages/linux/linux_2.6.20.bb b/packages/linux/linux_2.6.20.bb
index c4017f4a2b..178a44dd14 100644
--- a/packages/linux/linux_2.6.20.bb
+++ b/packages/linux/linux_2.6.20.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux Kernel"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r4"
+PR = "r5"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://defconfig"
@@ -10,8 +10,9 @@ SRC_URI_append_progear = " \
file://progear_bl-r6.patch;patch=1 \
"
SRC_URI_append_simpad = "\
- file://linux-2.6.20.SIMpad.mq200.patch;patch=1 \
- file://linux-2.6.20.SIMpad.ucb1x00-switches.patch;patch=1 \
+ 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 \
@@ -31,4 +32,4 @@ do_configure_prepend() {
do_install_append_n2100() {
install -d ${DEPLOY_DIR_IMAGE}
install -m 0644 ${S}/arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
-} \ No newline at end of file
+}