summaryrefslogtreecommitdiff
path: root/target/linux/omap24xx/patches-3.1/420-hci-h4p-interrupt-workaround.patch
blob: 4e7c44018c498c14ddfcae50d56ccf609f62367f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -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);
 		}
 	}
 }
--- a/arch/arm/mach-omap2/omap_hwmod_2xxx_3xxx_ipblock_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_3xxx_ipblock_data.c
@@ -253,7 +253,7 @@ struct omap_hwmod_irq_info omap2_timer11
 };
 
 struct omap_hwmod_irq_info omap2_uart1_mpu_irqs[] = {
-	{ .irq = INT_24XX_UART1_IRQ, },
+	{ .irq = 0, },
 	{ .irq = -1 }
 };