diff options
Diffstat (limited to 'packages/linux/linux-openmoko/fix-gta01-flowcontrol2-2.6.22.5.patch')
-rw-r--r-- | packages/linux/linux-openmoko/fix-gta01-flowcontrol2-2.6.22.5.patch | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/packages/linux/linux-openmoko/fix-gta01-flowcontrol2-2.6.22.5.patch b/packages/linux/linux-openmoko/fix-gta01-flowcontrol2-2.6.22.5.patch deleted file mode 100644 index ddb58f0cdb..0000000000 --- a/packages/linux/linux-openmoko/fix-gta01-flowcontrol2-2.6.22.5.patch +++ /dev/null @@ -1,193 +0,0 @@ ---- linux-2.6.22.5/arch/arm/common/gta01_pm_gsm.c.orig 2007-09-27 11:23:20.000000000 -0500 -+++ linux-2.6.22.5/arch/arm/common/gta01_pm_gsm.c 2007-09-27 21:09:00.000000000 -0500 -@@ -23,6 +23,9 @@ - #include <asm/arch/gta01.h> - #include <asm/arch/gta02.h> - -+#include <linux/serial_core.h> -+void s3c24xx_set_flow_control(struct uart_port *port, int fc_on); -+ - struct gta01pm_priv { - int gpio_ngsm_en; - struct console *con; -@@ -49,6 +52,23 @@ - static ssize_t gsm_read(struct device *dev, struct device_attribute *attr, - char *buf) - { -+ struct uart_driver *udrive = NULL; -+ struct uart_state *ustate = NULL; -+ struct uart_port *uport = NULL; -+ -+ if (gta01_gsm.con) { -+ udrive = gta01_gsm.con->data; -+ if (udrive) { -+ ustate = udrive->state; -+ if (ustate) { -+ uport = ustate->port; -+ } -+ } -+ } -+ printk("gsm: gsm_read of \"%s\"\n", attr->attr.name); -+ printk("gsm: con=%p udrive=%p ustate=%p uport=%p\n", -+ gta01_gsm.con, udrive, ustate, uport); -+ - if (!strcmp(attr->attr.name, "power_on")) { - if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON)) - goto out_1; -@@ -58,6 +78,24 @@ - } else if (!strcmp(attr->attr.name, "download")) { - if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_DNLOAD)) - goto out_1; -+ } else if (!strcmp(attr->attr.name, "flowcontrol")) { -+ if (uport) { -+ if (uport->unused[2] & 0x2) { -+ if (uport->unused[2] & 0x1) { -+ printk("gsm: flow control allowed and on\n"); -+ goto out_1; -+ } else { -+ printk("gsm: flow control allowed and not on\n"); -+ } -+ } else { -+ if (uport->unused[2] & 0x1) -+ printk("gsm: flow control not allowed, " -+ "but is pending\n"); -+ else -+ printk("gsm: flow control not allowed, " -+ "not pending\n"); -+ } -+ } - } - - return strlcpy(buf, "0\n", 3); -@@ -68,10 +106,26 @@ - static ssize_t gsm_write(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) - { -+ struct uart_driver *udrive = NULL; -+ struct uart_state *ustate = NULL; -+ struct uart_port *uport = NULL; -+ static int was_on = 0; - unsigned long on = simple_strtoul(buf, NULL, 10); - -+ if (gta01_gsm.con) { -+ udrive = gta01_gsm.con->data; -+ if (udrive) { -+ ustate = udrive->state; -+ if (ustate) { -+ uport = ustate->port; -+ } -+ } -+ } -+ printk("gsm: con=%p udrive=%p ustate=%p uport=%p\n", -+ gta01_gsm.con, udrive, ustate, uport); -+ - if (!strcmp(attr->attr.name, "power_on")) { -- if (on) { -+ if (on && !was_on) { - if (gta01_gsm.con) { - dev_info(dev, "powering up GSM, thus " - "disconnecting serial console\n"); -@@ -83,7 +137,24 @@ - s3c2410_gpio_setpin(gta01_gsm.gpio_ngsm_en, 0); - - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 1); -- } else { -+ -+ if (uport) { -+ /* set any pending flow-control mode */ -+ uport->unused[2] |= 0x2; -+ s3c24xx_set_flow_control(uport, -+ (uport->unused[2] & 0x1)); -+ dev_info(dev, "flow control allowed\n"); -+ } -+ -+ was_on = 1; -+ -+ } else if (!on && was_on) { -+ if (uport) { -+ uport->unused[2] &= ~0x2; -+ s3c24xx_set_flow_control(uport, 0); -+ dev_info(dev, "flow control not allowed\n"); -+ } -+ - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 0); - - if (gta01_gsm.gpio_ngsm_en) -@@ -95,6 +166,8 @@ - dev_info(dev, "powered down GSM, thus enabling " - "serial console\n"); - } -+ -+ was_on = 0; - } - } else if (!strcmp(attr->attr.name, "reset")) { - s3c2410_gpio_setpin(GTA01_GPIO_MODEM_RST, on); -@@ -105,6 +178,7 @@ - return count; - } - -+static DEVICE_ATTR(flowcontrol, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(power_on, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(reset, 0644, gsm_read, gsm_write); - static DEVICE_ATTR(download, 0644, gsm_read, gsm_write); -@@ -136,6 +210,7 @@ - #endif - - static struct attribute *gta01_gsm_sysfs_entries[] = { -+ &dev_attr_flowcontrol.attr, - &dev_attr_power_on.attr, - &dev_attr_reset.attr, - NULL, ---- linux-2.6.22.5/drivers/serial/s3c2410.c.orig 2007-09-27 11:23:27.000000000 -0500 -+++ linux-2.6.22.5/drivers/serial/s3c2410.c 2007-09-27 21:07:21.000000000 -0500 -@@ -80,6 +80,8 @@ - - #include <asm/arch/regs-serial.h> - #include <asm/arch/regs-gpio.h> -+#include <asm/mach-types.h> -+#include <asm/arch/gta01.h> - - /* structures */ - -@@ -729,6 +731,17 @@ - return best->quot; - } - -+/* This routine is called whenever the gta01 modem/console switches */ -+void s3c24xx_set_flow_control(struct uart_port *port, int fc_on) -+{ -+ unsigned int umcon; -+ if (machine_is_neo1973_gta01() && port) { -+ umcon = (fc_on) ? S3C2410_UMCOM_AFC : 0; -+ wr_regl(port, S3C2410_UMCON, umcon); -+ } -+} -+EXPORT_SYMBOL(s3c24xx_set_flow_control); -+ - static void s3c24xx_serial_set_termios(struct uart_port *port, - struct ktermios *termios, - struct ktermios *old) -@@ -803,6 +816,23 @@ - - umcon = (termios->c_cflag & CRTSCTS) ? S3C2410_UMCOM_AFC : 0; - -+ /* -+ * Custom handling of flow control on hwport 0 for the GTA01: -+ * Save the desired state for flow control, but if the port -+ * is being used as a console, then do not actually enable -+ * flow control unless the flag permiting us to do so is set. -+ */ -+ if (machine_is_neo1973_gta01() && (cfg->hwport == 0)) { -+ if (umcon) -+ port->unused[2] |= 0x1; -+ else -+ port->unused[2] &= ~0x1; -+ if (port->cons && (port->cons->index >= 0)) { -+ if (!(port->unused[2] & 0x2)) -+ umcon = 0; -+ } -+ } -+ - if (termios->c_cflag & PARENB) { - if (termios->c_cflag & PARODD) - ulcon |= S3C2410_LCON_PODD; |