65 lines
2.3 KiB
Diff
Executable File
65 lines
2.3 KiB
Diff
Executable File
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, >a01_gsm_attr_group);
|
|
}
|
|
--
|
|
1.5.6.3
|
|
|