Root/target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch

1--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
2+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
3@@ -362,7 +362,7 @@ static struct omap_hwmod_class uart_clas
4 /* UART1 */
5 
6 static struct omap_hwmod_irq_info uart1_mpu_irqs[] = {
7- { .irq = INT_24XX_UART1_IRQ, },
8+ { .irq = 0, },
9 };
10 
11 static struct omap_hwmod_dma_info uart1_sdma_reqs[] = {
12--- a/arch/arm/mach-omap2/serial.c
13+++ b/arch/arm/mach-omap2/serial.c
14@@ -546,10 +546,12 @@ static void omap_uart_idle_init(struct o
15         uart->padconf = 0;
16     }
17 
18- uart->irqflags |= IRQF_SHARED;
19- ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt,
20- IRQF_SHARED, "serial idle", (void *)uart);
21- WARN_ON(ret);
22+ if (uart->irq) {
23+ uart->irqflags |= IRQF_SHARED;
24+ ret = request_threaded_irq(uart->irq, NULL, omap_uart_interrupt,
25+ IRQF_SHARED, "serial idle", (void *)uart);
26+ WARN_ON(ret);
27+ }
28 }
29 
30 void omap_uart_enable_irqs(int enable)
31@@ -560,14 +562,17 @@ void omap_uart_enable_irqs(int enable)
32     list_for_each_entry(uart, &uart_list, node) {
33         if (enable) {
34             pm_runtime_put_sync(&uart->pdev->dev);
35- ret = request_threaded_irq(uart->irq, NULL,
36- omap_uart_interrupt,
37- IRQF_SHARED,
38- "serial idle",
39- (void *)uart);
40+ if (uart->irq) {
41+ ret = request_threaded_irq(uart->irq, NULL,
42+ omap_uart_interrupt,
43+ IRQF_SHARED,
44+ "serial idle",
45+ (void *)uart);
46+ }
47         } else {
48             pm_runtime_get_noresume(&uart->pdev->dev);
49- free_irq(uart->irq, (void *)uart);
50+ if (uart->irq)
51+ free_irq(uart->irq, (void *)uart);
52         }
53     }
54 }
55

Archive Download this file



interactive