diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch new file mode 100644 index 0000000000..4d491e3e90 --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1213-clean-gsm-flow-control.patch.patch @@ -0,0 +1,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 + |