summaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch
blob: 4d491e3e902b6bc0e94ca3c59469b5f10b896f35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
From 6da7929da1b46bccaae0f53bf7a26cdd74a3b70a Mon Sep 17 00:00:00 2001
From: Mike Westerhof <mwester@dls.net>
Date: Wed, 2 Jul 2008 22:44:01 +0100
Subject: [PATCH] clean-gsm-flow-control.patch

Signed-off-by: Mike Westerhof <mwester@dls.net>

 arch/arm/plat-s3c24xx/neo1973_pm_gsm.c |   52 +-------
 drivers/serial/s3c2410.c               |  204 +++-----------------------------
 2 files changed, 24 insertions(+), 232 deletions(-)
---
 arch/arm/plat-s3c24xx/neo1973_pm_gsm.c |   32 ++++++++++++++++++--------------
 drivers/serial/s3c2410.c               |    3 ++-
 2 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
index d70a481..f3c9504 100644
--- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
+++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
@@ -31,6 +31,18 @@
 #include <asm/arch/regs-gpioj.h>
 #endif
 
+extern void s3c24xx_serial_register_resume_dependency(struct resume_dependency *
+					     resume_dependency, int uart_index);
+
+/* flag set if we flow-controlled the GSM in our suspend routine */
+int gsm_auto_flowcontrolled;
+
+int gta01_gsm_enabled;
+EXPORT_SYMBOL(gta01_gsm_enabled);
+
+int gta_gsm_interrupts;
+EXPORT_SYMBOL(gta_gsm_interrupts);
+
 struct gta01pm_priv {
 	int gpio_ngsm_en;
         int gpio_ndl_gsm;
@@ -183,20 +195,6 @@ static DEVICE_ATTR(reset, 0644, gsm_read, gsm_write);
 static DEVICE_ATTR(download, 0644, gsm_read, gsm_write);
 
 #ifdef CONFIG_PM
-static void gsm_resume_work(struct work_struct *w)
-{
-	printk(KERN_INFO "%s: waiting...\n", __FUNCTION__);
-	if (gsm_autounlock_delay)
-		msleep(gsm_autounlock_delay);
-	if (gsm_auto_flowcontrolled) {
-		if (machine_is_neo1973_gta01())
-			s3c24xx_fake_rx_interrupt(10000);
-		s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_nRTS0);
-		gsm_auto_flowcontrolled = 0;
-	}
-	printk(KERN_INFO "%s: done.\n", __FUNCTION__);
-}
-
 static int gta01_gsm_resume(struct platform_device *pdev);
 static int gta01_gsm_suspend(struct platform_device *pdev, pm_message_t state)
 {
@@ -235,6 +233,12 @@ static int gta01_gsm_resume(struct platform_device *pdev)
 	if (machine_is_neo1973_gta02())
 		s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, gta01_gsm.gpio_ndl_gsm);
 
+	/* If we forced flow-control on the GSM, we should also release it */
+	if (gsm_auto_flowcontrolled) {
+		s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_nRTS0);
+		gsm_auto_flowcontrolled = 0;
+	}
+
 	return 0;
 }
 #else
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c
index bc6736d..73c6284 100644
--- a/drivers/serial/s3c2410.c
+++ b/drivers/serial/s3c2410.c
@@ -385,7 +385,8 @@ s3c24xx_serial_rx_chars(int irq, void *dev_id)
 		if (uart_handle_sysrq_char(port, ch))
 			goto ignore_char;
 
-		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN, ch, flag);
+		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN, ch,
+									  flag);
 
 	ignore_char:
 		continue;
-- 
1.5.6.5