From 282d57299747bd465f8306dd259b7f8efbecda37 Mon Sep 17 00:00:00 2001 From: Henning Heinold Date: Sat, 4 Oct 2008 21:07:45 +0000 Subject: linux-2.6.24: fix compile for archs that do not support __udivdi3() * add time.h.patch from kernel ml * bump PR --- packages/linux/linux-2.6.24/time.h.patch | 25 +++++++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 packages/linux/linux-2.6.24/time.h.patch (limited to 'packages/linux') diff --git a/packages/linux/linux-2.6.24/time.h.patch b/packages/linux/linux-2.6.24/time.h.patch new file mode 100644 index 0000000000..fd22f3a01d --- /dev/null +++ b/packages/linux/linux-2.6.24/time.h.patch @@ -0,0 +1,25 @@ +....since some architectures don't support __udivdi3() (and + we don't want to use that, anyway). + + Signed-off-by: Segher Boessenkool + --- + include/linux/time.h | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + + +Index: linux-2.6.24/include/linux/time.h +=================================================================== +--- linux-2.6.24.orig/include/linux/time.h 2008-06-23 11:17:09.021841180 +0200 ++++ linux-2.6.24/include/linux/time.h 2008-06-23 11:18:34.445167140 +0200 +@@ -173,6 +173,11 @@ + { + ns += a->tv_nsec; + while(unlikely(ns >= NSEC_PER_SEC)) { ++ /* The following asm() prevents the compiler from ++ * optimising this loop into a modulo operation. ++ */ ++ asm("" : "+r"(ns)); ++ + ns -= NSEC_PER_SEC; + a->tv_sec++; + } diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index 7fd2f457e4..de12e4c345 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -10,10 +10,11 @@ DEFAULT_PREFERENCE_at32stk1000 = "1" DEFAULT_PREFERENCE_ts72xx = "1" DEFAULT_PREFERENCE_cs-e9302 = "1" -PR = "r14" +PR = "r15" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ + file://time.h.patch;patch=1 \ file://defconfig" # Moved away temporarely until committed properly (work in progress). -- cgit v1.2.3 From 71c1c1bf231dd6b945c90f90121abdce817248c0 Mon Sep 17 00:00:00 2001 From: Henning Heinold Date: Sat, 4 Oct 2008 21:18:57 +0000 Subject: linux-2.6.24: add updated serial-gpio patch for simpad * patch was provided by Bernhard Guillon * drop linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch * add linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 * simpad now works with serial keyboards again * fixes bug 4630 * bump PR --- ....24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 | 358 +++++++++++++++++++++ packages/linux/linux_2.6.24.bb | 4 +- 2 files changed, 360 insertions(+), 2 deletions(-) create mode 100644 packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 (limited to 'packages/linux') diff --git a/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 b/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 new file mode 100644 index 0000000000..e47d99288f --- /dev/null +++ b/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2 @@ -0,0 +1,358 @@ +diff -Nur linux-2.6.24.vanilla/arch/arm/mach-sa1100/simpad.c linux-2.6.24/arch/arm/mach-sa1100/simpad.c +--- linux-2.6.24.vanilla/arch/arm/mach-sa1100/simpad.c 2008-10-04 21:47:24.000000000 +0200 ++++ linux-2.6.24/arch/arm/mach-sa1100/simpad.c 2008-10-04 22:01:20.000000000 +0200 +@@ -1,5 +1,15 @@ + /* + * 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) ++ * - added cs3_ro ++ * ++ * 2007/04/12 Bernhard Guillon: ++ * -added gpio_keys (based on h3000.c from hh.org) + */ + + #include +@@ -9,6 +19,9 @@ + #include + #include + #include ++ ++#include ++ + #include + #include + #include +@@ -27,12 +40,21 @@ + + #include + #include ++#include ++#include + #include + + #include "generic.h" + ++long cs3_ro; + long cs3_shadow; + ++long get_cs3_ro(void) ++{ ++ cs3_ro = *(CS3BUSTYPE *)(CS3_BASE); ++ return cs3_ro; ++} ++ + long get_cs3_shadow(void) + { + return cs3_shadow; +@@ -55,9 +77,12 @@ + *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; + } + ++EXPORT_SYMBOL(get_cs3_ro); ++EXPORT_SYMBOL(get_cs3_shadow); + EXPORT_SYMBOL(set_cs3_bit); + EXPORT_SYMBOL(clear_cs3_bit); + ++ + static struct map_desc simpad_io_desc[] __initdata = { + { /* MQ200 */ + .virtual = 0xf2800000, +@@ -73,23 +98,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, + }; + + +@@ -135,7 +208,6 @@ + }; + + +- + static void __init simpad_map_io(void) + { + sa1100_map_io(); +@@ -144,23 +216,45 @@ + + set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | + ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); +- +- ++ + sa1100_register_uart_fns(&simpad_port_fns); + sa1100_register_uart(0, 3); /* serial interface */ + sa1100_register_uart(1, 1); /* DECT */ + +- // Reassign UART 1 pins ++ /* Reassign UART 1 pins */ ++ /* TEST SOME OLD KERNEL STUFF INSTEAD + GAFR |= GPIO_UART_TXD | GPIO_UART_RXD; + GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15; + GPDR &= ~GPIO_UART_RXD; + PPAR |= PPAR_UPR; ++ */ ++ ++ // txd and rxd use their alternate function ++ GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD); ++ ++ // the control lines are gpio ++ GAFR &= ~(GPIO_UART1_RTS | GPIO_UART1_CTS | GPIO_UART1_DCD); ++ GAFR &= ~(GPIO_UART1_DSR | GPIO_UART1_DTR); ++ GAFR &= ~(GPIO_UART3_RTS | GPIO_UART3_CTS | GPIO_UART3_DCD); ++ GAFR &= ~(GPIO_UART3_DSR | GPIO_UART3_DTR); ++ ++ // txd, rts and dtr are outputs ++ GPDR |= GPIO_UART_TXD; ++ GPDR |= GPIO_UART1_RTS | GPIO_UART3_RTS; ++ GPDR |= GPIO_UART1_DTR | GPIO_UART3_DTR; ++ ++ // cts, dcd, dsr and rxd are inputs ++ GPDR &= ~(GPIO_UART1_CTS | GPIO_UART3_CTS); ++ GPDR &= ~(GPIO_UART1_DCD | GPIO_UART3_DCD); ++ GPDR &= ~(GPIO_UART1_DSR | GPIO_UART3_DSR); ++ GPDR &= ~GPIO_UART_RXD; ++ ++ PPAR |= PPAR_UPR; + + /* + * Set up registers for sleep mode. + */ + +- + PWER = PWER_GPIO0| PWER_RTC; + PGSR = 0x818; + PCFR = 0; +@@ -171,9 +265,10 @@ + sa11x0_set_mcp_data(&simpad_mcp_data); + } + ++ + 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 */ +@@ -191,31 +286,52 @@ + while(1); + + local_irq_enable(); /* we won't ever call it */ ++} + + +-} ++/* ++ * gpio_keys ++*/ ++ ++static struct gpio_keys_button simpad_button_table[] = { ++ { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 1, "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; + + pm_power_off = simpad_power_off; +- ++ + ret = platform_add_devices(devices, ARRAY_SIZE(devices)); + if(ret) + printk(KERN_WARNING "simpad: Unable to register mq200 framebuffer device"); +diff -Nur linux-2.6.24.vanilla/include/asm-arm/arch-sa1100/simpad.h linux-2.6.24/include/asm-arm/arch-sa1100/simpad.h +--- linux-2.6.24.vanilla/include/asm-arm/arch-sa1100/simpad.h 2008-10-04 21:47:17.000000000 +0200 ++++ linux-2.6.24/include/asm-arm/arch-sa1100/simpad.h 2008-10-04 22:00:57.000000000 +0200 +@@ -12,11 +12,12 @@ + #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 + #define GPIO_UART1_DSR GPIO_GPIO6 ++#define GPIO_UART1_RI GPIO_GPIO19 + + #define GPIO_UART3_RTS GPIO_GPIO12 + #define GPIO_UART3_DTR GPIO_GPIO16 +@@ -48,9 +49,9 @@ + #define GPIO_SMART_CARD GPIO_GPIO10 + #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10 + +-// CS3 Latch is write only, a shadow is necessary ++// CS3 Latch is write only 16-bit , a shadow is necessary + +-#define CS3BUSTYPE unsigned volatile long ++#define CS3BUSTYPE unsigned volatile long + #define CS3_BASE 0xf1000000 + + #define VCC_5V_EN 0x0001 // For 5V PCMCIA +@@ -70,43 +71,17 @@ + #define ENABLE_5V 0x4000 // Enable 5V circuit + #define RESET_SIMCARD 0x8000 + +-#define RS232_ENABLE 0x0440 +-#define PCMCIAMASK 0x402f ++// CS3 Latch is readable only 8-bit interest + ++#define PCMCIA_BVD1 0x0001 ++#define PCMCIA_BVD2 0x0002 ++#define PCMCIA_VS1 0x0004 // PCMCIA card voltage select ++#define PCMCIA_VS2 0x0008 // PCMCIA card voltage select, if both are in high state -> 5V PCMCIA card ++#define LOCK_IND 0x0010 ++#define CHARGING_STATE 0x0020 // Ladestatus ++#define PCMCIA_SHORT 0x0040 // low active + +-struct simpad_battery { +- unsigned char ac_status; /* line connected yes/no */ +- unsigned char status; /* battery loading yes/no */ +- unsigned char percentage; /* percentage loaded */ +- unsigned short life; /* life till empty */ +-}; +- +-/* These should match the apm_bios.h definitions */ +-#define SIMPAD_AC_STATUS_AC_OFFLINE 0x00 +-#define SIMPAD_AC_STATUS_AC_ONLINE 0x01 +-#define SIMPAD_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */ +-#define SIMPAD_AC_STATUS_AC_UNKNOWN 0xff +- +-/* These bitfields are rarely "or'd" together */ +-#define SIMPAD_BATT_STATUS_HIGH 0x01 +-#define SIMPAD_BATT_STATUS_LOW 0x02 +-#define SIMPAD_BATT_STATUS_CRITICAL 0x04 +-#define SIMPAD_BATT_STATUS_CHARGING 0x08 +-#define SIMPAD_BATT_STATUS_CHARGE_MAIN 0x10 +-#define SIMPAD_BATT_STATUS_DEAD 0x20 /* Battery will not charge */ +-#define SIMPAD_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */ +-#define SIMPAD_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */ +-#define SIMPAD_BATT_STATUS_NOBATT 0x80 +-#define SIMPAD_BATT_STATUS_UNKNOWN 0xff +- +-extern int simpad_get_battery(struct simpad_battery* ); ++#define RS232_ENABLE 0x0440 ++#define PCMCIAMASK 0x402f + + #endif // __ASM_ARCH_SIMPAD_H +- +- +- +- +- +- +- +- diff --git a/packages/linux/linux_2.6.24.bb b/packages/linux/linux_2.6.24.bb index de12e4c345..7c92cb2ed0 100644 --- a/packages/linux/linux_2.6.24.bb +++ b/packages/linux/linux_2.6.24.bb @@ -10,7 +10,7 @@ DEFAULT_PREFERENCE_at32stk1000 = "1" DEFAULT_PREFERENCE_ts72xx = "1" DEFAULT_PREFERENCE_cs-e9302 = "1" -PR = "r15" +PR = "r16" SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \ http://kamikaze.waninkoko.info/patches/2.6.24/kamikaze1/broken-out/squashfs-lzma-2.6.24.patch;patch=1 \ @@ -28,7 +28,7 @@ SRC_URI_append_simpad = "\ file://linux-2.6.24-SIMpad-cs3-simpad.patch;patch=1 \ file://linux-2.6.24-SIMpad-mq200.patch;patch=1 \ file://linux-2.6.24-SIMpad-pcmcia.patch;patch=1 \ - file://linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch;patch=1 \ + file://linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch.v2;patch=1 \ file://linux-2.6.24-SIMpad-ucb1x00-switches.patch;patch=1 \ file://linux-2.6.24-SIMpad-ucb1x00-ts-supend-and-accuracy.patch;patch=1 \ file://linux-2.6.24-SIMpad-hostap_cs-shared-irq.patch;patch=1 \ -- cgit v1.2.3 From 1fa0dba168f2b66d5e72c72847876e8df5958168 Mon Sep 17 00:00:00 2001 From: Henning Heinold Date: Sat, 4 Oct 2008 21:20:17 +0000 Subject: linux-simpad: args I hit the wrong key fix * drop now linux-2.6.24-SIMpad-serial-gpio_kes-and-cs3-ro.patch fpr sure --- ...2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch | 332 --------------------- 1 file changed, 332 deletions(-) delete mode 100644 packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch (limited to 'packages/linux') diff --git a/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch b/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch deleted file mode 100644 index 156b87cdbd..0000000000 --- a/packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch +++ /dev/null @@ -1,332 +0,0 @@ -diff -Nur linux-2.6.24.vanilla/arch/arm/mach-sa1100/simpad.c linux-2.6.24/arch/arm/mach-sa1100/simpad.c ---- linux-2.6.24.vanilla/arch/arm/mach-sa1100/simpad.c 2008-01-24 23:58:37.000000000 +0100 -+++ linux-2.6.24/arch/arm/mach-sa1100/simpad.c 2008-02-20 21:10:00.000000000 +0100 -@@ -1,5 +1,15 @@ - /* - * 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) -+ * - added cs3_ro -+ * -+ * 2007/04/12 Bernhard Guillon: -+ * -added gpio_keys (based on h3000.c from hh.org) - */ - - #include -@@ -9,6 +19,9 @@ - #include - #include - #include -+ -+#include -+ - #include - #include - #include -@@ -27,12 +40,21 @@ - - #include - #include -+#include -+#include - #include - - #include "generic.h" - -+long cs3_ro; - long cs3_shadow; - -+long get_cs3_ro(void) -+{ -+ cs3_ro = *(CS3BUSTYPE *)(CS3_BASE); -+ return cs3_ro; -+} -+ - long get_cs3_shadow(void) - { - return cs3_shadow; -@@ -55,9 +77,12 @@ - *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow; - } - -+EXPORT_SYMBOL(get_cs3_ro); -+EXPORT_SYMBOL(get_cs3_shadow); - EXPORT_SYMBOL(set_cs3_bit); - EXPORT_SYMBOL(clear_cs3_bit); - -+ - static struct map_desc simpad_io_desc[] __initdata = { - { /* MQ200 */ - .virtual = 0xf2800000, -@@ -73,23 +98,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, - }; - - -@@ -135,7 +208,6 @@ - }; - - -- - static void __init simpad_map_io(void) - { - sa1100_map_io(); -@@ -144,13 +216,12 @@ - - set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | - ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); -- -- -+ - sa1100_register_uart_fns(&simpad_port_fns); - 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; -@@ -160,7 +231,6 @@ - * Set up registers for sleep mode. - */ - -- - PWER = PWER_GPIO0| PWER_RTC; - PGSR = 0x818; - PCFR = 0; -@@ -171,9 +241,10 @@ - sa11x0_set_mcp_data(&simpad_mcp_data); - } - -+ - 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 */ -@@ -191,31 +262,52 @@ - while(1); - - local_irq_enable(); /* we won't ever call it */ -+} - - --} -+/* -+ * gpio_keys -+*/ -+ -+static struct gpio_keys_button simpad_button_table[] = { -+ { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 1, "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; - - pm_power_off = simpad_power_off; -- -+ - ret = platform_add_devices(devices, ARRAY_SIZE(devices)); - if(ret) - printk(KERN_WARNING "simpad: Unable to register mq200 framebuffer device"); -diff -Nur linux-2.6.24.vanilla/include/asm-arm/arch-sa1100/simpad.h linux-2.6.24/include/asm-arm/arch-sa1100/simpad.h ---- linux-2.6.24.vanilla/include/asm-arm/arch-sa1100/simpad.h 2008-01-24 23:58:37.000000000 +0100 -+++ linux-2.6.24/include/asm-arm/arch-sa1100/simpad.h 2008-02-20 21:10:00.000000000 +0100 -@@ -12,11 +12,12 @@ - #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 - #define GPIO_UART1_DSR GPIO_GPIO6 -+#define GPIO_UART1_RI GPIO_GPIO19 - - #define GPIO_UART3_RTS GPIO_GPIO12 - #define GPIO_UART3_DTR GPIO_GPIO16 -@@ -48,9 +49,9 @@ - #define GPIO_SMART_CARD GPIO_GPIO10 - #define IRQ_GPIO_SMARD_CARD IRQ_GPIO10 - --// CS3 Latch is write only, a shadow is necessary -+// CS3 Latch is write only 16-bit , a shadow is necessary - --#define CS3BUSTYPE unsigned volatile long -+#define CS3BUSTYPE unsigned volatile long - #define CS3_BASE 0xf1000000 - - #define VCC_5V_EN 0x0001 // For 5V PCMCIA -@@ -70,43 +71,17 @@ - #define ENABLE_5V 0x4000 // Enable 5V circuit - #define RESET_SIMCARD 0x8000 - --#define RS232_ENABLE 0x0440 --#define PCMCIAMASK 0x402f -+// CS3 Latch is readable only 8-bit interest - -+#define PCMCIA_BVD1 0x0001 -+#define PCMCIA_BVD2 0x0002 -+#define PCMCIA_VS1 0x0004 // PCMCIA card voltage select -+#define PCMCIA_VS2 0x0008 // PCMCIA card voltage select, if both are in high state -> 5V PCMCIA card -+#define LOCK_IND 0x0010 -+#define CHARGING_STATE 0x0020 // Ladestatus -+#define PCMCIA_SHORT 0x0040 // low active - --struct simpad_battery { -- unsigned char ac_status; /* line connected yes/no */ -- unsigned char status; /* battery loading yes/no */ -- unsigned char percentage; /* percentage loaded */ -- unsigned short life; /* life till empty */ --}; -- --/* These should match the apm_bios.h definitions */ --#define SIMPAD_AC_STATUS_AC_OFFLINE 0x00 --#define SIMPAD_AC_STATUS_AC_ONLINE 0x01 --#define SIMPAD_AC_STATUS_AC_BACKUP 0x02 /* What does this mean? */ --#define SIMPAD_AC_STATUS_AC_UNKNOWN 0xff -- --/* These bitfields are rarely "or'd" together */ --#define SIMPAD_BATT_STATUS_HIGH 0x01 --#define SIMPAD_BATT_STATUS_LOW 0x02 --#define SIMPAD_BATT_STATUS_CRITICAL 0x04 --#define SIMPAD_BATT_STATUS_CHARGING 0x08 --#define SIMPAD_BATT_STATUS_CHARGE_MAIN 0x10 --#define SIMPAD_BATT_STATUS_DEAD 0x20 /* Battery will not charge */ --#define SIMPAD_BATT_NOT_INSTALLED 0x20 /* For expansion pack batteries */ --#define SIMPAD_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */ --#define SIMPAD_BATT_STATUS_NOBATT 0x80 --#define SIMPAD_BATT_STATUS_UNKNOWN 0xff -- --extern int simpad_get_battery(struct simpad_battery* ); -+#define RS232_ENABLE 0x0440 -+#define PCMCIAMASK 0x402f - - #endif // __ASM_ARCH_SIMPAD_H -- -- -- -- -- -- -- -- -- cgit v1.2.3