summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch b/target/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch
new file mode 100755
index 0000000000..eb7492959f
--- /dev/null
+++ b/target/linux/s3c24xx/patches/0107-fix-gsm-download-irq-balance-issue.patch.patch
@@ -0,0 +1,64 @@
+From 95f161a3dc8b50ee354f5d9cd3785d3522bc1bb5 Mon Sep 17 00:00:00 2001
+From: Andy Green <andy@openmoko.com>
+Date: Fri, 25 Jul 2008 23:06:04 +0100
+Subject: [PATCH] fix-gsm-download-irq-balance-issue.patch
+
+Only enable or disable the interrupt if we see we are in the opposing state.
+Also force that damn GSM download signal deasserted on probe at the time we
+set the logical state for it to deasserted.
+
+Signed-off-by: Andy Green <andy@openmoko.com>
+---
+ arch/arm/plat-s3c24xx/neo1973_pm_gsm.c | 28 +++++++++++++++++++++-------
+ 1 files changed, 21 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
+index b4ea8ba..c3292b8 100644
+--- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
++++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
+@@ -146,13 +146,24 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
+ #endif
+ #ifdef CONFIG_MACH_NEO1973_GTA02
+ if (machine_is_neo1973_gta02()) {
+- /* FIXME: Layering violation, we know how this relates to
+- * the Jack-IRQ. And we assume the keyboard driver to be
+- * around. */
+- if (on)
+- disable_irq(gpio_to_irq(GTA02_GPIO_JACK_INSERT));
+- else
+- enable_irq(gpio_to_irq(GTA02_GPIO_JACK_INSERT));
++ /*
++ * the keyboard / buttons driver requests and enables
++ * the JACK_INSERT IRQ. We have to take care about
++ * not enabling and disabling the IRQ when it was
++ * already in that state or we get "unblanaced IRQ"
++ * kernel warnings and stack dumps. So we use the
++ * copy of the ndl_gsm state to figure out if we should
++ * enable or disable the jack interrupt
++ */
++ if (on) {
++ if (gta01_gsm.gpio_ndl_gsm)
++ disable_irq(gpio_to_irq(
++ GTA02_GPIO_JACK_INSERT));
++ } else {
++ if (!gta01_gsm.gpio_ndl_gsm)
++ enable_irq(gpio_to_irq(
++ GTA02_GPIO_JACK_INSERT));
++ }
+
+ gta01_gsm.gpio_ndl_gsm = !on;
+ s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, !on);
+@@ -263,7 +274,10 @@ static int __init gta01_gsm_probe(struct platform_device *pdev)
+ } else
+ gta01_gsm.con = NULL;
+
++ /* note that download initially disabled, and enforce that */
+ gta01_gsm.gpio_ndl_gsm = 1;
++ if (machine_is_neo1973_gta02())
++ s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, 1);
+
+ return sysfs_create_group(&pdev->dev.kobj, &gta01_gsm_attr_group);
+ }
+--
+1.5.6.3
+