diff options
Diffstat (limited to 'packages/linux')
-rw-r--r-- | packages/linux/linux/simpad/linux-2.6.24-SIMpad-serial-gpio_keys-and-cs3-ro.patch | 332 |
1 files changed, 0 insertions, 332 deletions
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 <linux/module.h> -@@ -9,6 +19,9 @@ - #include <linux/proc_fs.h> - #include <linux/string.h> - #include <linux/pm.h> -+ -+#include <linux/apm-emulation.h> -+ - #include <linux/platform_device.h> - #include <linux/mtd/mtd.h> - #include <linux/mtd/partitions.h> -@@ -27,12 +40,21 @@ - - #include <linux/serial_core.h> - #include <linux/ioport.h> -+#include <linux/input.h> -+#include <linux/gpio_keys.h> - #include <asm/io.h> - - #include "generic.h" - -+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 -- -- -- -- -- -- -- -- |