aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch b/target/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch
new file mode 100755
index 0000000000..41a74c955c
--- /dev/null
+++ b/target/linux/s3c24xx/patches/0242-silence-serial-console-gta01.patch.patch
@@ -0,0 +1,76 @@
+From 85ef1fb82db8188fd5a615e557bf5407113d163f Mon Sep 17 00:00:00 2001
+From: Mike Westerhof <mwester@dls.net>
+Date: Sun, 10 Aug 2008 09:13:20 +0100
+Subject: [PATCH] silence-serial-console-gta01.patch
+
+ This patch ensures that no console data will go the UART while
+ the GSM mux is switched to the GSM. This is necessary despite
+ the code that disables the console due to the fact that the
+ console resumes before the neo1973_pm_gsm driver, and consoles
+ always resume in the "on" state.
+
+Signed-off-by: Mike Westerhof <mwester@dls.net>
+---
+ arch/arm/plat-s3c24xx/neo1973_pm_gsm.c | 3 +++
+ drivers/serial/s3c2410.c | 10 ++++++++++
+ 2 files changed, 13 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
+index 901f8fb..8d5e41c 100644
+--- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
++++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
+@@ -31,6 +31,7 @@
+ #include <asm/arch/regs-gpioj.h>
+ #endif
+
++extern void s3c24xx_serial_console_set_silence(int silence);
+ extern void s3c24xx_serial_register_resume_dependency(struct resume_dependency *
+ resume_dependency, int uart_index);
+
+@@ -105,6 +106,7 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
+ "disconnecting serial console\n");
+
+ console_stop(gta01_gsm.con);
++ s3c24xx_serial_console_set_silence(1);
+ }
+
+ if (gta01_gsm.gpio_ngsm_en)
+@@ -144,6 +146,7 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
+ s3c2410_gpio_setpin(gta01_gsm.gpio_ngsm_en, 1);
+
+ if (gta01_gsm.con) {
++ s3c24xx_serial_console_set_silence(0);
+ console_start(gta01_gsm.con);
+
+ dev_dbg(dev, "powered down GSM, thus enabling "
+diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c
+index d0b55b1..8de1564 100644
+--- a/drivers/serial/s3c2410.c
++++ b/drivers/serial/s3c2410.c
+@@ -1791,6 +1791,13 @@ module_exit(s3c24xx_serial_modexit);
+ #ifdef CONFIG_SERIAL_S3C2410_CONSOLE
+
+ static struct uart_port *cons_uart;
++static int cons_silenced;
++
++void s3c24xx_serial_console_set_silence(int silenced)
++{
++ cons_silenced = silenced;
++}
++EXPORT_SYMBOL(s3c24xx_serial_console_set_silence);
+
+ static int
+ s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
+@@ -1817,6 +1824,9 @@ s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
+ unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON);
+ unsigned int umcon = rd_regl(cons_uart, S3C2410_UMCON);
+
++ if (cons_silenced)
++ return;
++
+ /* If auto HW flow control enabled, temporarily turn it off */
+ if (umcon & S3C2410_UMCOM_AFC)
+ wr_regl(port, S3C2410_UMCON, (umcon & !S3C2410_UMCOM_AFC));
+--
+1.5.6.3
+