diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1262-gta0x-add-minimal-GSM-flowcontrol.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1262-gta0x-add-minimal-GSM-flowcontrol.patch.patch | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1262-gta0x-add-minimal-GSM-flowcontrol.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1262-gta0x-add-minimal-GSM-flowcontrol.patch.patch deleted file mode 100644 index 263bc471bb..0000000000 --- a/target/linux/s3c24xx/patches-2.6.24/1262-gta0x-add-minimal-GSM-flowcontrol.patch.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 7e5f528cb1448ac31a4e3a45c7c953ea95869d4d Mon Sep 17 00:00:00 2001 -From: Mike Westerhof <mwester@dls.net> -Date: Fri, 8 Aug 2008 13:08:03 +0100 -Subject: [PATCH] gta0x-add-minimal-GSM-flowcontrol.patch - - Add the basic GSM flowcontrol code. - -Signed-off-by: Mike Westerhof <mwester@dls.net> ---- - arch/arm/mach-s3c2410/mach-gta01.c | 3 ++ - arch/arm/mach-s3c2440/mach-gta02.c | 3 ++ - arch/arm/plat-s3c24xx/neo1973_pm_gsm.c | 36 ++++++++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+), 0 deletions(-) - -diff --git a/arch/arm/mach-s3c2410/mach-gta01.c b/arch/arm/mach-s3c2410/mach-gta01.c -index e518de7..f3f87cf 100644 ---- a/arch/arm/mach-s3c2410/mach-gta01.c -+++ b/arch/arm/mach-s3c2410/mach-gta01.c -@@ -657,9 +657,12 @@ static void __init gta01_map_io(void) - s3c24xx_init_uarts(gta01_uartcfgs, ARRAY_SIZE(gta01_uartcfgs)); - } - -+extern int gta_gsm_interrupts; -+ - static irqreturn_t gta01_modem_irq(int irq, void *param) - { - printk(KERN_DEBUG "GSM wakeup interrupt (IRQ %d)\n", irq); -+ gta_gsm_interrupts++; - return IRQ_HANDLED; - } - -diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c -index 8e43c4a..1d7d262 100644 ---- a/arch/arm/mach-s3c2440/mach-gta02.c -+++ b/arch/arm/mach-s3c2440/mach-gta02.c -@@ -1531,9 +1531,12 @@ static void __init gta02_map_io(void) - s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs)); - } - -+extern int gta_gsm_interrupts; -+ - static irqreturn_t gta02_modem_irq(int irq, void *param) - { - printk(KERN_DEBUG "modem wakeup interrupt\n"); -+ gta_gsm_interrupts++; - return IRQ_HANDLED; - } - -diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c -index dd63506..0543905 100644 ---- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c -+++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c -@@ -34,6 +34,9 @@ - extern void s3c24xx_serial_register_resume_dependency(struct resume_dependency * - resume_dependency, int uart_index); - -+int gta_gsm_interrupts; -+EXPORT_SYMBOL(gta_gsm_interrupts); -+ - struct gta01pm_priv { - int gpio_ngsm_en; - int gpio_ndl_gsm; -@@ -80,6 +83,9 @@ static ssize_t gsm_read(struct device *dev, struct device_attribute *attr, - if (!s3c2410_gpio_getpin(GTA02_GPIO_nDL_GSM)) - goto out_1; - } -+ } else if (!strcmp(attr->attr.name, "flowcontrolled")) { -+ if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT) -+ goto out_1; - } - - return strlcpy(buf, "0\n", 3); -@@ -176,6 +182,13 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr, - gta01_gsm.gpio_ndl_gsm = !on; - s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, !on); - } -+ } else if (!strcmp(attr->attr.name, "flowcontrolled")) { -+ if (on) { -+ gta_gsm_interrupts = 0; -+ s3c2410_gpio_setpin(S3C2410_GPH1, 1); -+ s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_OUTP); -+ } else -+ s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_nRTS0); - } - - return count; -@@ -184,6 +197,7 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr, - 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); -+static DEVICE_ATTR(flowcontrolled, 0644, gsm_read, gsm_write); - - #ifdef CONFIG_PM - static int gta01_gsm_resume(struct platform_device *pdev); -@@ -192,6 +206,11 @@ static int gta01_gsm_suspend(struct platform_device *pdev, pm_message_t state) - /* GPIO state is saved/restored by S3C2410 core GPIO driver, so we - * don't need to do much here. */ - -+ /* If flowcontrol asserted, abort if GSM already interrupted */ -+ if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT) { -+ if (gta_gsm_interrupts) -+ goto busy; -+ } - - /* disable DL GSM to prevent jack_insert becoming 'floating' */ - if (machine_is_neo1973_gta02()) -@@ -204,6 +223,20 @@ static int gta01_gsm_suspend(struct platform_device *pdev, pm_message_t state) - s3c24xx_serial_register_resume_dependency(&resume_dep_gsm_uart, 0); - - return 0; -+ -+busy: -+ return -EBUSY; -+} -+ -+static int -+gta01_gsm_suspend_late(struct platform_device *pdev, pm_message_t state) -+{ -+ /* Last chance: abort if GSM already interrupted */ -+ if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT) { -+ if (gta_gsm_interrupts) -+ return -EBUSY; -+ } -+ return 0; - } - - static int gta01_gsm_resume(struct platform_device *pdev) -@@ -228,6 +261,7 @@ static int gta01_gsm_resume(struct platform_device *pdev) - } - #else - #define gta01_gsm_suspend NULL -+#define gta01_gsm_suspend_late NULL - #define gta01_gsm_resume NULL - #endif - -@@ -235,6 +269,7 @@ static struct attribute *gta01_gsm_sysfs_entries[] = { - &dev_attr_power_on.attr, - &dev_attr_reset.attr, - &dev_attr_download.attr, -+ &dev_attr_flowcontrolled.attr, - NULL - }; - -@@ -314,6 +349,7 @@ static struct platform_driver gta01_gsm_driver = { - .probe = gta01_gsm_probe, - .remove = gta01_gsm_remove, - .suspend = gta01_gsm_suspend, -+ .suspend_late = gta01_gsm_suspend_late, - .resume = gta01_gsm_resume, - .driver = { - .name = "neo1973-pm-gsm", --- -1.5.6.5 - |