summaryrefslogtreecommitdiffstats
path: root/target/linux/omap24xx/patches-2.6.38/420-hci-h4p-interrupt-workaround.patch
blob: 829de435cb24f2cbf0d747b555a8362875dd7eb7 (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/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -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[] = {
--- 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);
 		}
 	}
 }