From fc54b9bf158eea9cae647ce2c58f7d9989af173a Mon Sep 17 00:00:00 2001 From: mirko Date: Fri, 12 Dec 2008 11:58:53 +0000 Subject: changed Makefile and profiles, added patches for kernel 2.6.24 (stable-branch of Openmoko) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13613 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...iring-of-Jack-Interrupts-after-resume-whe.patch | 121 +++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 target/linux/s3c24xx/patches-2.6.24/1113-Fix-the-firing-of-Jack-Interrupts-after-resume-whe.patch (limited to 'target/linux/s3c24xx/patches-2.6.24/1113-Fix-the-firing-of-Jack-Interrupts-after-resume-whe.patch') diff --git a/target/linux/s3c24xx/patches-2.6.24/1113-Fix-the-firing-of-Jack-Interrupts-after-resume-whe.patch b/target/linux/s3c24xx/patches-2.6.24/1113-Fix-the-firing-of-Jack-Interrupts-after-resume-whe.patch new file mode 100644 index 0000000000..fad35851da --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1113-Fix-the-firing-of-Jack-Interrupts-after-resume-whe.patch @@ -0,0 +1,121 @@ +From d6c8d6b85864edd5bb616f9fda0d2e9c1f74de42 Mon Sep 17 00:00:00 2001 +From: Holger Freyther +Date: Sun, 13 Apr 2008 07:25:54 +0100 +Subject: [PATCH] Fix the firing of "Jack"-Interrupts after resume when the modem is powered on. + +GTA02_GPIO_nDL_GSM defaults to high/1. On resume do not enable the DL_GSM if +it was not enabled before. This is stopping the storm of interrupts. + +Fix the logic in the download file handling. Downloads are disabled (0) when +the GTA02_GPIO_nDL_GSM is high (1). To enable downloading set +GTA02_GPIO_nDL_GSM to low (0, !on). Disable the jack interrupt while download +the is active. When disabling download we will get a couple of jack interrupts +but this is hardly avoidable. + +Avoid reading the GPIO value if we do not even have a console set. + +Signed-Off-by: Holger Freyther +--- + arch/arm/plat-s3c24xx/neo1973_pm_gsm.c | 35 +++++++++++++++++++++++-------- + 1 files changed, 26 insertions(+), 9 deletions(-) + +diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c +index 1123d7d..b4ea8ba 100644 +--- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c ++++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c +@@ -17,8 +17,9 @@ + #include + #include + #include ++#include + +-#include ++#include + #include + #include + +@@ -30,6 +31,7 @@ + + struct gta01pm_priv { + int gpio_ngsm_en; ++ int gpio_ndl_gsm; + struct console *con; + }; + +@@ -68,7 +70,7 @@ static ssize_t gsm_read(struct device *dev, struct device_attribute *attr, + #endif + #ifdef CONFIG_MACH_NEO1973_GTA02 + if (machine_is_neo1973_gta02()) +- if (s3c2410_gpio_getpin(GTA02_GPIO_nDL_GSM)) ++ if (!s3c2410_gpio_getpin(GTA02_GPIO_nDL_GSM)) + goto out_1; + #endif + } +@@ -143,8 +145,18 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr, + s3c2410_gpio_setpin(GTA01_GPIO_MODEM_DNLOAD, on); + #endif + #ifdef CONFIG_MACH_NEO1973_GTA02 +- if (machine_is_neo1973_gta02()) +- s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, on); ++ 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)); ++ ++ gta01_gsm.gpio_ndl_gsm = !on; ++ s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, !on); ++ } + #endif + } + +@@ -159,26 +171,29 @@ static DEVICE_ATTR(download, 0644, gsm_read, gsm_write); + 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 anything here */ ++ * don't need to do much here. */ ++ + +- /* disable DL GSM to prevent jack_insert becoming floating */ ++ /* disable DL GSM to prevent jack_insert becoming 'floating' */ + if (machine_is_neo1973_gta02()) + s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, 1); ++ + return 0; + } + + static int gta01_gsm_resume(struct platform_device *pdev) + { + /* GPIO state is saved/restored by S3C2410 core GPIO driver, so we +- * don't need to do anything here */ ++ * don't need to do much here. */ + + /* Make sure that the kernel console on the serial port is still + * disabled. FIXME: resume ordering race with serial driver! */ +- if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON) && gta01_gsm.con) ++ if (gta01_gsm.con && s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON)) + console_stop(gta01_gsm.con); + + if (machine_is_neo1973_gta02()) +- s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, 0); ++ s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, gta01_gsm.gpio_ndl_gsm); ++ + return 0; + } + #else +@@ -248,6 +263,8 @@ static int __init gta01_gsm_probe(struct platform_device *pdev) + } else + gta01_gsm.con = NULL; + ++ gta01_gsm.gpio_ndl_gsm = 1; ++ + return sysfs_create_group(&pdev->dev.kobj, >a01_gsm_attr_group); + } + +-- +1.5.6.5 + -- cgit v1.2.3