From 75de2bebd620bbe70fecff1560a6f4b18a23ab2c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20B=C3=BCsch?= Date: Mon, 7 Mar 2011 16:57:15 +0000 Subject: [PATCH] n810: Add workaround for bluetooth IRQ issue SVN-Revision: 25939 --- .../420-hci-h4p-interrupt-workaround.patch | 58 +++++++++++++++++++ .../830-omap2-serial-fixes.patch | 10 ++-- 2 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch diff --git a/target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch b/target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch new file mode 100644 index 0000000000..91b23405b1 --- /dev/null +++ b/target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch @@ -0,0 +1,58 @@ +Index: linux-2.6.38-rc7/arch/arm/mach-omap2/omap_hwmod_2420_data.c +=================================================================== +--- linux-2.6.38-rc7.orig/arch/arm/mach-omap2/omap_hwmod_2420_data.c 2011-03-07 16:07:00.174343135 +0100 ++++ linux-2.6.38-rc7/arch/arm/mach-omap2/omap_hwmod_2420_data.c 2011-03-07 16:09:15.601997493 +0100 +@@ -362,7 +362,7 @@ static struct omap_hwmod_class uart_clas + /* UART1 */ + + static struct omap_hwmod_irq_info uart1_mpu_irqs[] = { +- { .irq = INT_24XX_UART1_IRQ, }, ++ { .irq = 0, }, + }; + + static struct omap_hwmod_dma_info uart1_sdma_reqs[] = { +Index: linux-2.6.38-rc7/arch/arm/mach-omap2/serial.c +=================================================================== +--- linux-2.6.38-rc7.orig/arch/arm/mach-omap2/serial.c 2011-03-07 16:06:21.934958270 +0100 ++++ linux-2.6.38-rc7/arch/arm/mach-omap2/serial.c 2011-03-07 16:08:59.649922915 +0100 +@@ -546,10 +546,12 @@ static void omap_uart_idle_init(struct o + uart->padconf = 0; + } + +- uart->irqflags |= IRQF_SHARED; +- ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt, +- IRQF_SHARED, "serial idle", (void *)uart); +- WARN_ON(ret); ++ if (uart->irq) { ++ uart->irqflags |= IRQF_SHARED; ++ ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt, ++ IRQF_SHARED, "serial idle", (void *)uart); ++ WARN_ON(ret); ++ } + } + + void omap_uart_enable_irqs(int enable) +@@ -560,14 +562,17 @@ void omap_uart_enable_irqs(int enable) + list_for_each_entry(uart, &uart_list, node) { + if (enable) { + pm_runtime_put_sync(&uart->pdev->dev); +- ret = request_threaded_irq(uart->irq, NULL, +- omap_uart_interrupt, +- IRQF_SHARED, +- "serial idle", +- (void *)uart); ++ if (uart->irq) { ++ ret = request_threaded_irq(uart->irq, NULL, ++ omap_uart_interrupt, ++ IRQF_SHARED, ++ "serial idle", ++ (void *)uart); ++ } + } else { + pm_runtime_get_noresume(&uart->pdev->dev); +- free_irq(uart->irq, (void *)uart); ++ if (uart->irq) ++ free_irq(uart->irq, (void *)uart); + } + } + } diff --git a/target/linux/omap24xx/patches-2.6.38/830-omap2-serial-fixes.patch b/target/linux/omap24xx/patches-2.6.38/830-omap2-serial-fixes.patch index 2a29a8e47f..e503b0e595 100644 --- a/target/linux/omap24xx/patches-2.6.38/830-omap2-serial-fixes.patch +++ b/target/linux/omap24xx/patches-2.6.38/830-omap2-serial-fixes.patch @@ -1,8 +1,8 @@ -Index: linux-2.6.38-rc6/arch/arm/mach-omap2/serial.c +Index: linux-2.6.38-rc7/arch/arm/mach-omap2/serial.c =================================================================== ---- linux-2.6.38-rc6.orig/arch/arm/mach-omap2/serial.c 2011-02-22 02:25:52.000000000 +0100 -+++ linux-2.6.38-rc6/arch/arm/mach-omap2/serial.c 2011-02-26 22:17:38.356027926 +0100 -@@ -655,6 +655,8 @@ +--- linux-2.6.38-rc7.orig/arch/arm/mach-omap2/serial.c 2011-03-07 17:24:16.786259530 +0100 ++++ linux-2.6.38-rc7/arch/arm/mach-omap2/serial.c 2011-03-07 17:24:18.951998600 +0100 +@@ -660,6 +660,8 @@ static void serial_out_override(struct u } #endif @@ -11,7 +11,7 @@ Index: linux-2.6.38-rc6/arch/arm/mach-omap2/serial.c void __init omap_serial_early_init(void) { int i = 0; -@@ -670,9 +672,9 @@ +@@ -675,9 +677,9 @@ void __init omap_serial_early_init(void) if (!oh) break; -- 2.30.2