diff options
Diffstat (limited to 'arch/arm/mach-gemini')
-rw-r--r-- | arch/arm/mach-gemini/board-nas4220b.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-gemini/board-rut1xx.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-gemini/board-wbd111.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-gemini/board-wbd222.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-gemini/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-gemini/devices.c | 26 | ||||
-rw-r--r-- | arch/arm/mach-gemini/gpio.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-gemini/include/mach/debug-macro.S | 8 | ||||
-rw-r--r-- | arch/arm/mach-gemini/include/mach/hardware.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-gemini/include/mach/memory.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-gemini/include/mach/uncompress.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-gemini/irq.c | 26 |
12 files changed, 72 insertions, 63 deletions
diff --git a/arch/arm/mach-gemini/board-nas4220b.c b/arch/arm/mach-gemini/board-nas4220b.c index 01f1d6daab44..0cf7a07c3f3f 100644 --- a/arch/arm/mach-gemini/board-nas4220b.c +++ b/arch/arm/mach-gemini/board-nas4220b.c | |||
@@ -98,11 +98,10 @@ static void __init ib4220b_init(void) | |||
98 | platform_register_pflash(SZ_16M, NULL, 0); | 98 | platform_register_pflash(SZ_16M, NULL, 0); |
99 | platform_device_register(&ib4220b_led_device); | 99 | platform_device_register(&ib4220b_led_device); |
100 | platform_device_register(&ib4220b_key_device); | 100 | platform_device_register(&ib4220b_key_device); |
101 | platform_register_rtc(); | ||
101 | } | 102 | } |
102 | 103 | ||
103 | MACHINE_START(NAS4220B, "Raidsonic NAS IB-4220-B") | 104 | MACHINE_START(NAS4220B, "Raidsonic NAS IB-4220-B") |
104 | .phys_io = 0x7fffc000, | ||
105 | .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc, | ||
106 | .boot_params = 0x100, | 105 | .boot_params = 0x100, |
107 | .map_io = gemini_map_io, | 106 | .map_io = gemini_map_io, |
108 | .init_irq = gemini_init_irq, | 107 | .init_irq = gemini_init_irq, |
diff --git a/arch/arm/mach-gemini/board-rut1xx.c b/arch/arm/mach-gemini/board-rut1xx.c index e0de968e32a6..4fa09af99495 100644 --- a/arch/arm/mach-gemini/board-rut1xx.c +++ b/arch/arm/mach-gemini/board-rut1xx.c | |||
@@ -82,11 +82,10 @@ static void __init rut1xx_init(void) | |||
82 | platform_register_pflash(SZ_8M, NULL, 0); | 82 | platform_register_pflash(SZ_8M, NULL, 0); |
83 | platform_device_register(&rut1xx_leds); | 83 | platform_device_register(&rut1xx_leds); |
84 | platform_device_register(&rut1xx_keys_device); | 84 | platform_device_register(&rut1xx_keys_device); |
85 | platform_register_rtc(); | ||
85 | } | 86 | } |
86 | 87 | ||
87 | MACHINE_START(RUT100, "Teltonika RUT100") | 88 | MACHINE_START(RUT100, "Teltonika RUT100") |
88 | .phys_io = 0x7fffc000, | ||
89 | .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc, | ||
90 | .boot_params = 0x100, | 89 | .boot_params = 0x100, |
91 | .map_io = gemini_map_io, | 90 | .map_io = gemini_map_io, |
92 | .init_irq = gemini_init_irq, | 91 | .init_irq = gemini_init_irq, |
diff --git a/arch/arm/mach-gemini/board-wbd111.c b/arch/arm/mach-gemini/board-wbd111.c index 36538c15b3c4..88cc422ee444 100644 --- a/arch/arm/mach-gemini/board-wbd111.c +++ b/arch/arm/mach-gemini/board-wbd111.c | |||
@@ -84,7 +84,6 @@ static struct sys_timer wbd111_timer = { | |||
84 | .init = gemini_timer_init, | 84 | .init = gemini_timer_init, |
85 | }; | 85 | }; |
86 | 86 | ||
87 | #ifdef CONFIG_MTD_PARTITIONS | ||
88 | static struct mtd_partition wbd111_partitions[] = { | 87 | static struct mtd_partition wbd111_partitions[] = { |
89 | { | 88 | { |
90 | .name = "RedBoot", | 89 | .name = "RedBoot", |
@@ -116,11 +115,7 @@ static struct mtd_partition wbd111_partitions[] = { | |||
116 | .mask_flags = MTD_WRITEABLE, | 115 | .mask_flags = MTD_WRITEABLE, |
117 | } | 116 | } |
118 | }; | 117 | }; |
119 | #define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions) | 118 | #define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions) |
120 | #else | ||
121 | #define wbd111_partitions NULL | ||
122 | #define wbd111_num_partitions 0 | ||
123 | #endif /* CONFIG_MTD_PARTITIONS */ | ||
124 | 119 | ||
125 | static void __init wbd111_init(void) | 120 | static void __init wbd111_init(void) |
126 | { | 121 | { |
@@ -130,11 +125,10 @@ static void __init wbd111_init(void) | |||
130 | wbd111_num_partitions); | 125 | wbd111_num_partitions); |
131 | platform_device_register(&wbd111_leds_device); | 126 | platform_device_register(&wbd111_leds_device); |
132 | platform_device_register(&wbd111_keys_device); | 127 | platform_device_register(&wbd111_keys_device); |
128 | platform_register_rtc(); | ||
133 | } | 129 | } |
134 | 130 | ||
135 | MACHINE_START(WBD111, "Wiliboard WBD-111") | 131 | MACHINE_START(WBD111, "Wiliboard WBD-111") |
136 | .phys_io = 0x7fffc000, | ||
137 | .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc, | ||
138 | .boot_params = 0x100, | 132 | .boot_params = 0x100, |
139 | .map_io = gemini_map_io, | 133 | .map_io = gemini_map_io, |
140 | .init_irq = gemini_init_irq, | 134 | .init_irq = gemini_init_irq, |
diff --git a/arch/arm/mach-gemini/board-wbd222.c b/arch/arm/mach-gemini/board-wbd222.c index ece8b4c65110..3a220347bc88 100644 --- a/arch/arm/mach-gemini/board-wbd222.c +++ b/arch/arm/mach-gemini/board-wbd222.c | |||
@@ -84,7 +84,6 @@ static struct sys_timer wbd222_timer = { | |||
84 | .init = gemini_timer_init, | 84 | .init = gemini_timer_init, |
85 | }; | 85 | }; |
86 | 86 | ||
87 | #ifdef CONFIG_MTD_PARTITIONS | ||
88 | static struct mtd_partition wbd222_partitions[] = { | 87 | static struct mtd_partition wbd222_partitions[] = { |
89 | { | 88 | { |
90 | .name = "RedBoot", | 89 | .name = "RedBoot", |
@@ -116,11 +115,7 @@ static struct mtd_partition wbd222_partitions[] = { | |||
116 | .mask_flags = MTD_WRITEABLE, | 115 | .mask_flags = MTD_WRITEABLE, |
117 | } | 116 | } |
118 | }; | 117 | }; |
119 | #define wbd222_num_partitions ARRAY_SIZE(wbd222_partitions) | 118 | #define wbd222_num_partitions ARRAY_SIZE(wbd222_partitions) |
120 | #else | ||
121 | #define wbd222_partitions NULL | ||
122 | #define wbd222_num_partitions 0 | ||
123 | #endif /* CONFIG_MTD_PARTITIONS */ | ||
124 | 119 | ||
125 | static void __init wbd222_init(void) | 120 | static void __init wbd222_init(void) |
126 | { | 121 | { |
@@ -130,11 +125,10 @@ static void __init wbd222_init(void) | |||
130 | wbd222_num_partitions); | 125 | wbd222_num_partitions); |
131 | platform_device_register(&wbd222_leds_device); | 126 | platform_device_register(&wbd222_leds_device); |
132 | platform_device_register(&wbd222_keys_device); | 127 | platform_device_register(&wbd222_keys_device); |
128 | platform_register_rtc(); | ||
133 | } | 129 | } |
134 | 130 | ||
135 | MACHINE_START(WBD222, "Wiliboard WBD-222") | 131 | MACHINE_START(WBD222, "Wiliboard WBD-222") |
136 | .phys_io = 0x7fffc000, | ||
137 | .io_pg_offst = ((0xffffc000) >> 18) & 0xfffc, | ||
138 | .boot_params = 0x100, | 132 | .boot_params = 0x100, |
139 | .map_io = gemini_map_io, | 133 | .map_io = gemini_map_io, |
140 | .init_irq = gemini_init_irq, | 134 | .init_irq = gemini_init_irq, |
diff --git a/arch/arm/mach-gemini/common.h b/arch/arm/mach-gemini/common.h index 9392834a214f..7670c39acb2f 100644 --- a/arch/arm/mach-gemini/common.h +++ b/arch/arm/mach-gemini/common.h | |||
@@ -18,6 +18,7 @@ extern void gemini_map_io(void); | |||
18 | extern void gemini_init_irq(void); | 18 | extern void gemini_init_irq(void); |
19 | extern void gemini_timer_init(void); | 19 | extern void gemini_timer_init(void); |
20 | extern void gemini_gpio_init(void); | 20 | extern void gemini_gpio_init(void); |
21 | extern void platform_register_rtc(void); | ||
21 | 22 | ||
22 | /* Common platform devices registration functions */ | 23 | /* Common platform devices registration functions */ |
23 | extern int platform_register_uart(void); | 24 | extern int platform_register_uart(void); |
diff --git a/arch/arm/mach-gemini/devices.c b/arch/arm/mach-gemini/devices.c index 6b525253d027..5cff29818b73 100644 --- a/arch/arm/mach-gemini/devices.c +++ b/arch/arm/mach-gemini/devices.c | |||
@@ -90,3 +90,29 @@ int platform_register_pflash(unsigned int size, struct mtd_partition *parts, | |||
90 | 90 | ||
91 | return platform_device_register(&pflash_device); | 91 | return platform_device_register(&pflash_device); |
92 | } | 92 | } |
93 | |||
94 | static struct resource gemini_rtc_resources[] = { | ||
95 | [0] = { | ||
96 | .start = GEMINI_RTC_BASE, | ||
97 | .end = GEMINI_RTC_BASE + 0x24, | ||
98 | .flags = IORESOURCE_MEM, | ||
99 | }, | ||
100 | [1] = { | ||
101 | .start = IRQ_RTC, | ||
102 | .end = IRQ_RTC, | ||
103 | .flags = IORESOURCE_IRQ, | ||
104 | }, | ||
105 | }; | ||
106 | |||
107 | static struct platform_device gemini_rtc_device = { | ||
108 | .name = "rtc-gemini", | ||
109 | .id = 0, | ||
110 | .num_resources = ARRAY_SIZE(gemini_rtc_resources), | ||
111 | .resource = gemini_rtc_resources, | ||
112 | }; | ||
113 | |||
114 | int __init platform_register_rtc(void) | ||
115 | { | ||
116 | return platform_device_register(&gemini_rtc_device); | ||
117 | } | ||
118 | |||
diff --git a/arch/arm/mach-gemini/gpio.c b/arch/arm/mach-gemini/gpio.c index fe3bd5ac8b10..fdc7ef1391d3 100644 --- a/arch/arm/mach-gemini/gpio.c +++ b/arch/arm/mach-gemini/gpio.c | |||
@@ -54,33 +54,33 @@ static void _set_gpio_irqenable(unsigned int base, unsigned int index, | |||
54 | __raw_writel(reg, base + GPIO_INT_EN); | 54 | __raw_writel(reg, base + GPIO_INT_EN); |
55 | } | 55 | } |
56 | 56 | ||
57 | static void gpio_ack_irq(unsigned int irq) | 57 | static void gpio_ack_irq(struct irq_data *d) |
58 | { | 58 | { |
59 | unsigned int gpio = irq_to_gpio(irq); | 59 | unsigned int gpio = irq_to_gpio(d->irq); |
60 | unsigned int base = GPIO_BASE(gpio / 32); | 60 | unsigned int base = GPIO_BASE(gpio / 32); |
61 | 61 | ||
62 | __raw_writel(1 << (gpio % 32), base + GPIO_INT_CLR); | 62 | __raw_writel(1 << (gpio % 32), base + GPIO_INT_CLR); |
63 | } | 63 | } |
64 | 64 | ||
65 | static void gpio_mask_irq(unsigned int irq) | 65 | static void gpio_mask_irq(struct irq_data *d) |
66 | { | 66 | { |
67 | unsigned int gpio = irq_to_gpio(irq); | 67 | unsigned int gpio = irq_to_gpio(d->irq); |
68 | unsigned int base = GPIO_BASE(gpio / 32); | 68 | unsigned int base = GPIO_BASE(gpio / 32); |
69 | 69 | ||
70 | _set_gpio_irqenable(base, gpio % 32, 0); | 70 | _set_gpio_irqenable(base, gpio % 32, 0); |
71 | } | 71 | } |
72 | 72 | ||
73 | static void gpio_unmask_irq(unsigned int irq) | 73 | static void gpio_unmask_irq(struct irq_data *d) |
74 | { | 74 | { |
75 | unsigned int gpio = irq_to_gpio(irq); | 75 | unsigned int gpio = irq_to_gpio(d->irq); |
76 | unsigned int base = GPIO_BASE(gpio / 32); | 76 | unsigned int base = GPIO_BASE(gpio / 32); |
77 | 77 | ||
78 | _set_gpio_irqenable(base, gpio % 32, 1); | 78 | _set_gpio_irqenable(base, gpio % 32, 1); |
79 | } | 79 | } |
80 | 80 | ||
81 | static int gpio_set_irq_type(unsigned int irq, unsigned int type) | 81 | static int gpio_set_irq_type(struct irq_data *d, unsigned int type) |
82 | { | 82 | { |
83 | unsigned int gpio = irq_to_gpio(irq); | 83 | unsigned int gpio = irq_to_gpio(d->irq); |
84 | unsigned int gpio_mask = 1 << (gpio % 32); | 84 | unsigned int gpio_mask = 1 << (gpio % 32); |
85 | unsigned int base = GPIO_BASE(gpio / 32); | 85 | unsigned int base = GPIO_BASE(gpio / 32); |
86 | unsigned int reg_both, reg_level, reg_type; | 86 | unsigned int reg_both, reg_level, reg_type; |
@@ -120,15 +120,15 @@ static int gpio_set_irq_type(unsigned int irq, unsigned int type) | |||
120 | __raw_writel(reg_level, base + GPIO_INT_LEVEL); | 120 | __raw_writel(reg_level, base + GPIO_INT_LEVEL); |
121 | __raw_writel(reg_both, base + GPIO_INT_BOTH_EDGE); | 121 | __raw_writel(reg_both, base + GPIO_INT_BOTH_EDGE); |
122 | 122 | ||
123 | gpio_ack_irq(irq); | 123 | gpio_ack_irq(d->irq); |
124 | 124 | ||
125 | return 0; | 125 | return 0; |
126 | } | 126 | } |
127 | 127 | ||
128 | static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | 128 | static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) |
129 | { | 129 | { |
130 | unsigned int port = (unsigned int)irq_desc_get_handler_data(desc); | ||
130 | unsigned int gpio_irq_no, irq_stat; | 131 | unsigned int gpio_irq_no, irq_stat; |
131 | unsigned int port = (unsigned int)get_irq_data(irq); | ||
132 | 132 | ||
133 | irq_stat = __raw_readl(GPIO_BASE(port) + GPIO_INT_STAT); | 133 | irq_stat = __raw_readl(GPIO_BASE(port) + GPIO_INT_STAT); |
134 | 134 | ||
@@ -138,18 +138,16 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
138 | if ((irq_stat & 1) == 0) | 138 | if ((irq_stat & 1) == 0) |
139 | continue; | 139 | continue; |
140 | 140 | ||
141 | BUG_ON(!(irq_desc[gpio_irq_no].handle_irq)); | 141 | generic_handle_irq(gpio_irq_no); |
142 | irq_desc[gpio_irq_no].handle_irq(gpio_irq_no, | ||
143 | &irq_desc[gpio_irq_no]); | ||
144 | } | 142 | } |
145 | } | 143 | } |
146 | 144 | ||
147 | static struct irq_chip gpio_irq_chip = { | 145 | static struct irq_chip gpio_irq_chip = { |
148 | .name = "GPIO", | 146 | .name = "GPIO", |
149 | .ack = gpio_ack_irq, | 147 | .irq_ack = gpio_ack_irq, |
150 | .mask = gpio_mask_irq, | 148 | .irq_mask = gpio_mask_irq, |
151 | .unmask = gpio_unmask_irq, | 149 | .irq_unmask = gpio_unmask_irq, |
152 | .set_type = gpio_set_irq_type, | 150 | .irq_set_type = gpio_set_irq_type, |
153 | }; | 151 | }; |
154 | 152 | ||
155 | static void _set_gpio_direction(struct gpio_chip *chip, unsigned offset, | 153 | static void _set_gpio_direction(struct gpio_chip *chip, unsigned offset, |
@@ -219,13 +217,13 @@ void __init gemini_gpio_init(void) | |||
219 | 217 | ||
220 | for (j = GPIO_IRQ_BASE + i * 32; | 218 | for (j = GPIO_IRQ_BASE + i * 32; |
221 | j < GPIO_IRQ_BASE + (i + 1) * 32; j++) { | 219 | j < GPIO_IRQ_BASE + (i + 1) * 32; j++) { |
222 | set_irq_chip(j, &gpio_irq_chip); | 220 | irq_set_chip_and_handler(j, &gpio_irq_chip, |
223 | set_irq_handler(j, handle_edge_irq); | 221 | handle_edge_irq); |
224 | set_irq_flags(j, IRQF_VALID); | 222 | set_irq_flags(j, IRQF_VALID); |
225 | } | 223 | } |
226 | 224 | ||
227 | set_irq_chained_handler(IRQ_GPIO(i), gpio_irq_handler); | 225 | irq_set_chained_handler(IRQ_GPIO(i), gpio_irq_handler); |
228 | set_irq_data(IRQ_GPIO(i), (void *)i); | 226 | irq_set_handler_data(IRQ_GPIO(i), (void *)i); |
229 | } | 227 | } |
230 | 228 | ||
231 | BUG_ON(gpiochip_add(&gemini_gpio_chip)); | 229 | BUG_ON(gpiochip_add(&gemini_gpio_chip)); |
diff --git a/arch/arm/mach-gemini/include/mach/debug-macro.S b/arch/arm/mach-gemini/include/mach/debug-macro.S index ad477047069d..f40e006d296e 100644 --- a/arch/arm/mach-gemini/include/mach/debug-macro.S +++ b/arch/arm/mach-gemini/include/mach/debug-macro.S | |||
@@ -11,11 +11,9 @@ | |||
11 | */ | 11 | */ |
12 | #include <mach/hardware.h> | 12 | #include <mach/hardware.h> |
13 | 13 | ||
14 | .macro addruart, rx, tmp | 14 | .macro addruart, rp, rv |
15 | mrc p15, 0, \rx, c1, c0 | 15 | ldr \rp, =GEMINI_UART_BASE @ physical |
16 | tst \rx, #1 @ MMU enabled? | 16 | ldr \rv, =IO_ADDRESS(GEMINI_UART_BASE) @ virtual |
17 | ldreq \rx, =GEMINI_UART_BASE @ physical | ||
18 | ldrne \rx, =IO_ADDRESS(GEMINI_UART_BASE) @ virtual | ||
19 | .endm | 17 | .endm |
20 | 18 | ||
21 | #define UART_SHIFT 2 | 19 | #define UART_SHIFT 2 |
diff --git a/arch/arm/mach-gemini/include/mach/hardware.h b/arch/arm/mach-gemini/include/mach/hardware.h index 213a4fcfeb1c..8c950e1d06be 100644 --- a/arch/arm/mach-gemini/include/mach/hardware.h +++ b/arch/arm/mach-gemini/include/mach/hardware.h | |||
@@ -33,7 +33,7 @@ | |||
33 | #define GEMINI_LPC_HOST_BASE 0x47000000 | 33 | #define GEMINI_LPC_HOST_BASE 0x47000000 |
34 | #define GEMINI_LPC_IO_BASE 0x47800000 | 34 | #define GEMINI_LPC_IO_BASE 0x47800000 |
35 | #define GEMINI_INTERRUPT_BASE 0x48000000 | 35 | #define GEMINI_INTERRUPT_BASE 0x48000000 |
36 | /* TODO: Different interrupt controlers when SMP | 36 | /* TODO: Different interrupt controllers when SMP |
37 | * #define GEMINI_INTERRUPT0_BASE 0x48000000 | 37 | * #define GEMINI_INTERRUPT0_BASE 0x48000000 |
38 | * #define GEMINI_INTERRUPT1_BASE 0x49000000 | 38 | * #define GEMINI_INTERRUPT1_BASE 0x49000000 |
39 | */ | 39 | */ |
diff --git a/arch/arm/mach-gemini/include/mach/memory.h b/arch/arm/mach-gemini/include/mach/memory.h index 2d14d5bf1f9f..a50915f764d8 100644 --- a/arch/arm/mach-gemini/include/mach/memory.h +++ b/arch/arm/mach-gemini/include/mach/memory.h | |||
@@ -11,9 +11,9 @@ | |||
11 | #define __MACH_MEMORY_H | 11 | #define __MACH_MEMORY_H |
12 | 12 | ||
13 | #ifdef CONFIG_GEMINI_MEM_SWAP | 13 | #ifdef CONFIG_GEMINI_MEM_SWAP |
14 | # define PHYS_OFFSET UL(0x00000000) | 14 | # define PLAT_PHYS_OFFSET UL(0x00000000) |
15 | #else | 15 | #else |
16 | # define PHYS_OFFSET UL(0x10000000) | 16 | # define PLAT_PHYS_OFFSET UL(0x10000000) |
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | #endif /* __MACH_MEMORY_H */ | 19 | #endif /* __MACH_MEMORY_H */ |
diff --git a/arch/arm/mach-gemini/include/mach/uncompress.h b/arch/arm/mach-gemini/include/mach/uncompress.h index 5483f61a8061..0efa26247235 100644 --- a/arch/arm/mach-gemini/include/mach/uncompress.h +++ b/arch/arm/mach-gemini/include/mach/uncompress.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/serial_reg.h> | 16 | #include <linux/serial_reg.h> |
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | 18 | ||
19 | static volatile unsigned long *UART = (unsigned long *)GEMINI_UART_BASE; | 19 | static volatile unsigned long * const UART = (unsigned long *)GEMINI_UART_BASE; |
20 | 20 | ||
21 | /* | 21 | /* |
22 | * The following code assumes the serial port has already been | 22 | * The following code assumes the serial port has already been |
diff --git a/arch/arm/mach-gemini/irq.c b/arch/arm/mach-gemini/irq.c index 9e613ca8120d..9485a8fdf851 100644 --- a/arch/arm/mach-gemini/irq.c +++ b/arch/arm/mach-gemini/irq.c | |||
@@ -32,34 +32,34 @@ | |||
32 | #define FIQ_LEVEL(base_addr) (base_addr + 0x30) | 32 | #define FIQ_LEVEL(base_addr) (base_addr + 0x30) |
33 | #define FIQ_STATUS(base_addr) (base_addr + 0x34) | 33 | #define FIQ_STATUS(base_addr) (base_addr + 0x34) |
34 | 34 | ||
35 | static void gemini_ack_irq(unsigned int irq) | 35 | static void gemini_ack_irq(struct irq_data *d) |
36 | { | 36 | { |
37 | __raw_writel(1 << irq, IRQ_CLEAR(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); | 37 | __raw_writel(1 << d->irq, IRQ_CLEAR(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); |
38 | } | 38 | } |
39 | 39 | ||
40 | static void gemini_mask_irq(unsigned int irq) | 40 | static void gemini_mask_irq(struct irq_data *d) |
41 | { | 41 | { |
42 | unsigned int mask; | 42 | unsigned int mask; |
43 | 43 | ||
44 | mask = __raw_readl(IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); | 44 | mask = __raw_readl(IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); |
45 | mask &= ~(1 << irq); | 45 | mask &= ~(1 << d->irq); |
46 | __raw_writel(mask, IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); | 46 | __raw_writel(mask, IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); |
47 | } | 47 | } |
48 | 48 | ||
49 | static void gemini_unmask_irq(unsigned int irq) | 49 | static void gemini_unmask_irq(struct irq_data *d) |
50 | { | 50 | { |
51 | unsigned int mask; | 51 | unsigned int mask; |
52 | 52 | ||
53 | mask = __raw_readl(IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); | 53 | mask = __raw_readl(IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); |
54 | mask |= (1 << irq); | 54 | mask |= (1 << d->irq); |
55 | __raw_writel(mask, IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); | 55 | __raw_writel(mask, IRQ_MASK(IO_ADDRESS(GEMINI_INTERRUPT_BASE))); |
56 | } | 56 | } |
57 | 57 | ||
58 | static struct irq_chip gemini_irq_chip = { | 58 | static struct irq_chip gemini_irq_chip = { |
59 | .name = "INTC", | 59 | .name = "INTC", |
60 | .ack = gemini_ack_irq, | 60 | .irq_ack = gemini_ack_irq, |
61 | .mask = gemini_mask_irq, | 61 | .irq_mask = gemini_mask_irq, |
62 | .unmask = gemini_unmask_irq, | 62 | .irq_unmask = gemini_unmask_irq, |
63 | }; | 63 | }; |
64 | 64 | ||
65 | static struct resource irq_resource = { | 65 | static struct resource irq_resource = { |
@@ -81,13 +81,13 @@ void __init gemini_init_irq(void) | |||
81 | request_resource(&iomem_resource, &irq_resource); | 81 | request_resource(&iomem_resource, &irq_resource); |
82 | 82 | ||
83 | for (i = 0; i < NR_IRQS; i++) { | 83 | for (i = 0; i < NR_IRQS; i++) { |
84 | set_irq_chip(i, &gemini_irq_chip); | 84 | irq_set_chip(i, &gemini_irq_chip); |
85 | if((i >= IRQ_TIMER1 && i <= IRQ_TIMER3) || (i >= IRQ_SERIRQ0 && i <= IRQ_SERIRQ1)) { | 85 | if((i >= IRQ_TIMER1 && i <= IRQ_TIMER3) || (i >= IRQ_SERIRQ0 && i <= IRQ_SERIRQ1)) { |
86 | set_irq_handler(i, handle_edge_irq); | 86 | irq_set_handler(i, handle_edge_irq); |
87 | mode |= 1 << i; | 87 | mode |= 1 << i; |
88 | level |= 1 << i; | 88 | level |= 1 << i; |
89 | } else { | 89 | } else { |
90 | set_irq_handler(i, handle_level_irq); | 90 | irq_set_handler(i, handle_level_irq); |
91 | } | 91 | } |
92 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); | 92 | set_irq_flags(i, IRQF_VALID | IRQF_PROBE); |
93 | } | 93 | } |