linux: update Simpad patchset - close #2073
authorBernhard Guillon <Bernhard.Guillon@opensimpad.org>
Sun, 22 Apr 2007 15:43:50 +0000 (15:43 +0000)
committerMarcin Juszkiewicz <hrw@openembedded.org>
Sun, 22 Apr 2007 15:43:50 +0000 (15:43 +0000)
packages/linux/linux/simpad/defconfig
packages/linux/linux/simpad/linux-2.6.20.SIMpad-mq200.patch [moved from packages/linux/linux/simpad/linux-2.6.20.SIMpad.mq200.patch with 74% similarity]
packages/linux/linux/simpad/linux-2.6.20.SIMpad-ucb1x00-switches.patch [moved from packages/linux/linux/simpad/linux-2.6.20.SIMpad.ucb1x00-switches.patch with 100% similarity]
packages/linux/linux_2.6.20.bb

index a718a46..2115d30 100644 (file)
@@ -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
@@ -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,
index c4017f4..178a44d 100644 (file)
@@ -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
+}