diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1118-fix-gsm-download-irq-balance-issue.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1118-fix-gsm-download-irq-balance-issue.patch.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1118-fix-gsm-download-irq-balance-issue.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1118-fix-gsm-download-irq-balance-issue.patch.patch new file mode 100644 index 0000000000..8b3f3766e1 --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1118-fix-gsm-download-irq-balance-issue.patch.patch @@ -0,0 +1,60 @@ +From 129f349dc3ee75dfb0580436d82fd0d6633ba2c4 Mon Sep 17 00:00:00 2001 +From: warmcat <andy@warmcat.com> +Date: Sun, 13 Apr 2008 07:25:55 +0100 +Subject: [PATCH] fix-gsm-download-irq-balance-issue.patch + +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.5 + |