Merge branch 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'irq-cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (23 commits)
genirq: Expand generic show_interrupts()
gpio: Fold irq_set_chip/irq_set_handler to irq_set_chip_and_handler
gpio: Cleanup genirq namespace
arm: ep93xx: Add basic interrupt info
arm/gpio: Remove three copies of broken and racy debug code
xtensa: Use generic show_interrupts()
xtensa: Convert genirq namespace
xtensa: Use generic IRQ Kconfig and set GENERIC_HARDIRQS_NO_DEPRECATED
xtensa: Convert s6000 gpio irq_chip to new functions
xtensa: Convert main irq_chip to new functions
um: Use generic show_interrupts()
um: Convert genirq namespace
m32r: Use generic show_interrupts()
m32r: Convert genirq namespace
h8300: Use generic show_interrupts()
h8300: Convert genirq namespace
avr32: Cleanup eic_set_irq_type()
avr32: Use generic show_interrupts()
avr: Cleanup genirq namespace
avr32: Use generic IRQ config, enable GENERIC_HARDIRQS_NO_DEPRECATED
...

Fix up trivial conflict in drivers/gpio/timbgpio.c

+283 -602
+4 -42
arch/arm/mach-ep93xx/gpio.c
··· 360 gpio = ep93xx_chip->chip.base; 361 for (i = 0; i < chip->ngpio; i++, gpio++) { 362 int is_out = data_dir_reg & (1 << i); 363 364 - seq_printf(s, " %s%d gpio-%-3d (%-12s) %s %s", 365 chip->label, i, gpio, 366 gpiochip_is_requested(chip, i) ? : "", 367 is_out ? "out" : "in ", 368 - (data_reg & (1 << i)) ? "hi" : "lo"); 369 - 370 - if (!is_out) { 371 - int irq = gpio_to_irq(gpio); 372 - struct irq_desc *desc = irq_desc + irq; 373 - 374 - if (irq >= 0 && desc->action) { 375 - char *trigger; 376 - 377 - switch (desc->status & IRQ_TYPE_SENSE_MASK) { 378 - case IRQ_TYPE_NONE: 379 - trigger = "(default)"; 380 - break; 381 - case IRQ_TYPE_EDGE_FALLING: 382 - trigger = "edge-falling"; 383 - break; 384 - case IRQ_TYPE_EDGE_RISING: 385 - trigger = "edge-rising"; 386 - break; 387 - case IRQ_TYPE_EDGE_BOTH: 388 - trigger = "edge-both"; 389 - break; 390 - case IRQ_TYPE_LEVEL_HIGH: 391 - trigger = "level-high"; 392 - break; 393 - case IRQ_TYPE_LEVEL_LOW: 394 - trigger = "level-low"; 395 - break; 396 - default: 397 - trigger = "?trigger?"; 398 - break; 399 - } 400 - 401 - seq_printf(s, " irq-%d %s%s", 402 - irq, trigger, 403 - (desc->status & IRQ_WAKEUP) 404 - ? " wakeup" : ""); 405 - } 406 - } 407 - 408 - seq_printf(s, "\n"); 409 } 410 } 411
··· 360 gpio = ep93xx_chip->chip.base; 361 for (i = 0; i < chip->ngpio; i++, gpio++) { 362 int is_out = data_dir_reg & (1 << i); 363 + int irq = gpio_to_irq(gpio); 364 365 + seq_printf(s, " %s%d gpio-%-3d (%-12s) %s %s %s\n", 366 chip->label, i, gpio, 367 gpiochip_is_requested(chip, i) ? : "", 368 is_out ? "out" : "in ", 369 + (data_reg & (1<< i)) ? "hi" : "lo", 370 + (!is_out && irq>= 0) ? "(interrupt)" : ""); 371 } 372 } 373
-45
arch/arm/plat-nomadik/gpio.c
··· 832 : "? ", 833 (mode < 0) ? "unknown" : modes[mode], 834 pull ? "pull" : "none"); 835 - 836 - if (!is_out) { 837 - int irq = gpio_to_irq(gpio); 838 - struct irq_desc *desc = irq_to_desc(irq); 839 - 840 - /* This races with request_irq(), set_irq_type(), 841 - * and set_irq_wake() ... but those are "rare". 842 - * 843 - * More significantly, trigger type flags aren't 844 - * currently maintained by genirq. 845 - */ 846 - if (irq >= 0 && desc->action) { 847 - char *trigger; 848 - 849 - switch (desc->status & IRQ_TYPE_SENSE_MASK) { 850 - case IRQ_TYPE_NONE: 851 - trigger = "(default)"; 852 - break; 853 - case IRQ_TYPE_EDGE_FALLING: 854 - trigger = "edge-falling"; 855 - break; 856 - case IRQ_TYPE_EDGE_RISING: 857 - trigger = "edge-rising"; 858 - break; 859 - case IRQ_TYPE_EDGE_BOTH: 860 - trigger = "edge-both"; 861 - break; 862 - case IRQ_TYPE_LEVEL_HIGH: 863 - trigger = "level-high"; 864 - break; 865 - case IRQ_TYPE_LEVEL_LOW: 866 - trigger = "level-low"; 867 - break; 868 - default: 869 - trigger = "?trigger?"; 870 - break; 871 - } 872 - 873 - seq_printf(s, " irq-%d %s%s", 874 - irq, trigger, 875 - (desc->status & IRQ_WAKEUP) 876 - ? " wakeup" : ""); 877 - } 878 - } 879 - 880 seq_printf(s, "\n"); 881 } 882 }
··· 832 : "? ", 833 (mode < 0) ? "unknown" : modes[mode], 834 pull ? "pull" : "none"); 835 seq_printf(s, "\n"); 836 } 837 }
+5 -9
arch/avr32/Kconfig
··· 6 select HAVE_CLK 7 select HAVE_OPROFILE 8 select HAVE_KPROBES 9 help 10 AVR32 is a high-performance 32-bit RISC microprocessor core, 11 designed for cost-sensitive embedded applications, with particular ··· 22 config GENERIC_GPIO 23 def_bool y 24 25 - config GENERIC_HARDIRQS 26 - def_bool y 27 - 28 config STACKTRACE_SUPPORT 29 def_bool y 30 ··· 29 def_bool y 30 31 config TRACE_IRQFLAGS_SUPPORT 32 - def_bool y 33 - 34 - config HARDIRQS_SW_RESEND 35 - def_bool y 36 - 37 - config GENERIC_IRQ_PROBE 38 def_bool y 39 40 config RWSEM_GENERIC_SPINLOCK
··· 6 select HAVE_CLK 7 select HAVE_OPROFILE 8 select HAVE_KPROBES 9 + select HAVE_GENERIC_HARDIRQS 10 + select GENERIC_IRQ_PROBE 11 + select HARDIRQS_SW_RESEND 12 + select GENERIC_IRQ_SHOW 13 + select GENERIC_HARDIRQS_NO_DEPRECATED 14 help 15 AVR32 is a high-performance 32-bit RISC microprocessor core, 16 designed for cost-sensitive embedded applications, with particular ··· 17 config GENERIC_GPIO 18 def_bool y 19 20 config STACKTRACE_SUPPORT 21 def_bool y 22 ··· 27 def_bool y 28 29 config TRACE_IRQFLAGS_SUPPORT 30 def_bool y 31 32 config RWSEM_GENERIC_SPINLOCK
+1 -1
arch/avr32/boards/atngw100/mrmt.c
··· 301 /* Select the Touchscreen interrupt pin mode */ 302 at32_select_periph( GPIO_PIOB_BASE, 1 << (PB_EXTINT_BASE+TS_IRQ), 303 GPIO_PERIPH_A, AT32_GPIOF_DEGLITCH); 304 - set_irq_type( AT32_EXTINT(TS_IRQ), IRQ_TYPE_EDGE_FALLING ); 305 at32_spi_setup_slaves(0,spi01_board_info,ARRAY_SIZE(spi01_board_info)); 306 spi_register_board_info(spi01_board_info,ARRAY_SIZE(spi01_board_info)); 307 #endif
··· 301 /* Select the Touchscreen interrupt pin mode */ 302 at32_select_periph( GPIO_PIOB_BASE, 1 << (PB_EXTINT_BASE+TS_IRQ), 303 GPIO_PERIPH_A, AT32_GPIOF_DEGLITCH); 304 + irq_set_irq_type(AT32_EXTINT(TS_IRQ), IRQ_TYPE_EDGE_FALLING); 305 at32_spi_setup_slaves(0,spi01_board_info,ARRAY_SIZE(spi01_board_info)); 306 spi_register_board_info(spi01_board_info,ARRAY_SIZE(spi01_board_info)); 307 #endif
+1 -1
arch/avr32/boards/atngw100/setup.c
··· 322 /* set_irq_type() after the arch_initcall for EIC has run, and 323 * before the I2C subsystem could try using this IRQ. 324 */ 325 - return set_irq_type(AT32_EXTINT(3), IRQ_TYPE_EDGE_FALLING); 326 } 327 arch_initcall(atngw100_arch_init);
··· 322 /* set_irq_type() after the arch_initcall for EIC has run, and 323 * before the I2C subsystem could try using this IRQ. 324 */ 325 + return irq_set_irq_type(AT32_EXTINT(3), IRQ_TYPE_EDGE_FALLING); 326 } 327 arch_initcall(atngw100_arch_init);
-37
arch/avr32/kernel/irq.c
··· 26 { 27 28 } 29 - 30 - #ifdef CONFIG_PROC_FS 31 - int show_interrupts(struct seq_file *p, void *v) 32 - { 33 - int i = *(loff_t *)v, cpu; 34 - struct irqaction *action; 35 - unsigned long flags; 36 - 37 - if (i == 0) { 38 - seq_puts(p, " "); 39 - for_each_online_cpu(cpu) 40 - seq_printf(p, "CPU%d ", cpu); 41 - seq_putc(p, '\n'); 42 - } 43 - 44 - if (i < NR_IRQS) { 45 - raw_spin_lock_irqsave(&irq_desc[i].lock, flags); 46 - action = irq_desc[i].action; 47 - if (!action) 48 - goto unlock; 49 - 50 - seq_printf(p, "%3d: ", i); 51 - for_each_online_cpu(cpu) 52 - seq_printf(p, "%10u ", kstat_irqs_cpu(i, cpu)); 53 - seq_printf(p, " %8s", irq_desc[i].chip->name ? : "-"); 54 - seq_printf(p, " %s", action->name); 55 - for (action = action->next; action; action = action->next) 56 - seq_printf(p, ", %s", action->name); 57 - 58 - seq_putc(p, '\n'); 59 - unlock: 60 - raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); 61 - } 62 - 63 - return 0; 64 - } 65 - #endif
··· 26 { 27 28 }
+36 -44
arch/avr32/mach-at32ap/extint.c
··· 61 static struct eic *nmi_eic; 62 static bool nmi_enabled; 63 64 - static void eic_ack_irq(unsigned int irq) 65 { 66 - struct eic *eic = get_irq_chip_data(irq); 67 - eic_writel(eic, ICR, 1 << (irq - eic->first_irq)); 68 } 69 70 - static void eic_mask_irq(unsigned int irq) 71 { 72 - struct eic *eic = get_irq_chip_data(irq); 73 - eic_writel(eic, IDR, 1 << (irq - eic->first_irq)); 74 } 75 76 - static void eic_mask_ack_irq(unsigned int irq) 77 { 78 - struct eic *eic = get_irq_chip_data(irq); 79 - eic_writel(eic, ICR, 1 << (irq - eic->first_irq)); 80 - eic_writel(eic, IDR, 1 << (irq - eic->first_irq)); 81 } 82 83 - static void eic_unmask_irq(unsigned int irq) 84 { 85 - struct eic *eic = get_irq_chip_data(irq); 86 - eic_writel(eic, IER, 1 << (irq - eic->first_irq)); 87 } 88 89 - static int eic_set_irq_type(unsigned int irq, unsigned int flow_type) 90 { 91 - struct eic *eic = get_irq_chip_data(irq); 92 - struct irq_desc *desc; 93 unsigned int i = irq - eic->first_irq; 94 u32 mode, edge, level; 95 - int ret = 0; 96 97 flow_type &= IRQ_TYPE_SENSE_MASK; 98 if (flow_type == IRQ_TYPE_NONE) 99 flow_type = IRQ_TYPE_LEVEL_LOW; 100 - 101 - desc = &irq_desc[irq]; 102 103 mode = eic_readl(eic, MODE); 104 edge = eic_readl(eic, EDGE); ··· 119 edge &= ~(1 << i); 120 break; 121 default: 122 - ret = -EINVAL; 123 - break; 124 } 125 126 - if (ret == 0) { 127 - eic_writel(eic, MODE, mode); 128 - eic_writel(eic, EDGE, edge); 129 - eic_writel(eic, LEVEL, level); 130 131 - if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) { 132 - flow_type |= IRQ_LEVEL; 133 - __set_irq_handler_unlocked(irq, handle_level_irq); 134 - } else 135 - __set_irq_handler_unlocked(irq, handle_edge_irq); 136 - desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); 137 - desc->status |= flow_type; 138 - } 139 140 - return ret; 141 } 142 143 static struct irq_chip eic_chip = { 144 .name = "eic", 145 - .ack = eic_ack_irq, 146 - .mask = eic_mask_irq, 147 - .mask_ack = eic_mask_ack_irq, 148 - .unmask = eic_unmask_irq, 149 - .set_type = eic_set_irq_type, 150 }; 151 152 static void demux_eic_irq(unsigned int irq, struct irq_desc *desc) 153 { 154 - struct eic *eic = desc->handler_data; 155 unsigned long status, pending; 156 unsigned int i; 157 ··· 226 eic->chip = &eic_chip; 227 228 for (i = 0; i < nr_of_irqs; i++) { 229 - set_irq_chip_and_handler(eic->first_irq + i, &eic_chip, 230 handle_level_irq); 231 - set_irq_chip_data(eic->first_irq + i, eic); 232 } 233 234 - set_irq_chained_handler(int_irq, demux_eic_irq); 235 - set_irq_data(int_irq, eic); 236 237 if (pdev->id == 0) { 238 nmi_eic = eic;
··· 61 static struct eic *nmi_eic; 62 static bool nmi_enabled; 63 64 + static void eic_ack_irq(struct irq_chip *d) 65 { 66 + struct eic *eic = irq_data_get_irq_chip_data(data); 67 + eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq)); 68 } 69 70 + static void eic_mask_irq(struct irq_chip *d) 71 { 72 + struct eic *eic = irq_data_get_irq_chip_data(data); 73 + eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq)); 74 } 75 76 + static void eic_mask_ack_irq(struct irq_chip *d) 77 { 78 + struct eic *eic = irq_data_get_irq_chip_data(data); 79 + eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq)); 80 + eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq)); 81 } 82 83 + static void eic_unmask_irq(struct irq_chip *d) 84 { 85 + struct eic *eic = irq_data_get_irq_chip_data(data); 86 + eic_writel(eic, IER, 1 << (d->irq - eic->first_irq)); 87 } 88 89 + static int eic_set_irq_type(struct irq_chip *d, unsigned int flow_type) 90 { 91 + struct eic *eic = irq_data_get_irq_chip_data(data); 92 + unsigned int irq = d->irq; 93 unsigned int i = irq - eic->first_irq; 94 u32 mode, edge, level; 95 96 flow_type &= IRQ_TYPE_SENSE_MASK; 97 if (flow_type == IRQ_TYPE_NONE) 98 flow_type = IRQ_TYPE_LEVEL_LOW; 99 100 mode = eic_readl(eic, MODE); 101 edge = eic_readl(eic, EDGE); ··· 122 edge &= ~(1 << i); 123 break; 124 default: 125 + return -EINVAL; 126 } 127 128 + eic_writel(eic, MODE, mode); 129 + eic_writel(eic, EDGE, edge); 130 + eic_writel(eic, LEVEL, level); 131 132 + irqd_set_trigger_type(d, flow_type); 133 + if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) 134 + __irq_set_handler_locked(irq, handle_level_irq); 135 + else 136 + __irq_set_handler_locked(irq, handle_edge_irq); 137 138 + return IRQ_SET_MASK_OK_NOCOPY; 139 } 140 141 static struct irq_chip eic_chip = { 142 .name = "eic", 143 + .irq_ack = eic_ack_irq, 144 + .irq_mask = eic_mask_irq, 145 + .irq_mask_ack = eic_mask_ack_irq, 146 + .irq_unmask = eic_unmask_irq, 147 + .irq_set_type = eic_set_irq_type, 148 }; 149 150 static void demux_eic_irq(unsigned int irq, struct irq_desc *desc) 151 { 152 + struct eic *eic = irq_desc_get_handler_data(desc); 153 unsigned long status, pending; 154 unsigned int i; 155 ··· 234 eic->chip = &eic_chip; 235 236 for (i = 0; i < nr_of_irqs; i++) { 237 + irq_set_chip_and_handler(eic->first_irq + i, &eic_chip, 238 handle_level_irq); 239 + irq_set_chip_data(eic->first_irq + i, eic); 240 } 241 242 + irq_set_chained_handler(int_irq, demux_eic_irq); 243 + irq_set_handler_data(int_irq, eic); 244 245 if (pdev->id == 0) { 246 nmi_eic = eic;
+6 -8
arch/avr32/mach-at32ap/intc.c
··· 34 * TODO: We may be able to implement mask/unmask by setting IxM flags 35 * in the status register. 36 */ 37 - static void intc_mask_irq(unsigned int irq) 38 { 39 40 } 41 42 - static void intc_unmask_irq(unsigned int irq) 43 { 44 45 } ··· 47 static struct intc intc0 = { 48 .chip = { 49 .name = "intc", 50 - .mask = intc_mask_irq, 51 - .unmask = intc_unmask_irq, 52 }, 53 }; 54 ··· 57 */ 58 asmlinkage void do_IRQ(int level, struct pt_regs *regs) 59 { 60 - struct irq_desc *desc; 61 struct pt_regs *old_regs; 62 unsigned int irq; 63 unsigned long status_reg; ··· 68 irq_enter(); 69 70 irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); 71 - desc = irq_desc + irq; 72 - desc->handle_irq(irq, desc); 73 74 /* 75 * Clear all interrupt level masks so that we may handle ··· 126 intc_writel(&intc0, INTPR0 + 4 * i, offset); 127 readback = intc_readl(&intc0, INTPR0 + 4 * i); 128 if (readback == offset) 129 - set_irq_chip_and_handler(i, &intc0.chip, 130 handle_simple_irq); 131 } 132
··· 34 * TODO: We may be able to implement mask/unmask by setting IxM flags 35 * in the status register. 36 */ 37 + static void intc_mask_irq(struct irq_data *d) 38 { 39 40 } 41 42 + static void intc_unmask_irq(struct irq_data *d) 43 { 44 45 } ··· 47 static struct intc intc0 = { 48 .chip = { 49 .name = "intc", 50 + .irq_mask = intc_mask_irq, 51 + .irq_unmask = intc_unmask_irq, 52 }, 53 }; 54 ··· 57 */ 58 asmlinkage void do_IRQ(int level, struct pt_regs *regs) 59 { 60 struct pt_regs *old_regs; 61 unsigned int irq; 62 unsigned long status_reg; ··· 69 irq_enter(); 70 71 irq = intc_readl(&intc0, INTCAUSE0 - 4 * level); 72 + generic_handle_irq(irq); 73 74 /* 75 * Clear all interrupt level masks so that we may handle ··· 128 intc_writel(&intc0, INTPR0 + 4 * i, offset); 129 readback = intc_readl(&intc0, INTPR0 + 4 * i); 130 if (readback == offset) 131 + irq_set_chip_and_handler(i, &intc0.chip, 132 handle_simple_irq); 133 } 134
+17 -20
arch/avr32/mach-at32ap/pio.c
··· 249 250 /* GPIO IRQ support */ 251 252 - static void gpio_irq_mask(unsigned irq) 253 { 254 - unsigned gpio = irq_to_gpio(irq); 255 struct pio_device *pio = &pio_dev[gpio >> 5]; 256 257 pio_writel(pio, IDR, 1 << (gpio & 0x1f)); 258 } 259 260 - static void gpio_irq_unmask(unsigned irq) 261 { 262 - unsigned gpio = irq_to_gpio(irq); 263 struct pio_device *pio = &pio_dev[gpio >> 5]; 264 265 pio_writel(pio, IER, 1 << (gpio & 0x1f)); 266 } 267 268 - static int gpio_irq_type(unsigned irq, unsigned type) 269 { 270 if (type != IRQ_TYPE_EDGE_BOTH && type != IRQ_TYPE_NONE) 271 return -EINVAL; ··· 275 276 static struct irq_chip gpio_irqchip = { 277 .name = "gpio", 278 - .mask = gpio_irq_mask, 279 - .unmask = gpio_irq_unmask, 280 - .set_type = gpio_irq_type, 281 }; 282 283 static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) 284 { 285 - struct pio_device *pio = get_irq_chip_data(irq); 286 unsigned gpio_irq; 287 288 - gpio_irq = (unsigned) get_irq_data(irq); 289 for (;;) { 290 u32 isr; 291 - struct irq_desc *d; 292 293 /* ack pending GPIO interrupts */ 294 isr = pio_readl(pio, ISR) & pio_readl(pio, IMR); ··· 300 isr &= ~(1 << i); 301 302 i += gpio_irq; 303 - d = &irq_desc[i]; 304 - 305 - d->handle_irq(i, d); 306 } while (isr); 307 } 308 } ··· 310 { 311 unsigned i; 312 313 - set_irq_chip_data(irq, pio); 314 - set_irq_data(irq, (void *) gpio_irq); 315 316 for (i = 0; i < 32; i++, gpio_irq++) { 317 - set_irq_chip_data(gpio_irq, pio); 318 - set_irq_chip_and_handler(gpio_irq, &gpio_irqchip, 319 - handle_simple_irq); 320 } 321 322 - set_irq_chained_handler(irq, gpio_irq_handler); 323 } 324 325 /*--------------------------------------------------------------------------*/
··· 249 250 /* GPIO IRQ support */ 251 252 + static void gpio_irq_mask(struct irq_data *d) 253 { 254 + unsigned gpio = irq_to_gpio(d->irq); 255 struct pio_device *pio = &pio_dev[gpio >> 5]; 256 257 pio_writel(pio, IDR, 1 << (gpio & 0x1f)); 258 } 259 260 + static void gpio_irq_unmask(struct irq_data *d)) 261 { 262 + unsigned gpio = irq_to_gpio(d->irq); 263 struct pio_device *pio = &pio_dev[gpio >> 5]; 264 265 pio_writel(pio, IER, 1 << (gpio & 0x1f)); 266 } 267 268 + static int gpio_irq_type(struct irq_data *d, unsigned type) 269 { 270 if (type != IRQ_TYPE_EDGE_BOTH && type != IRQ_TYPE_NONE) 271 return -EINVAL; ··· 275 276 static struct irq_chip gpio_irqchip = { 277 .name = "gpio", 278 + .irq_mask = gpio_irq_mask, 279 + .irq_unmask = gpio_irq_unmask, 280 + .irq_set_type = gpio_irq_type, 281 }; 282 283 static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) 284 { 285 + struct pio_device *pio = get_irq_desc_chip_data(desc); 286 unsigned gpio_irq; 287 288 + gpio_irq = (unsigned) irq_get_handler_data(irq); 289 for (;;) { 290 u32 isr; 291 292 /* ack pending GPIO interrupts */ 293 isr = pio_readl(pio, ISR) & pio_readl(pio, IMR); ··· 301 isr &= ~(1 << i); 302 303 i += gpio_irq; 304 + generic_handle_irq(i); 305 } while (isr); 306 } 307 } ··· 313 { 314 unsigned i; 315 316 + irq_set_chip_data(irq, pio); 317 + irq_set_handler_data(irq, (void *)gpio_irq); 318 319 for (i = 0; i < 32; i++, gpio_irq++) { 320 + irq_set_chip_data(gpio_irq, pio); 321 + irq_set_chip_and_handler(gpio_irq, &gpio_irqchip, 322 + handle_simple_irq); 323 } 324 325 + irq_set_chained_handler(irq, gpio_irq_handler); 326 } 327 328 /*--------------------------------------------------------------------------*/
+1
arch/h8300/Kconfig
··· 4 select HAVE_IDE 5 select HAVE_GENERIC_HARDIRQS 6 select GENERIC_HARDIRQS_NO_DEPRECATED 7 8 config SYMBOL_PREFIX 9 string
··· 4 select HAVE_IDE 5 select HAVE_GENERIC_HARDIRQS 6 select GENERIC_HARDIRQS_NO_DEPRECATED 7 + select GENERIC_IRQ_SHOW 8 9 config SYMBOL_PREFIX 10 string
+1 -32
arch/h8300/kernel/irq.c
··· 155 setup_vector(); 156 157 for (c = 0; c < NR_IRQS; c++) 158 - set_irq_chip_and_handler(c, &h8300irq_chip, handle_simple_irq); 159 } 160 161 asmlinkage void do_IRQ(int irq) ··· 164 generic_handle_irq(irq); 165 irq_exit(); 166 } 167 - 168 - #if defined(CONFIG_PROC_FS) 169 - int show_interrupts(struct seq_file *p, void *v) 170 - { 171 - int i = *(loff_t *) v; 172 - struct irqaction * action; 173 - unsigned long flags; 174 - 175 - if (i == 0) 176 - seq_puts(p, " CPU0"); 177 - 178 - if (i < NR_IRQS) { 179 - raw_spin_lock_irqsave(&irq_desc[i].lock, flags); 180 - action = irq_desc[i].action; 181 - if (!action) 182 - goto unlock; 183 - seq_printf(p, "%3d: ",i); 184 - seq_printf(p, "%10u ", kstat_irqs(i)); 185 - seq_printf(p, " %14s", irq_desc[i].irq_data.chip->name); 186 - seq_printf(p, "-%-8s", irq_desc[i].name); 187 - seq_printf(p, " %s", action->name); 188 - 189 - for (action=action->next; action; action = action->next) 190 - seq_printf(p, ", %s", action->name); 191 - seq_putc(p, '\n'); 192 - unlock: 193 - raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); 194 - } 195 - return 0; 196 - } 197 - #endif
··· 155 setup_vector(); 156 157 for (c = 0; c < NR_IRQS; c++) 158 + irq_set_chip_and_handler(c, &h8300irq_chip, handle_simple_irq); 159 } 160 161 asmlinkage void do_IRQ(int irq) ··· 164 generic_handle_irq(irq); 165 irq_exit(); 166 }
+1
arch/m32r/Kconfig
··· 10 select HAVE_GENERIC_HARDIRQS 11 select GENERIC_HARDIRQS_NO_DEPRECATED 12 select GENERIC_IRQ_PROBE 13 14 config SBUS 15 bool
··· 10 select HAVE_GENERIC_HARDIRQS 11 select GENERIC_HARDIRQS_NO_DEPRECATED 12 select GENERIC_IRQ_PROBE 13 + select GENERIC_IRQ_SHOW 14 15 config SBUS 16 bool
-45
arch/m32r/kernel/irq.c
··· 18 19 #include <linux/kernel_stat.h> 20 #include <linux/interrupt.h> 21 - #include <linux/seq_file.h> 22 #include <linux/module.h> 23 #include <asm/uaccess.h> 24 - 25 - /* 26 - * Generic, controller-independent functions: 27 - */ 28 - 29 - int show_interrupts(struct seq_file *p, void *v) 30 - { 31 - int i = *(loff_t *) v, j; 32 - struct irqaction * action; 33 - unsigned long flags; 34 - 35 - if (i == 0) { 36 - seq_printf(p, " "); 37 - for_each_online_cpu(j) 38 - seq_printf(p, "CPU%d ",j); 39 - seq_putc(p, '\n'); 40 - } 41 - 42 - if (i < NR_IRQS) { 43 - struct irq_desc *desc = irq_to_desc(i); 44 - 45 - raw_spin_lock_irqsave(&desc->lock, flags); 46 - action = desc->action; 47 - if (!action) 48 - goto skip; 49 - seq_printf(p, "%3d: ",i); 50 - #ifndef CONFIG_SMP 51 - seq_printf(p, "%10u ", kstat_irqs(i)); 52 - #else 53 - for_each_online_cpu(j) 54 - seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 55 - #endif 56 - seq_printf(p, " %14s", desc->irq_data.chip->name); 57 - seq_printf(p, " %s", action->name); 58 - 59 - for (action=action->next; action; action = action->next) 60 - seq_printf(p, ", %s", action->name); 61 - 62 - seq_putc(p, '\n'); 63 - skip: 64 - raw_spin_unlock_irqrestore(&desc->lock, flags); 65 - } 66 - return 0; 67 - } 68 69 /* 70 * do_IRQ handles all normal device IRQs (the special
··· 18 19 #include <linux/kernel_stat.h> 20 #include <linux/interrupt.h> 21 #include <linux/module.h> 22 #include <asm/uaccess.h> 23 24 /* 25 * do_IRQ handles all normal device IRQs (the special
+4 -4
arch/m32r/platforms/m32104ut/setup.c
··· 76 77 #if defined(CONFIG_SMC91X) 78 /* INT#0: LAN controller on M32104UT-LAN (SMC91C111)*/ 79 - set_irq_chip_and_handler(M32R_IRQ_INT0, &m32104ut_irq_type, 80 handle_level_irq); 81 /* "H" level sense */ 82 cu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11; ··· 84 #endif /* CONFIG_SMC91X */ 85 86 /* MFT2 : system timer */ 87 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32104ut_irq_type, 88 handle_level_irq); 89 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 90 disable_m32104ut_irq(M32R_IRQ_MFT2); 91 92 #ifdef CONFIG_SERIAL_M32R_SIO 93 /* SIO0_R : uart receive data */ 94 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32104ut_irq_type, 95 handle_level_irq); 96 icu_data[M32R_IRQ_SIO0_R].icucr = M32R_ICUCR_IEN; 97 disable_m32104ut_irq(M32R_IRQ_SIO0_R); 98 99 /* SIO0_S : uart send data */ 100 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32104ut_irq_type, 101 handle_level_irq); 102 icu_data[M32R_IRQ_SIO0_S].icucr = M32R_ICUCR_IEN; 103 disable_m32104ut_irq(M32R_IRQ_SIO0_S);
··· 76 77 #if defined(CONFIG_SMC91X) 78 /* INT#0: LAN controller on M32104UT-LAN (SMC91C111)*/ 79 + irq_set_chip_and_handler(M32R_IRQ_INT0, &m32104ut_irq_type, 80 handle_level_irq); 81 /* "H" level sense */ 82 cu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD11; ··· 84 #endif /* CONFIG_SMC91X */ 85 86 /* MFT2 : system timer */ 87 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &m32104ut_irq_type, 88 handle_level_irq); 89 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 90 disable_m32104ut_irq(M32R_IRQ_MFT2); 91 92 #ifdef CONFIG_SERIAL_M32R_SIO 93 /* SIO0_R : uart receive data */ 94 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &m32104ut_irq_type, 95 handle_level_irq); 96 icu_data[M32R_IRQ_SIO0_R].icucr = M32R_ICUCR_IEN; 97 disable_m32104ut_irq(M32R_IRQ_SIO0_R); 98 99 /* SIO0_S : uart send data */ 100 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &m32104ut_irq_type, 101 handle_level_irq); 102 icu_data[M32R_IRQ_SIO0_S].icucr = M32R_ICUCR_IEN; 103 disable_m32104ut_irq(M32R_IRQ_SIO0_S);
+14 -14
arch/m32r/platforms/m32700ut/setup.c
··· 259 { 260 #if defined(CONFIG_SMC91X) 261 /* INT#0: LAN controller on M32700UT-LAN (SMC91C111)*/ 262 - set_irq_chip_and_handler(M32700UT_LAN_IRQ_LAN, 263 &m32700ut_lanpld_irq_type, handle_level_irq); 264 lanpld_icu_data[irq2lanpldirq(M32700UT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ 265 disable_m32700ut_lanpld_irq(M32700UT_LAN_IRQ_LAN); 266 #endif /* CONFIG_SMC91X */ 267 268 /* MFT2 : system timer */ 269 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &m32700ut_irq_type, 270 handle_level_irq); 271 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 272 disable_m32700ut_irq(M32R_IRQ_MFT2); 273 274 /* SIO0 : receive */ 275 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &m32700ut_irq_type, 276 handle_level_irq); 277 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 278 disable_m32700ut_irq(M32R_IRQ_SIO0_R); 279 280 /* SIO0 : send */ 281 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &m32700ut_irq_type, 282 handle_level_irq); 283 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 284 disable_m32700ut_irq(M32R_IRQ_SIO0_S); 285 286 /* SIO1 : receive */ 287 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &m32700ut_irq_type, 288 handle_level_irq); 289 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 290 disable_m32700ut_irq(M32R_IRQ_SIO1_R); 291 292 /* SIO1 : send */ 293 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &m32700ut_irq_type, 294 handle_level_irq); 295 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 296 disable_m32700ut_irq(M32R_IRQ_SIO1_S); 297 298 /* DMA1 : */ 299 - set_irq_chip_and_handler(M32R_IRQ_DMA1, &m32700ut_irq_type, 300 handle_level_irq); 301 icu_data[M32R_IRQ_DMA1].icucr = 0; 302 disable_m32700ut_irq(M32R_IRQ_DMA1); 303 304 #ifdef CONFIG_SERIAL_M32R_PLDSIO 305 /* INT#1: SIO0 Receive on PLD */ 306 - set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &m32700ut_pld_irq_type, 307 handle_level_irq); 308 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 309 disable_m32700ut_pld_irq(PLD_IRQ_SIO0_RCV); 310 311 /* INT#1: SIO0 Send on PLD */ 312 - set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &m32700ut_pld_irq_type, 313 handle_level_irq); 314 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 315 disable_m32700ut_pld_irq(PLD_IRQ_SIO0_SND); 316 #endif /* CONFIG_SERIAL_M32R_PLDSIO */ 317 318 /* INT#1: CFC IREQ on PLD */ 319 - set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &m32700ut_pld_irq_type, 320 handle_level_irq); 321 pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ 322 disable_m32700ut_pld_irq(PLD_IRQ_CFIREQ); 323 324 /* INT#1: CFC Insert on PLD */ 325 - set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &m32700ut_pld_irq_type, 326 handle_level_irq); 327 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ 328 disable_m32700ut_pld_irq(PLD_IRQ_CFC_INSERT); 329 330 /* INT#1: CFC Eject on PLD */ 331 - set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &m32700ut_pld_irq_type, 332 handle_level_irq); 333 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ 334 disable_m32700ut_pld_irq(PLD_IRQ_CFC_EJECT); ··· 349 350 #if defined(CONFIG_USB) 351 outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ 352 - set_irq_chip_and_handler(M32700UT_LCD_IRQ_USB_INT1, 353 &m32700ut_lcdpld_irq_type, handle_level_irq); 354 355 lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ ··· 366 /* 367 * INT3# is used for AR 368 */ 369 - set_irq_chip_and_handler(M32R_IRQ_INT3, &m32700ut_irq_type, 370 handle_level_irq); 371 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 372 disable_m32700ut_irq(M32R_IRQ_INT3);
··· 259 { 260 #if defined(CONFIG_SMC91X) 261 /* INT#0: LAN controller on M32700UT-LAN (SMC91C111)*/ 262 + irq_set_chip_and_handler(M32700UT_LAN_IRQ_LAN, 263 &m32700ut_lanpld_irq_type, handle_level_irq); 264 lanpld_icu_data[irq2lanpldirq(M32700UT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ 265 disable_m32700ut_lanpld_irq(M32700UT_LAN_IRQ_LAN); 266 #endif /* CONFIG_SMC91X */ 267 268 /* MFT2 : system timer */ 269 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &m32700ut_irq_type, 270 handle_level_irq); 271 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 272 disable_m32700ut_irq(M32R_IRQ_MFT2); 273 274 /* SIO0 : receive */ 275 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &m32700ut_irq_type, 276 handle_level_irq); 277 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 278 disable_m32700ut_irq(M32R_IRQ_SIO0_R); 279 280 /* SIO0 : send */ 281 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &m32700ut_irq_type, 282 handle_level_irq); 283 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 284 disable_m32700ut_irq(M32R_IRQ_SIO0_S); 285 286 /* SIO1 : receive */ 287 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &m32700ut_irq_type, 288 handle_level_irq); 289 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 290 disable_m32700ut_irq(M32R_IRQ_SIO1_R); 291 292 /* SIO1 : send */ 293 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &m32700ut_irq_type, 294 handle_level_irq); 295 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 296 disable_m32700ut_irq(M32R_IRQ_SIO1_S); 297 298 /* DMA1 : */ 299 + irq_set_chip_and_handler(M32R_IRQ_DMA1, &m32700ut_irq_type, 300 handle_level_irq); 301 icu_data[M32R_IRQ_DMA1].icucr = 0; 302 disable_m32700ut_irq(M32R_IRQ_DMA1); 303 304 #ifdef CONFIG_SERIAL_M32R_PLDSIO 305 /* INT#1: SIO0 Receive on PLD */ 306 + irq_set_chip_and_handler(PLD_IRQ_SIO0_RCV, &m32700ut_pld_irq_type, 307 handle_level_irq); 308 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 309 disable_m32700ut_pld_irq(PLD_IRQ_SIO0_RCV); 310 311 /* INT#1: SIO0 Send on PLD */ 312 + irq_set_chip_and_handler(PLD_IRQ_SIO0_SND, &m32700ut_pld_irq_type, 313 handle_level_irq); 314 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 315 disable_m32700ut_pld_irq(PLD_IRQ_SIO0_SND); 316 #endif /* CONFIG_SERIAL_M32R_PLDSIO */ 317 318 /* INT#1: CFC IREQ on PLD */ 319 + irq_set_chip_and_handler(PLD_IRQ_CFIREQ, &m32700ut_pld_irq_type, 320 handle_level_irq); 321 pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ 322 disable_m32700ut_pld_irq(PLD_IRQ_CFIREQ); 323 324 /* INT#1: CFC Insert on PLD */ 325 + irq_set_chip_and_handler(PLD_IRQ_CFC_INSERT, &m32700ut_pld_irq_type, 326 handle_level_irq); 327 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ 328 disable_m32700ut_pld_irq(PLD_IRQ_CFC_INSERT); 329 330 /* INT#1: CFC Eject on PLD */ 331 + irq_set_chip_and_handler(PLD_IRQ_CFC_EJECT, &m32700ut_pld_irq_type, 332 handle_level_irq); 333 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ 334 disable_m32700ut_pld_irq(PLD_IRQ_CFC_EJECT); ··· 349 350 #if defined(CONFIG_USB) 351 outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ 352 + irq_set_chip_and_handler(M32700UT_LCD_IRQ_USB_INT1, 353 &m32700ut_lcdpld_irq_type, handle_level_irq); 354 355 lcdpld_icu_data[irq2lcdpldirq(M32700UT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ ··· 366 /* 367 * INT3# is used for AR 368 */ 369 + irq_set_chip_and_handler(M32R_IRQ_INT3, &m32700ut_irq_type, 370 handle_level_irq); 371 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 372 disable_m32700ut_irq(M32R_IRQ_INT3);
+8 -8
arch/m32r/platforms/mappi/setup.c
··· 75 76 #ifdef CONFIG_NE2000 77 /* INT0 : LAN controller (RTL8019AS) */ 78 - set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi_irq_type, 79 handle_level_irq); 80 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD11; 81 disable_mappi_irq(M32R_IRQ_INT0); 82 #endif /* CONFIG_M32R_NE2000 */ 83 84 /* MFT2 : system timer */ 85 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, 86 handle_level_irq); 87 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 88 disable_mappi_irq(M32R_IRQ_MFT2); 89 90 #ifdef CONFIG_SERIAL_M32R_SIO 91 /* SIO0_R : uart receive data */ 92 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, 93 handle_level_irq); 94 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 95 disable_mappi_irq(M32R_IRQ_SIO0_R); 96 97 /* SIO0_S : uart send data */ 98 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, 99 handle_level_irq); 100 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 101 disable_mappi_irq(M32R_IRQ_SIO0_S); 102 103 /* SIO1_R : uart receive data */ 104 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, 105 handle_level_irq); 106 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 107 disable_mappi_irq(M32R_IRQ_SIO1_R); 108 109 /* SIO1_S : uart send data */ 110 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, 111 handle_level_irq); 112 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 113 disable_mappi_irq(M32R_IRQ_SIO1_S); ··· 115 116 #if defined(CONFIG_M32R_PCC) 117 /* INT1 : pccard0 interrupt */ 118 - set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi_irq_type, 119 handle_level_irq); 120 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; 121 disable_mappi_irq(M32R_IRQ_INT1); 122 123 /* INT2 : pccard1 interrupt */ 124 - set_irq_chip_and_handler(M32R_IRQ_INT2, &mappi_irq_type, 125 handle_level_irq); 126 icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; 127 disable_mappi_irq(M32R_IRQ_INT2);
··· 75 76 #ifdef CONFIG_NE2000 77 /* INT0 : LAN controller (RTL8019AS) */ 78 + irq_set_chip_and_handler(M32R_IRQ_INT0, &mappi_irq_type, 79 handle_level_irq); 80 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD11; 81 disable_mappi_irq(M32R_IRQ_INT0); 82 #endif /* CONFIG_M32R_NE2000 */ 83 84 /* MFT2 : system timer */ 85 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, 86 handle_level_irq); 87 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 88 disable_mappi_irq(M32R_IRQ_MFT2); 89 90 #ifdef CONFIG_SERIAL_M32R_SIO 91 /* SIO0_R : uart receive data */ 92 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, 93 handle_level_irq); 94 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 95 disable_mappi_irq(M32R_IRQ_SIO0_R); 96 97 /* SIO0_S : uart send data */ 98 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, 99 handle_level_irq); 100 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 101 disable_mappi_irq(M32R_IRQ_SIO0_S); 102 103 /* SIO1_R : uart receive data */ 104 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, 105 handle_level_irq); 106 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 107 disable_mappi_irq(M32R_IRQ_SIO1_R); 108 109 /* SIO1_S : uart send data */ 110 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, 111 handle_level_irq); 112 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 113 disable_mappi_irq(M32R_IRQ_SIO1_S); ··· 115 116 #if defined(CONFIG_M32R_PCC) 117 /* INT1 : pccard0 interrupt */ 118 + irq_set_chip_and_handler(M32R_IRQ_INT1, &mappi_irq_type, 119 handle_level_irq); 120 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; 121 disable_mappi_irq(M32R_IRQ_INT1); 122 123 /* INT2 : pccard1 interrupt */ 124 + irq_set_chip_and_handler(M32R_IRQ_INT2, &mappi_irq_type, 125 handle_level_irq); 126 icu_data[M32R_IRQ_INT2].icucr = M32R_ICUCR_IEN | M32R_ICUCR_ISMOD00; 127 disable_mappi_irq(M32R_IRQ_INT2);
+10 -10
arch/m32r/platforms/mappi2/setup.c
··· 76 { 77 #if defined(CONFIG_SMC91X) 78 /* INT0 : LAN controller (SMC91111) */ 79 - set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi2_irq_type, 80 handle_level_irq); 81 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 82 disable_mappi2_irq(M32R_IRQ_INT0); 83 #endif /* CONFIG_SMC91X */ 84 85 /* MFT2 : system timer */ 86 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi2_irq_type, 87 handle_level_irq); 88 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 89 disable_mappi2_irq(M32R_IRQ_MFT2); 90 91 #ifdef CONFIG_SERIAL_M32R_SIO 92 /* SIO0_R : uart receive data */ 93 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi2_irq_type, 94 handle_level_irq); 95 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 96 disable_mappi2_irq(M32R_IRQ_SIO0_R); 97 98 /* SIO0_S : uart send data */ 99 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi2_irq_type, 100 handle_level_irq); 101 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 102 disable_mappi2_irq(M32R_IRQ_SIO0_S); 103 /* SIO1_R : uart receive data */ 104 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi2_irq_type, 105 handle_level_irq); 106 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 107 disable_mappi2_irq(M32R_IRQ_SIO1_R); 108 109 /* SIO1_S : uart send data */ 110 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi2_irq_type, 111 handle_level_irq); 112 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 113 disable_mappi2_irq(M32R_IRQ_SIO1_S); ··· 115 116 #if defined(CONFIG_USB) 117 /* INT1 : USB Host controller interrupt */ 118 - set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi2_irq_type, 119 handle_level_irq); 120 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; 121 disable_mappi2_irq(M32R_IRQ_INT1); 122 #endif /* CONFIG_USB */ 123 124 /* ICUCR40: CFC IREQ */ 125 - set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi2_irq_type, 126 handle_level_irq); 127 icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; 128 disable_mappi2_irq(PLD_IRQ_CFIREQ); 129 130 #if defined(CONFIG_M32R_CFC) 131 /* ICUCR41: CFC Insert */ 132 - set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi2_irq_type, 133 handle_level_irq); 134 icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; 135 disable_mappi2_irq(PLD_IRQ_CFC_INSERT); 136 137 /* ICUCR42: CFC Eject */ 138 - set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &mappi2_irq_type, 139 handle_level_irq); 140 icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 141 disable_mappi2_irq(PLD_IRQ_CFC_EJECT);
··· 76 { 77 #if defined(CONFIG_SMC91X) 78 /* INT0 : LAN controller (SMC91111) */ 79 + irq_set_chip_and_handler(M32R_IRQ_INT0, &mappi2_irq_type, 80 handle_level_irq); 81 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 82 disable_mappi2_irq(M32R_IRQ_INT0); 83 #endif /* CONFIG_SMC91X */ 84 85 /* MFT2 : system timer */ 86 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &mappi2_irq_type, 87 handle_level_irq); 88 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 89 disable_mappi2_irq(M32R_IRQ_MFT2); 90 91 #ifdef CONFIG_SERIAL_M32R_SIO 92 /* SIO0_R : uart receive data */ 93 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &mappi2_irq_type, 94 handle_level_irq); 95 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 96 disable_mappi2_irq(M32R_IRQ_SIO0_R); 97 98 /* SIO0_S : uart send data */ 99 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &mappi2_irq_type, 100 handle_level_irq); 101 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 102 disable_mappi2_irq(M32R_IRQ_SIO0_S); 103 /* SIO1_R : uart receive data */ 104 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &mappi2_irq_type, 105 handle_level_irq); 106 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 107 disable_mappi2_irq(M32R_IRQ_SIO1_R); 108 109 /* SIO1_S : uart send data */ 110 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &mappi2_irq_type, 111 handle_level_irq); 112 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 113 disable_mappi2_irq(M32R_IRQ_SIO1_S); ··· 115 116 #if defined(CONFIG_USB) 117 /* INT1 : USB Host controller interrupt */ 118 + irq_set_chip_and_handler(M32R_IRQ_INT1, &mappi2_irq_type, 119 handle_level_irq); 120 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; 121 disable_mappi2_irq(M32R_IRQ_INT1); 122 #endif /* CONFIG_USB */ 123 124 /* ICUCR40: CFC IREQ */ 125 + irq_set_chip_and_handler(PLD_IRQ_CFIREQ, &mappi2_irq_type, 126 handle_level_irq); 127 icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; 128 disable_mappi2_irq(PLD_IRQ_CFIREQ); 129 130 #if defined(CONFIG_M32R_CFC) 131 /* ICUCR41: CFC Insert */ 132 + irq_set_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi2_irq_type, 133 handle_level_irq); 134 icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; 135 disable_mappi2_irq(PLD_IRQ_CFC_INSERT); 136 137 /* ICUCR42: CFC Eject */ 138 + irq_set_chip_and_handler(PLD_IRQ_CFC_EJECT, &mappi2_irq_type, 139 handle_level_irq); 140 icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 141 disable_mappi2_irq(PLD_IRQ_CFC_EJECT);
+10 -10
arch/m32r/platforms/mappi3/setup.c
··· 75 { 76 #if defined(CONFIG_SMC91X) 77 /* INT0 : LAN controller (SMC91111) */ 78 - set_irq_chip_and_handler(M32R_IRQ_INT0, &mappi3_irq_type, 79 handle_level_irq); 80 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 81 disable_mappi3_irq(M32R_IRQ_INT0); 82 #endif /* CONFIG_SMC91X */ 83 84 /* MFT2 : system timer */ 85 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi3_irq_type, 86 handle_level_irq); 87 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 88 disable_mappi3_irq(M32R_IRQ_MFT2); 89 90 #ifdef CONFIG_SERIAL_M32R_SIO 91 /* SIO0_R : uart receive data */ 92 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi3_irq_type, 93 handle_level_irq); 94 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 95 disable_mappi3_irq(M32R_IRQ_SIO0_R); 96 97 /* SIO0_S : uart send data */ 98 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi3_irq_type, 99 handle_level_irq); 100 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 101 disable_mappi3_irq(M32R_IRQ_SIO0_S); 102 /* SIO1_R : uart receive data */ 103 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi3_irq_type, 104 handle_level_irq); 105 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 106 disable_mappi3_irq(M32R_IRQ_SIO1_R); 107 108 /* SIO1_S : uart send data */ 109 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi3_irq_type, 110 handle_level_irq); 111 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 112 disable_mappi3_irq(M32R_IRQ_SIO1_S); ··· 114 115 #if defined(CONFIG_USB) 116 /* INT1 : USB Host controller interrupt */ 117 - set_irq_chip_and_handler(M32R_IRQ_INT1, &mappi3_irq_type, 118 handle_level_irq); 119 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; 120 disable_mappi3_irq(M32R_IRQ_INT1); 121 #endif /* CONFIG_USB */ 122 123 /* CFC IREQ */ 124 - set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &mappi3_irq_type, 125 handle_level_irq); 126 icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; 127 disable_mappi3_irq(PLD_IRQ_CFIREQ); 128 129 #if defined(CONFIG_M32R_CFC) 130 /* ICUCR41: CFC Insert & eject */ 131 - set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi3_irq_type, 132 handle_level_irq); 133 icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; 134 disable_mappi3_irq(PLD_IRQ_CFC_INSERT); ··· 136 #endif /* CONFIG_M32R_CFC */ 137 138 /* IDE IREQ */ 139 - set_irq_chip_and_handler(PLD_IRQ_IDEIREQ, &mappi3_irq_type, 140 handle_level_irq); 141 icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 142 disable_mappi3_irq(PLD_IRQ_IDEIREQ);
··· 75 { 76 #if defined(CONFIG_SMC91X) 77 /* INT0 : LAN controller (SMC91111) */ 78 + irq_set_chip_and_handler(M32R_IRQ_INT0, &mappi3_irq_type, 79 handle_level_irq); 80 icu_data[M32R_IRQ_INT0].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 81 disable_mappi3_irq(M32R_IRQ_INT0); 82 #endif /* CONFIG_SMC91X */ 83 84 /* MFT2 : system timer */ 85 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &mappi3_irq_type, 86 handle_level_irq); 87 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 88 disable_mappi3_irq(M32R_IRQ_MFT2); 89 90 #ifdef CONFIG_SERIAL_M32R_SIO 91 /* SIO0_R : uart receive data */ 92 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &mappi3_irq_type, 93 handle_level_irq); 94 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 95 disable_mappi3_irq(M32R_IRQ_SIO0_R); 96 97 /* SIO0_S : uart send data */ 98 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &mappi3_irq_type, 99 handle_level_irq); 100 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 101 disable_mappi3_irq(M32R_IRQ_SIO0_S); 102 /* SIO1_R : uart receive data */ 103 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &mappi3_irq_type, 104 handle_level_irq); 105 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 106 disable_mappi3_irq(M32R_IRQ_SIO1_R); 107 108 /* SIO1_S : uart send data */ 109 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &mappi3_irq_type, 110 handle_level_irq); 111 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 112 disable_mappi3_irq(M32R_IRQ_SIO1_S); ··· 114 115 #if defined(CONFIG_USB) 116 /* INT1 : USB Host controller interrupt */ 117 + irq_set_chip_and_handler(M32R_IRQ_INT1, &mappi3_irq_type, 118 handle_level_irq); 119 icu_data[M32R_IRQ_INT1].icucr = M32R_ICUCR_ISMOD01; 120 disable_mappi3_irq(M32R_IRQ_INT1); 121 #endif /* CONFIG_USB */ 122 123 /* CFC IREQ */ 124 + irq_set_chip_and_handler(PLD_IRQ_CFIREQ, &mappi3_irq_type, 125 handle_level_irq); 126 icu_data[PLD_IRQ_CFIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD01; 127 disable_mappi3_irq(PLD_IRQ_CFIREQ); 128 129 #if defined(CONFIG_M32R_CFC) 130 /* ICUCR41: CFC Insert & eject */ 131 + irq_set_chip_and_handler(PLD_IRQ_CFC_INSERT, &mappi3_irq_type, 132 handle_level_irq); 133 icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00; 134 disable_mappi3_irq(PLD_IRQ_CFC_INSERT); ··· 136 #endif /* CONFIG_M32R_CFC */ 137 138 /* IDE IREQ */ 139 + irq_set_chip_and_handler(PLD_IRQ_IDEIREQ, &mappi3_irq_type, 140 handle_level_irq); 141 icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 142 disable_mappi3_irq(PLD_IRQ_IDEIREQ);
+6 -6
arch/m32r/platforms/oaks32r/setup.c
··· 74 75 #ifdef CONFIG_NE2000 76 /* INT3 : LAN controller (RTL8019AS) */ 77 - set_irq_chip_and_handler(M32R_IRQ_INT3, &oaks32r_irq_type, 78 handle_level_irq); 79 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 80 disable_oaks32r_irq(M32R_IRQ_INT3); 81 #endif /* CONFIG_M32R_NE2000 */ 82 83 /* MFT2 : system timer */ 84 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &oaks32r_irq_type, 85 handle_level_irq); 86 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 87 disable_oaks32r_irq(M32R_IRQ_MFT2); 88 89 #ifdef CONFIG_SERIAL_M32R_SIO 90 /* SIO0_R : uart receive data */ 91 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &oaks32r_irq_type, 92 handle_level_irq); 93 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 94 disable_oaks32r_irq(M32R_IRQ_SIO0_R); 95 96 /* SIO0_S : uart send data */ 97 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &oaks32r_irq_type, 98 handle_level_irq); 99 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 100 disable_oaks32r_irq(M32R_IRQ_SIO0_S); 101 102 /* SIO1_R : uart receive data */ 103 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &oaks32r_irq_type, 104 handle_level_irq); 105 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 106 disable_oaks32r_irq(M32R_IRQ_SIO1_R); 107 108 /* SIO1_S : uart send data */ 109 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &oaks32r_irq_type, 110 handle_level_irq); 111 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 112 disable_oaks32r_irq(M32R_IRQ_SIO1_S);
··· 74 75 #ifdef CONFIG_NE2000 76 /* INT3 : LAN controller (RTL8019AS) */ 77 + irq_set_chip_and_handler(M32R_IRQ_INT3, &oaks32r_irq_type, 78 handle_level_irq); 79 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 80 disable_oaks32r_irq(M32R_IRQ_INT3); 81 #endif /* CONFIG_M32R_NE2000 */ 82 83 /* MFT2 : system timer */ 84 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &oaks32r_irq_type, 85 handle_level_irq); 86 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 87 disable_oaks32r_irq(M32R_IRQ_MFT2); 88 89 #ifdef CONFIG_SERIAL_M32R_SIO 90 /* SIO0_R : uart receive data */ 91 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &oaks32r_irq_type, 92 handle_level_irq); 93 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 94 disable_oaks32r_irq(M32R_IRQ_SIO0_R); 95 96 /* SIO0_S : uart send data */ 97 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &oaks32r_irq_type, 98 handle_level_irq); 99 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 100 disable_oaks32r_irq(M32R_IRQ_SIO0_S); 101 102 /* SIO1_R : uart receive data */ 103 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &oaks32r_irq_type, 104 handle_level_irq); 105 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 106 disable_oaks32r_irq(M32R_IRQ_SIO1_R); 107 108 /* SIO1_S : uart send data */ 109 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &oaks32r_irq_type, 110 handle_level_irq); 111 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 112 disable_oaks32r_irq(M32R_IRQ_SIO1_S);
+14 -14
arch/m32r/platforms/opsput/setup.c
··· 259 { 260 #if defined(CONFIG_SMC91X) 261 /* INT#0: LAN controller on OPSPUT-LAN (SMC91C111)*/ 262 - set_irq_chip_and_handler(OPSPUT_LAN_IRQ_LAN, &opsput_lanpld_irq_type, 263 handle_level_irq); 264 lanpld_icu_data[irq2lanpldirq(OPSPUT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ 265 disable_opsput_lanpld_irq(OPSPUT_LAN_IRQ_LAN); 266 #endif /* CONFIG_SMC91X */ 267 268 /* MFT2 : system timer */ 269 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &opsput_irq_type, 270 handle_level_irq); 271 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 272 disable_opsput_irq(M32R_IRQ_MFT2); 273 274 /* SIO0 : receive */ 275 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &opsput_irq_type, 276 handle_level_irq); 277 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 278 disable_opsput_irq(M32R_IRQ_SIO0_R); 279 280 /* SIO0 : send */ 281 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &opsput_irq_type, 282 handle_level_irq); 283 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 284 disable_opsput_irq(M32R_IRQ_SIO0_S); 285 286 /* SIO1 : receive */ 287 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &opsput_irq_type, 288 handle_level_irq); 289 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 290 disable_opsput_irq(M32R_IRQ_SIO1_R); 291 292 /* SIO1 : send */ 293 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &opsput_irq_type, 294 handle_level_irq); 295 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 296 disable_opsput_irq(M32R_IRQ_SIO1_S); 297 298 /* DMA1 : */ 299 - set_irq_chip_and_handler(M32R_IRQ_DMA1, &opsput_irq_type, 300 handle_level_irq); 301 icu_data[M32R_IRQ_DMA1].icucr = 0; 302 disable_opsput_irq(M32R_IRQ_DMA1); 303 304 #ifdef CONFIG_SERIAL_M32R_PLDSIO 305 /* INT#1: SIO0 Receive on PLD */ 306 - set_irq_chip_and_handler(PLD_IRQ_SIO0_RCV, &opsput_pld_irq_type, 307 handle_level_irq); 308 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 309 disable_opsput_pld_irq(PLD_IRQ_SIO0_RCV); 310 311 /* INT#1: SIO0 Send on PLD */ 312 - set_irq_chip_and_handler(PLD_IRQ_SIO0_SND, &opsput_pld_irq_type, 313 handle_level_irq); 314 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 315 disable_opsput_pld_irq(PLD_IRQ_SIO0_SND); 316 #endif /* CONFIG_SERIAL_M32R_PLDSIO */ 317 318 /* INT#1: CFC IREQ on PLD */ 319 - set_irq_chip_and_handler(PLD_IRQ_CFIREQ, &opsput_pld_irq_type, 320 handle_level_irq); 321 pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ 322 disable_opsput_pld_irq(PLD_IRQ_CFIREQ); 323 324 /* INT#1: CFC Insert on PLD */ 325 - set_irq_chip_and_handler(PLD_IRQ_CFC_INSERT, &opsput_pld_irq_type, 326 handle_level_irq); 327 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ 328 disable_opsput_pld_irq(PLD_IRQ_CFC_INSERT); 329 330 /* INT#1: CFC Eject on PLD */ 331 - set_irq_chip_and_handler(PLD_IRQ_CFC_EJECT, &opsput_pld_irq_type, 332 handle_level_irq); 333 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ 334 disable_opsput_pld_irq(PLD_IRQ_CFC_EJECT); ··· 349 350 #if defined(CONFIG_USB) 351 outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ 352 - set_irq_chip_and_handler(OPSPUT_LCD_IRQ_USB_INT1, 353 &opsput_lcdpld_irq_type, handle_level_irq); 354 lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ 355 disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1); ··· 365 /* 366 * INT3# is used for AR 367 */ 368 - set_irq_chip_and_handler(M32R_IRQ_INT3, &opsput_irq_type, 369 handle_level_irq); 370 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 371 disable_opsput_irq(M32R_IRQ_INT3);
··· 259 { 260 #if defined(CONFIG_SMC91X) 261 /* INT#0: LAN controller on OPSPUT-LAN (SMC91C111)*/ 262 + irq_set_chip_and_handler(OPSPUT_LAN_IRQ_LAN, &opsput_lanpld_irq_type, 263 handle_level_irq); 264 lanpld_icu_data[irq2lanpldirq(OPSPUT_LAN_IRQ_LAN)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* "H" edge sense */ 265 disable_opsput_lanpld_irq(OPSPUT_LAN_IRQ_LAN); 266 #endif /* CONFIG_SMC91X */ 267 268 /* MFT2 : system timer */ 269 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &opsput_irq_type, 270 handle_level_irq); 271 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 272 disable_opsput_irq(M32R_IRQ_MFT2); 273 274 /* SIO0 : receive */ 275 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &opsput_irq_type, 276 handle_level_irq); 277 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 278 disable_opsput_irq(M32R_IRQ_SIO0_R); 279 280 /* SIO0 : send */ 281 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &opsput_irq_type, 282 handle_level_irq); 283 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 284 disable_opsput_irq(M32R_IRQ_SIO0_S); 285 286 /* SIO1 : receive */ 287 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &opsput_irq_type, 288 handle_level_irq); 289 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 290 disable_opsput_irq(M32R_IRQ_SIO1_R); 291 292 /* SIO1 : send */ 293 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &opsput_irq_type, 294 handle_level_irq); 295 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 296 disable_opsput_irq(M32R_IRQ_SIO1_S); 297 298 /* DMA1 : */ 299 + irq_set_chip_and_handler(M32R_IRQ_DMA1, &opsput_irq_type, 300 handle_level_irq); 301 icu_data[M32R_IRQ_DMA1].icucr = 0; 302 disable_opsput_irq(M32R_IRQ_DMA1); 303 304 #ifdef CONFIG_SERIAL_M32R_PLDSIO 305 /* INT#1: SIO0 Receive on PLD */ 306 + irq_set_chip_and_handler(PLD_IRQ_SIO0_RCV, &opsput_pld_irq_type, 307 handle_level_irq); 308 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_RCV)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 309 disable_opsput_pld_irq(PLD_IRQ_SIO0_RCV); 310 311 /* INT#1: SIO0 Send on PLD */ 312 + irq_set_chip_and_handler(PLD_IRQ_SIO0_SND, &opsput_pld_irq_type, 313 handle_level_irq); 314 pld_icu_data[irq2pldirq(PLD_IRQ_SIO0_SND)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD03; 315 disable_opsput_pld_irq(PLD_IRQ_SIO0_SND); 316 #endif /* CONFIG_SERIAL_M32R_PLDSIO */ 317 318 /* INT#1: CFC IREQ on PLD */ 319 + irq_set_chip_and_handler(PLD_IRQ_CFIREQ, &opsput_pld_irq_type, 320 handle_level_irq); 321 pld_icu_data[irq2pldirq(PLD_IRQ_CFIREQ)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* 'L' level sense */ 322 disable_opsput_pld_irq(PLD_IRQ_CFIREQ); 323 324 /* INT#1: CFC Insert on PLD */ 325 + irq_set_chip_and_handler(PLD_IRQ_CFC_INSERT, &opsput_pld_irq_type, 326 handle_level_irq); 327 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_INSERT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD00; /* 'L' edge sense */ 328 disable_opsput_pld_irq(PLD_IRQ_CFC_INSERT); 329 330 /* INT#1: CFC Eject on PLD */ 331 + irq_set_chip_and_handler(PLD_IRQ_CFC_EJECT, &opsput_pld_irq_type, 332 handle_level_irq); 333 pld_icu_data[irq2pldirq(PLD_IRQ_CFC_EJECT)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD02; /* 'H' edge sense */ 334 disable_opsput_pld_irq(PLD_IRQ_CFC_EJECT); ··· 349 350 #if defined(CONFIG_USB) 351 outw(USBCR_OTGS, USBCR); /* USBCR: non-OTG */ 352 + irq_set_chip_and_handler(OPSPUT_LCD_IRQ_USB_INT1, 353 &opsput_lcdpld_irq_type, handle_level_irq); 354 lcdpld_icu_data[irq2lcdpldirq(OPSPUT_LCD_IRQ_USB_INT1)].icucr = PLD_ICUCR_IEN|PLD_ICUCR_ISMOD01; /* "L" level sense */ 355 disable_opsput_lcdpld_irq(OPSPUT_LCD_IRQ_USB_INT1); ··· 365 /* 366 * INT3# is used for AR 367 */ 368 + irq_set_chip_and_handler(M32R_IRQ_INT3, &opsput_irq_type, 369 handle_level_irq); 370 icu_data[M32R_IRQ_INT3].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10; 371 disable_opsput_irq(M32R_IRQ_INT3);
+9 -9
arch/m32r/platforms/usrv/setup.c
··· 138 once++; 139 140 /* MFT2 : system timer */ 141 - set_irq_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, 142 handle_level_irq); 143 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 144 disable_mappi_irq(M32R_IRQ_MFT2); 145 146 #if defined(CONFIG_SERIAL_M32R_SIO) 147 /* SIO0_R : uart receive data */ 148 - set_irq_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, 149 handle_level_irq); 150 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 151 disable_mappi_irq(M32R_IRQ_SIO0_R); 152 153 /* SIO0_S : uart send data */ 154 - set_irq_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, 155 handle_level_irq); 156 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 157 disable_mappi_irq(M32R_IRQ_SIO0_S); 158 159 /* SIO1_R : uart receive data */ 160 - set_irq_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, 161 handle_level_irq); 162 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 163 disable_mappi_irq(M32R_IRQ_SIO1_R); 164 165 /* SIO1_S : uart send data */ 166 - set_irq_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, 167 handle_level_irq); 168 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 169 disable_mappi_irq(M32R_IRQ_SIO1_S); ··· 171 172 /* INT#67-#71: CFC#0 IREQ on PLD */ 173 for (i = 0 ; i < CONFIG_M32R_CFC_NUM ; i++ ) { 174 - set_irq_chip_and_handler(PLD_IRQ_CF0 + i, 175 &m32700ut_pld_irq_type, 176 handle_level_irq); 177 pld_icu_data[irq2pldirq(PLD_IRQ_CF0 + i)].icucr ··· 181 182 #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) 183 /* INT#76: 16552D#0 IREQ on PLD */ 184 - set_irq_chip_and_handler(PLD_IRQ_UART0, &m32700ut_pld_irq_type, 185 handle_level_irq); 186 pld_icu_data[irq2pldirq(PLD_IRQ_UART0)].icucr 187 = PLD_ICUCR_ISMOD03; /* 'H' level sense */ 188 disable_m32700ut_pld_irq(PLD_IRQ_UART0); 189 190 /* INT#77: 16552D#1 IREQ on PLD */ 191 - set_irq_chip_and_handler(PLD_IRQ_UART1, &m32700ut_pld_irq_type, 192 handle_level_irq); 193 pld_icu_data[irq2pldirq(PLD_IRQ_UART1)].icucr 194 = PLD_ICUCR_ISMOD03; /* 'H' level sense */ ··· 197 198 #if defined(CONFIG_IDC_AK4524) || defined(CONFIG_IDC_AK4524_MODULE) 199 /* INT#80: AK4524 IREQ on PLD */ 200 - set_irq_chip_and_handler(PLD_IRQ_SNDINT, &m32700ut_pld_irq_type, 201 handle_level_irq); 202 pld_icu_data[irq2pldirq(PLD_IRQ_SNDINT)].icucr 203 = PLD_ICUCR_ISMOD01; /* 'L' level sense */
··· 138 once++; 139 140 /* MFT2 : system timer */ 141 + irq_set_chip_and_handler(M32R_IRQ_MFT2, &mappi_irq_type, 142 handle_level_irq); 143 icu_data[M32R_IRQ_MFT2].icucr = M32R_ICUCR_IEN; 144 disable_mappi_irq(M32R_IRQ_MFT2); 145 146 #if defined(CONFIG_SERIAL_M32R_SIO) 147 /* SIO0_R : uart receive data */ 148 + irq_set_chip_and_handler(M32R_IRQ_SIO0_R, &mappi_irq_type, 149 handle_level_irq); 150 icu_data[M32R_IRQ_SIO0_R].icucr = 0; 151 disable_mappi_irq(M32R_IRQ_SIO0_R); 152 153 /* SIO0_S : uart send data */ 154 + irq_set_chip_and_handler(M32R_IRQ_SIO0_S, &mappi_irq_type, 155 handle_level_irq); 156 icu_data[M32R_IRQ_SIO0_S].icucr = 0; 157 disable_mappi_irq(M32R_IRQ_SIO0_S); 158 159 /* SIO1_R : uart receive data */ 160 + irq_set_chip_and_handler(M32R_IRQ_SIO1_R, &mappi_irq_type, 161 handle_level_irq); 162 icu_data[M32R_IRQ_SIO1_R].icucr = 0; 163 disable_mappi_irq(M32R_IRQ_SIO1_R); 164 165 /* SIO1_S : uart send data */ 166 + irq_set_chip_and_handler(M32R_IRQ_SIO1_S, &mappi_irq_type, 167 handle_level_irq); 168 icu_data[M32R_IRQ_SIO1_S].icucr = 0; 169 disable_mappi_irq(M32R_IRQ_SIO1_S); ··· 171 172 /* INT#67-#71: CFC#0 IREQ on PLD */ 173 for (i = 0 ; i < CONFIG_M32R_CFC_NUM ; i++ ) { 174 + irq_set_chip_and_handler(PLD_IRQ_CF0 + i, 175 &m32700ut_pld_irq_type, 176 handle_level_irq); 177 pld_icu_data[irq2pldirq(PLD_IRQ_CF0 + i)].icucr ··· 181 182 #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) 183 /* INT#76: 16552D#0 IREQ on PLD */ 184 + irq_set_chip_and_handler(PLD_IRQ_UART0, &m32700ut_pld_irq_type, 185 handle_level_irq); 186 pld_icu_data[irq2pldirq(PLD_IRQ_UART0)].icucr 187 = PLD_ICUCR_ISMOD03; /* 'H' level sense */ 188 disable_m32700ut_pld_irq(PLD_IRQ_UART0); 189 190 /* INT#77: 16552D#1 IREQ on PLD */ 191 + irq_set_chip_and_handler(PLD_IRQ_UART1, &m32700ut_pld_irq_type, 192 handle_level_irq); 193 pld_icu_data[irq2pldirq(PLD_IRQ_UART1)].icucr 194 = PLD_ICUCR_ISMOD03; /* 'H' level sense */ ··· 197 198 #if defined(CONFIG_IDC_AK4524) || defined(CONFIG_IDC_AK4524_MODULE) 199 /* INT#80: AK4524 IREQ on PLD */ 200 + irq_set_chip_and_handler(PLD_IRQ_SNDINT, &m32700ut_pld_irq_type, 201 handle_level_irq); 202 pld_icu_data[irq2pldirq(PLD_IRQ_SNDINT)].icucr 203 = PLD_ICUCR_ISMOD01; /* 'L' level sense */
+1
arch/um/Kconfig.common
··· 8 default y 9 select HAVE_GENERIC_HARDIRQS 10 select GENERIC_HARDIRQS_NO_DEPRECATED 11 12 config MMU 13 bool
··· 8 default y 9 select HAVE_GENERIC_HARDIRQS 10 select GENERIC_HARDIRQS_NO_DEPRECATED 11 + select GENERIC_IRQ_SHOW 12 13 config MMU 14 bool
+3 -50
arch/um/kernel/irq.c
··· 18 #include "os.h" 19 20 /* 21 - * Generic, controller-independent functions: 22 - */ 23 - 24 - int show_interrupts(struct seq_file *p, void *v) 25 - { 26 - int i = *(loff_t *) v, j; 27 - struct irqaction * action; 28 - unsigned long flags; 29 - 30 - if (i == 0) { 31 - seq_printf(p, " "); 32 - for_each_online_cpu(j) 33 - seq_printf(p, "CPU%d ",j); 34 - seq_putc(p, '\n'); 35 - } 36 - 37 - if (i < NR_IRQS) { 38 - struct irq_desc *desc = irq_to_desc(i); 39 - 40 - raw_spin_lock_irqsave(&desc->lock, flags); 41 - action = desc->action; 42 - if (!action) 43 - goto skip; 44 - seq_printf(p, "%3d: ",i); 45 - #ifndef CONFIG_SMP 46 - seq_printf(p, "%10u ", kstat_irqs(i)); 47 - #else 48 - for_each_online_cpu(j) 49 - seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 50 - #endif 51 - seq_printf(p, " %14s", get_irq_desc_chip(desc)->name); 52 - seq_printf(p, " %s", action->name); 53 - 54 - for (action=action->next; action; action = action->next) 55 - seq_printf(p, ", %s", action->name); 56 - 57 - seq_putc(p, '\n'); 58 - skip: 59 - raw_spin_unlock_irqrestore(&desc->lock, flags); 60 - } else if (i == NR_IRQS) 61 - seq_putc(p, '\n'); 62 - 63 - return 0; 64 - } 65 - 66 - /* 67 * This list is accessed under irq_lock, except in sigio_handler, 68 * where it is safe from being modified. IRQ handlers won't change it - 69 * if an IRQ source has vanished, it will be freed by free_irqs just ··· 344 { 345 int i; 346 347 - set_irq_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); 348 349 - for (i = 1; i < NR_IRQS; i++) { 350 - set_irq_chip_and_handler(i, &normal_irq_type, handle_edge_irq); 351 - } 352 } 353 354 /*
··· 18 #include "os.h" 19 20 /* 21 * This list is accessed under irq_lock, except in sigio_handler, 22 * where it is safe from being modified. IRQ handlers won't change it - 23 * if an IRQ source has vanished, it will be freed by free_irqs just ··· 390 { 391 int i; 392 393 + irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq); 394 395 + for (i = 1; i < NR_IRQS; i++) 396 + irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq); 397 } 398 399 /*
+3 -3
arch/xtensa/Kconfig
··· 7 config XTENSA 8 def_bool y 9 select HAVE_IDE 10 help 11 Xtensa processors are 32-bit RISC machines designed by Tensilica 12 primarily for embedded systems. These processors are both ··· 28 def_bool y 29 30 config GENERIC_HWEIGHT 31 - def_bool y 32 - 33 - config GENERIC_HARDIRQS 34 def_bool y 35 36 config GENERIC_GPIO
··· 7 config XTENSA 8 def_bool y 9 select HAVE_IDE 10 + select HAVE_GENERIC_HARDIRQS 11 + select GENERIC_IRQ_SHOW 12 + select GENERIC_HARDIRQS_NO_DEPRECATED 13 help 14 Xtensa processors are 32-bit RISC machines designed by Tensilica 15 primarily for embedded systems. These processors are both ··· 25 def_bool y 26 27 config GENERIC_HWEIGHT 28 def_bool y 29 30 config GENERIC_GPIO
+34 -70
arch/xtensa/kernel/irq.c
··· 35 asmlinkage void do_IRQ(int irq, struct pt_regs *regs) 36 { 37 struct pt_regs *old_regs = set_irq_regs(regs); 38 - struct irq_desc *desc = irq_desc + irq; 39 40 if (irq >= NR_IRQS) { 41 printk(KERN_EMERG "%s: cannot handle IRQ %d\n", ··· 56 sp - sizeof(struct thread_info)); 57 } 58 #endif 59 - desc->handle_irq(irq, desc); 60 61 irq_exit(); 62 set_irq_regs(old_regs); 63 } 64 65 - /* 66 - * Generic, controller-independent functions: 67 - */ 68 - 69 - int show_interrupts(struct seq_file *p, void *v) 70 { 71 - int i = *(loff_t *) v, j; 72 - struct irqaction * action; 73 - unsigned long flags; 74 75 - if (i == 0) { 76 - seq_printf(p, " "); 77 - for_each_online_cpu(j) 78 - seq_printf(p, "CPU%d ",j); 79 - seq_putc(p, '\n'); 80 - } 81 - 82 - if (i < NR_IRQS) { 83 - raw_spin_lock_irqsave(&irq_desc[i].lock, flags); 84 - action = irq_desc[i].action; 85 - if (!action) 86 - goto skip; 87 - seq_printf(p, "%3d: ",i); 88 - #ifndef CONFIG_SMP 89 - seq_printf(p, "%10u ", kstat_irqs(i)); 90 - #else 91 - for_each_online_cpu(j) 92 - seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 93 - #endif 94 - seq_printf(p, " %14s", irq_desc[i].chip->name); 95 - seq_printf(p, " %s", action->name); 96 - 97 - for (action=action->next; action; action = action->next) 98 - seq_printf(p, ", %s", action->name); 99 - 100 - seq_putc(p, '\n'); 101 - skip: 102 - raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags); 103 - } else if (i == NR_IRQS) { 104 - seq_printf(p, "NMI: "); 105 - for_each_online_cpu(j) 106 - seq_printf(p, "%10u ", nmi_count(j)); 107 - seq_putc(p, '\n'); 108 - seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count)); 109 - } 110 return 0; 111 } 112 113 - static void xtensa_irq_mask(unsigned int irq) 114 { 115 - cached_irq_mask &= ~(1 << irq); 116 set_sr (cached_irq_mask, INTENABLE); 117 } 118 119 - static void xtensa_irq_unmask(unsigned int irq) 120 { 121 - cached_irq_mask |= 1 << irq; 122 set_sr (cached_irq_mask, INTENABLE); 123 } 124 125 - static void xtensa_irq_enable(unsigned int irq) 126 { 127 - variant_irq_enable(irq); 128 - xtensa_irq_unmask(irq); 129 } 130 131 - static void xtensa_irq_disable(unsigned int irq) 132 { 133 - xtensa_irq_mask(irq); 134 - variant_irq_disable(irq); 135 } 136 137 - static void xtensa_irq_ack(unsigned int irq) 138 { 139 - set_sr(1 << irq, INTCLEAR); 140 } 141 142 - static int xtensa_irq_retrigger(unsigned int irq) 143 { 144 - set_sr (1 << irq, INTSET); 145 return 1; 146 } 147 148 149 static struct irq_chip xtensa_irq_chip = { 150 .name = "xtensa", 151 - .enable = xtensa_irq_enable, 152 - .disable = xtensa_irq_disable, 153 - .mask = xtensa_irq_mask, 154 - .unmask = xtensa_irq_unmask, 155 - .ack = xtensa_irq_ack, 156 - .retrigger = xtensa_irq_retrigger, 157 }; 158 159 void __init init_IRQ(void) ··· 129 int mask = 1 << index; 130 131 if (mask & XCHAL_INTTYPE_MASK_SOFTWARE) 132 - set_irq_chip_and_handler(index, &xtensa_irq_chip, 133 handle_simple_irq); 134 135 else if (mask & XCHAL_INTTYPE_MASK_EXTERN_EDGE) 136 - set_irq_chip_and_handler(index, &xtensa_irq_chip, 137 handle_edge_irq); 138 139 else if (mask & XCHAL_INTTYPE_MASK_EXTERN_LEVEL) 140 - set_irq_chip_and_handler(index, &xtensa_irq_chip, 141 handle_level_irq); 142 143 else if (mask & XCHAL_INTTYPE_MASK_TIMER) 144 - set_irq_chip_and_handler(index, &xtensa_irq_chip, 145 handle_edge_irq); 146 147 else /* XCHAL_INTTYPE_MASK_WRITE_ERROR */ 148 /* XCHAL_INTTYPE_MASK_NMI */ 149 150 - set_irq_chip_and_handler(index, &xtensa_irq_chip, 151 handle_level_irq); 152 } 153
··· 35 asmlinkage void do_IRQ(int irq, struct pt_regs *regs) 36 { 37 struct pt_regs *old_regs = set_irq_regs(regs); 38 39 if (irq >= NR_IRQS) { 40 printk(KERN_EMERG "%s: cannot handle IRQ %d\n", ··· 57 sp - sizeof(struct thread_info)); 58 } 59 #endif 60 + generic_handle_irq(irq); 61 62 irq_exit(); 63 set_irq_regs(old_regs); 64 } 65 66 + int arch_show_interrupts(struct seq_file *p, int prec) 67 { 68 + int j; 69 70 + seq_printf(p, "%*s: ", prec, "NMI"); 71 + for_each_online_cpu(j) 72 + seq_printf(p, "%10u ", nmi_count(j)); 73 + seq_putc(p, '\n'); 74 + seq_printf(p, "%*s: ", prec, "ERR"); 75 + seq_printf(p, "%10u\n", atomic_read(&irq_err_count)); 76 return 0; 77 } 78 79 + static void xtensa_irq_mask(struct irq_chip *d) 80 { 81 + cached_irq_mask &= ~(1 << d->irq); 82 set_sr (cached_irq_mask, INTENABLE); 83 } 84 85 + static void xtensa_irq_unmask(struct irq_chip *d) 86 { 87 + cached_irq_mask |= 1 << d->irq; 88 set_sr (cached_irq_mask, INTENABLE); 89 } 90 91 + static void xtensa_irq_enable(struct irq_chip *d) 92 { 93 + variant_irq_enable(d->irq); 94 + xtensa_irq_unmask(d->irq); 95 } 96 97 + static void xtensa_irq_disable(struct irq_chip *d) 98 { 99 + xtensa_irq_mask(d->irq); 100 + variant_irq_disable(d->irq); 101 } 102 103 + static void xtensa_irq_ack(struct irq_chip *d) 104 { 105 + set_sr(1 << d->irq, INTCLEAR); 106 } 107 108 + static int xtensa_irq_retrigger(struct irq_chip *d) 109 { 110 + set_sr (1 << d->irq, INTSET); 111 return 1; 112 } 113 114 115 static struct irq_chip xtensa_irq_chip = { 116 .name = "xtensa", 117 + .irq_enable = xtensa_irq_enable, 118 + .irq_disable = xtensa_irq_disable, 119 + .irq_mask = xtensa_irq_mask, 120 + .irq_unmask = xtensa_irq_unmask, 121 + .irq_ack = xtensa_irq_ack, 122 + .irq_retrigger = xtensa_irq_retrigger, 123 }; 124 125 void __init init_IRQ(void) ··· 165 int mask = 1 << index; 166 167 if (mask & XCHAL_INTTYPE_MASK_SOFTWARE) 168 + irq_set_chip_and_handler(index, &xtensa_irq_chip, 169 handle_simple_irq); 170 171 else if (mask & XCHAL_INTTYPE_MASK_EXTERN_EDGE) 172 + irq_set_chip_and_handler(index, &xtensa_irq_chip, 173 handle_edge_irq); 174 175 else if (mask & XCHAL_INTTYPE_MASK_EXTERN_LEVEL) 176 + irq_set_chip_and_handler(index, &xtensa_irq_chip, 177 handle_level_irq); 178 179 else if (mask & XCHAL_INTTYPE_MASK_TIMER) 180 + irq_set_chip_and_handler(index, &xtensa_irq_chip, 181 handle_edge_irq); 182 183 else /* XCHAL_INTTYPE_MASK_WRITE_ERROR */ 184 /* XCHAL_INTTYPE_MASK_NMI */ 185 186 + irq_set_chip_and_handler(index, &xtensa_irq_chip, 187 handle_level_irq); 188 } 189
+1 -1
arch/xtensa/platforms/s6105/device.c
··· 120 irq = gpio_to_irq(pin); 121 if (irq < 0) 122 goto free; 123 - if (set_irq_type(irq, IRQ_TYPE_LEVEL_LOW) < 0) 124 goto free; 125 return irq; 126 free:
··· 120 irq = gpio_to_irq(pin); 121 if (irq < 0) 122 goto free; 123 + if (irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW) < 0) 124 goto free; 125 return irq; 126 free:
+22 -23
arch/xtensa/variants/s6000/gpio.c
··· 85 return gpiochip_add(&gpiochip); 86 } 87 88 - static void ack(unsigned int irq) 89 { 90 - writeb(1 << (irq - IRQ_BASE), S6_REG_GPIO + S6_GPIO_IC); 91 } 92 93 - static void mask(unsigned int irq) 94 { 95 u8 r = readb(S6_REG_GPIO + S6_GPIO_IE); 96 - r &= ~(1 << (irq - IRQ_BASE)); 97 writeb(r, S6_REG_GPIO + S6_GPIO_IE); 98 } 99 100 - static void unmask(unsigned int irq) 101 { 102 u8 m = readb(S6_REG_GPIO + S6_GPIO_IE); 103 - m |= 1 << (irq - IRQ_BASE); 104 writeb(m, S6_REG_GPIO + S6_GPIO_IE); 105 } 106 107 - static int set_type(unsigned int irq, unsigned int type) 108 { 109 - const u8 m = 1 << (irq - IRQ_BASE); 110 irq_flow_handler_t handler; 111 - struct irq_desc *desc; 112 u8 reg; 113 114 if (type == IRQ_TYPE_PROBE) { ··· 128 handler = handle_edge_irq; 129 } 130 writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IS); 131 - desc = irq_to_desc(irq); 132 - desc->handle_irq = handler; 133 134 reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IEV); 135 if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)) ··· 148 149 static struct irq_chip gpioirqs = { 150 .name = "GPIO", 151 - .ack = ack, 152 - .mask = mask, 153 - .unmask = unmask, 154 - .set_type = set_type, 155 }; 156 157 static u8 demux_masks[4]; 158 159 static void demux_irqs(unsigned int irq, struct irq_desc *desc) 160 { 161 - u8 *mask = get_irq_desc_data(desc); 162 u8 pending; 163 int cirq; 164 165 - desc->chip->mask(irq); 166 - desc->chip->ack(irq); 167 pending = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_MIS) & *mask; 168 cirq = IRQ_BASE - 1; 169 while (pending) { ··· 173 pending >>= n; 174 generic_handle_irq(cirq); 175 } 176 - desc->chip->unmask(irq); 177 } 178 179 extern const signed char *platform_irq_mappings[XTENSA_NR_IRQS]; ··· 218 i = ffs(mask); 219 cirq += i; 220 mask >>= i; 221 - set_irq_chip(cirq, &gpioirqs); 222 - set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); 223 } while (mask); 224 - set_irq_data(irq, demux_masks + n); 225 - set_irq_chained_handler(irq, demux_irqs); 226 if (++n == ARRAY_SIZE(demux_masks)) 227 break; 228 }
··· 85 return gpiochip_add(&gpiochip); 86 } 87 88 + static void ack(struct irq_data *d) 89 { 90 + writeb(1 << (d->irq - IRQ_BASE), S6_REG_GPIO + S6_GPIO_IC); 91 } 92 93 + static void mask(struct irq_data *d) 94 { 95 u8 r = readb(S6_REG_GPIO + S6_GPIO_IE); 96 + r &= ~(1 << (d->irq - IRQ_BASE)); 97 writeb(r, S6_REG_GPIO + S6_GPIO_IE); 98 } 99 100 + static void unmask(struct irq_data *d) 101 { 102 u8 m = readb(S6_REG_GPIO + S6_GPIO_IE); 103 + m |= 1 << (d->irq - IRQ_BASE); 104 writeb(m, S6_REG_GPIO + S6_GPIO_IE); 105 } 106 107 + static int set_type(struct irq_data *d, unsigned int type) 108 { 109 + const u8 m = 1 << (d->irq - IRQ_BASE); 110 irq_flow_handler_t handler; 111 u8 reg; 112 113 if (type == IRQ_TYPE_PROBE) { ··· 129 handler = handle_edge_irq; 130 } 131 writeb(reg, S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IS); 132 + __irq_set_handler_locked(irq, handler); 133 134 reg = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_IEV); 135 if (type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)) ··· 150 151 static struct irq_chip gpioirqs = { 152 .name = "GPIO", 153 + .irq_ack = ack, 154 + .irq_mask = mask, 155 + .irq_unmask = unmask, 156 + .irq_set_type = set_type, 157 }; 158 159 static u8 demux_masks[4]; 160 161 static void demux_irqs(unsigned int irq, struct irq_desc *desc) 162 { 163 + struct irq_chip *chip = irq_desc_get_chip(desc); 164 + u8 *mask = irq_desc_get_handler_data(desc); 165 u8 pending; 166 int cirq; 167 168 + chip->irq_mask(&desc->irq_data); 169 + chip->irq_ack(&desc->irq_data)); 170 pending = readb(S6_REG_GPIO + S6_GPIO_BANK(0) + S6_GPIO_MIS) & *mask; 171 cirq = IRQ_BASE - 1; 172 while (pending) { ··· 174 pending >>= n; 175 generic_handle_irq(cirq); 176 } 177 + chip->irq_unmask(&desc->irq_data)); 178 } 179 180 extern const signed char *platform_irq_mappings[XTENSA_NR_IRQS]; ··· 219 i = ffs(mask); 220 cirq += i; 221 mask >>= i; 222 + irq_set_chip(cirq, &gpioirqs); 223 + irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); 224 } while (mask); 225 + irq_set_handler_data(irq, demux_masks + n); 226 + irq_set_chained_handler(irq, demux_irqs); 227 if (++n == ARRAY_SIZE(demux_masks)) 228 break; 229 }
+4 -4
drivers/gpio/adp5588-gpio.c
··· 289 290 for (gpio = 0; gpio < dev->gpio_chip.ngpio; gpio++) { 291 int irq = gpio + dev->irq_base; 292 - set_irq_chip_data(irq, dev); 293 - set_irq_chip_and_handler(irq, &adp5588_irq_chip, 294 handle_level_irq); 295 - set_irq_nested_thread(irq, 1); 296 #ifdef CONFIG_ARM 297 /* 298 * ARM needs us to explicitly flag the IRQ as VALID, ··· 300 */ 301 set_irq_flags(irq, IRQF_VALID); 302 #else 303 - set_irq_noprobe(irq); 304 #endif 305 } 306
··· 289 290 for (gpio = 0; gpio < dev->gpio_chip.ngpio; gpio++) { 291 int irq = gpio + dev->irq_base; 292 + irq_set_chip_data(irq, dev); 293 + irq_set_chip_and_handler(irq, &adp5588_irq_chip, 294 handle_level_irq); 295 + irq_set_nested_thread(irq, 1); 296 #ifdef CONFIG_ARM 297 /* 298 * ARM needs us to explicitly flag the IRQ as VALID, ··· 300 */ 301 set_irq_flags(irq, IRQF_VALID); 302 #else 303 + irq_set_noprobe(irq); 304 #endif 305 } 306
-45
drivers/gpio/gpiolib.c
··· 1656 chip->get 1657 ? (chip->get(chip, i) ? "hi" : "lo") 1658 : "? "); 1659 - 1660 - if (!is_out) { 1661 - int irq = gpio_to_irq(gpio); 1662 - struct irq_desc *desc = irq_to_desc(irq); 1663 - 1664 - /* This races with request_irq(), set_irq_type(), 1665 - * and set_irq_wake() ... but those are "rare". 1666 - * 1667 - * More significantly, trigger type flags aren't 1668 - * currently maintained by genirq. 1669 - */ 1670 - if (irq >= 0 && desc->action) { 1671 - char *trigger; 1672 - 1673 - switch (desc->status & IRQ_TYPE_SENSE_MASK) { 1674 - case IRQ_TYPE_NONE: 1675 - trigger = "(default)"; 1676 - break; 1677 - case IRQ_TYPE_EDGE_FALLING: 1678 - trigger = "edge-falling"; 1679 - break; 1680 - case IRQ_TYPE_EDGE_RISING: 1681 - trigger = "edge-rising"; 1682 - break; 1683 - case IRQ_TYPE_EDGE_BOTH: 1684 - trigger = "edge-both"; 1685 - break; 1686 - case IRQ_TYPE_LEVEL_HIGH: 1687 - trigger = "level-high"; 1688 - break; 1689 - case IRQ_TYPE_LEVEL_LOW: 1690 - trigger = "level-low"; 1691 - break; 1692 - default: 1693 - trigger = "?trigger?"; 1694 - break; 1695 - } 1696 - 1697 - seq_printf(s, " irq-%d %s%s", 1698 - irq, trigger, 1699 - (desc->status & IRQ_WAKEUP) 1700 - ? " wakeup" : ""); 1701 - } 1702 - } 1703 - 1704 seq_printf(s, "\n"); 1705 } 1706 }
··· 1656 chip->get 1657 ? (chip->get(chip, i) ? "hi" : "lo") 1658 : "? "); 1659 seq_printf(s, "\n"); 1660 } 1661 }
+4 -4
drivers/gpio/max732x.c
··· 470 if (!(chip->dir_input & (1 << lvl))) 471 continue; 472 473 - set_irq_chip_data(irq, chip); 474 - set_irq_chip_and_handler(irq, &max732x_irq_chip, 475 handle_edge_irq); 476 - set_irq_nested_thread(irq, 1); 477 #ifdef CONFIG_ARM 478 set_irq_flags(irq, IRQF_VALID); 479 #else 480 - set_irq_noprobe(irq); 481 #endif 482 } 483
··· 470 if (!(chip->dir_input & (1 << lvl))) 471 continue; 472 473 + irq_set_chip_data(irq, chip); 474 + irq_set_chip_and_handler(irq, &max732x_irq_chip, 475 handle_edge_irq); 476 + irq_set_nested_thread(irq, 1); 477 #ifdef CONFIG_ARM 478 set_irq_flags(irq, IRQF_VALID); 479 #else 480 + irq_set_noprobe(irq); 481 #endif 482 } 483
+3 -3
drivers/gpio/pca953x.c
··· 395 for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) { 396 int irq = lvl + chip->irq_base; 397 398 - set_irq_chip_data(irq, chip); 399 - set_irq_chip_and_handler(irq, &pca953x_irq_chip, 400 handle_edge_irq); 401 #ifdef CONFIG_ARM 402 set_irq_flags(irq, IRQF_VALID); 403 #else 404 - set_irq_noprobe(irq); 405 #endif 406 } 407
··· 395 for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) { 396 int irq = lvl + chip->irq_base; 397 398 + irq_set_chip_data(irq, chip); 399 + irq_set_chip_and_handler(irq, &pca953x_irq_chip, 400 handle_edge_irq); 401 #ifdef CONFIG_ARM 402 set_irq_flags(irq, IRQF_VALID); 403 #else 404 + irq_set_noprobe(irq); 405 #endif 406 } 407
+7 -7
drivers/gpio/pl061.c
··· 210 211 static void pl061_irq_handler(unsigned irq, struct irq_desc *desc) 212 { 213 - struct list_head *chip_list = get_irq_data(irq); 214 struct list_head *ptr; 215 struct pl061_gpio *chip; 216 ··· 294 ret = -ENODEV; 295 goto iounmap; 296 } 297 - set_irq_chained_handler(irq, pl061_irq_handler); 298 if (!test_and_set_bit(irq, init_irq)) { /* list initialized? */ 299 chip_list = kmalloc(sizeof(*chip_list), GFP_KERNEL); 300 if (chip_list == NULL) { ··· 303 goto iounmap; 304 } 305 INIT_LIST_HEAD(chip_list); 306 - set_irq_data(irq, chip_list); 307 } else 308 - chip_list = get_irq_data(irq); 309 list_add(&chip->list, chip_list); 310 311 for (i = 0; i < PL061_GPIO_NR; i++) { ··· 315 else 316 pl061_direction_input(&chip->gc, i); 317 318 - set_irq_chip(i+chip->irq_base, &pl061_irqchip); 319 - set_irq_handler(i+chip->irq_base, handle_simple_irq); 320 set_irq_flags(i+chip->irq_base, IRQF_VALID); 321 - set_irq_chip_data(i+chip->irq_base, chip); 322 } 323 324 return 0;
··· 210 211 static void pl061_irq_handler(unsigned irq, struct irq_desc *desc) 212 { 213 + struct list_head *chip_list = irq_get_handler_data(irq); 214 struct list_head *ptr; 215 struct pl061_gpio *chip; 216 ··· 294 ret = -ENODEV; 295 goto iounmap; 296 } 297 + irq_set_chained_handler(irq, pl061_irq_handler); 298 if (!test_and_set_bit(irq, init_irq)) { /* list initialized? */ 299 chip_list = kmalloc(sizeof(*chip_list), GFP_KERNEL); 300 if (chip_list == NULL) { ··· 303 goto iounmap; 304 } 305 INIT_LIST_HEAD(chip_list); 306 + irq_set_handler_data(irq, chip_list); 307 } else 308 + chip_list = irq_get_handler_data(irq); 309 list_add(&chip->list, chip_list); 310 311 for (i = 0; i < PL061_GPIO_NR; i++) { ··· 315 else 316 pl061_direction_input(&chip->gc, i); 317 318 + irq_set_chip_and_handler(i + chip->irq_base, &pl061_irqchip, 319 + handle_simple_irq); 320 set_irq_flags(i+chip->irq_base, IRQF_VALID); 321 + irq_set_chip_data(i + chip->irq_base, chip); 322 } 323 324 return 0;
+6 -6
drivers/gpio/stmpe-gpio.c
··· 254 int irq; 255 256 for (irq = base; irq < base + stmpe_gpio->chip.ngpio; irq++) { 257 - set_irq_chip_data(irq, stmpe_gpio); 258 - set_irq_chip_and_handler(irq, &stmpe_gpio_irq_chip, 259 handle_simple_irq); 260 - set_irq_nested_thread(irq, 1); 261 #ifdef CONFIG_ARM 262 set_irq_flags(irq, IRQF_VALID); 263 #else 264 - set_irq_noprobe(irq); 265 #endif 266 } 267 ··· 277 #ifdef CONFIG_ARM 278 set_irq_flags(irq, 0); 279 #endif 280 - set_irq_chip_and_handler(irq, NULL, NULL); 281 - set_irq_chip_data(irq, NULL); 282 } 283 } 284
··· 254 int irq; 255 256 for (irq = base; irq < base + stmpe_gpio->chip.ngpio; irq++) { 257 + irq_set_chip_data(irq, stmpe_gpio); 258 + irq_set_chip_and_handler(irq, &stmpe_gpio_irq_chip, 259 handle_simple_irq); 260 + irq_set_nested_thread(irq, 1); 261 #ifdef CONFIG_ARM 262 set_irq_flags(irq, IRQF_VALID); 263 #else 264 + irq_set_noprobe(irq); 265 #endif 266 } 267 ··· 277 #ifdef CONFIG_ARM 278 set_irq_flags(irq, 0); 279 #endif 280 + irq_set_chip_and_handler(irq, NULL, NULL); 281 + irq_set_chip_data(irq, NULL); 282 } 283 } 284
+4 -5
drivers/gpio/sx150x.c
··· 551 552 for (n = 0; n < chip->dev_cfg->ngpios; ++n) { 553 irq = irq_base + n; 554 - set_irq_chip_and_handler(irq, &chip->irq_chip, handle_edge_irq); 555 - set_irq_nested_thread(irq, 1); 556 #ifdef CONFIG_ARM 557 set_irq_flags(irq, IRQF_VALID); 558 #else 559 - set_irq_noprobe(irq); 560 #endif 561 } 562 ··· 583 584 for (n = 0; n < chip->dev_cfg->ngpios; ++n) { 585 irq = chip->irq_base + n; 586 - set_irq_handler(irq, NULL); 587 - set_irq_chip(irq, NULL); 588 } 589 } 590
··· 551 552 for (n = 0; n < chip->dev_cfg->ngpios; ++n) { 553 irq = irq_base + n; 554 + irq_set_chip_and_handler(irq, &chip->irq_chip, handle_edge_irq); 555 + irq_set_nested_thread(irq, 1); 556 #ifdef CONFIG_ARM 557 set_irq_flags(irq, IRQF_VALID); 558 #else 559 + irq_set_noprobe(irq); 560 #endif 561 } 562 ··· 583 584 for (n = 0; n < chip->dev_cfg->ngpios; ++n) { 585 irq = chip->irq_base + n; 586 + irq_set_chip_and_handler(irq, NULL, NULL); 587 } 588 } 589
+6 -6
drivers/gpio/tc3589x-gpio.c
··· 239 int irq; 240 241 for (irq = base; irq < base + tc3589x_gpio->chip.ngpio; irq++) { 242 - set_irq_chip_data(irq, tc3589x_gpio); 243 - set_irq_chip_and_handler(irq, &tc3589x_gpio_irq_chip, 244 handle_simple_irq); 245 - set_irq_nested_thread(irq, 1); 246 #ifdef CONFIG_ARM 247 set_irq_flags(irq, IRQF_VALID); 248 #else 249 - set_irq_noprobe(irq); 250 #endif 251 } 252 ··· 262 #ifdef CONFIG_ARM 263 set_irq_flags(irq, 0); 264 #endif 265 - set_irq_chip_and_handler(irq, NULL, NULL); 266 - set_irq_chip_data(irq, NULL); 267 } 268 } 269
··· 239 int irq; 240 241 for (irq = base; irq < base + tc3589x_gpio->chip.ngpio; irq++) { 242 + irq_set_chip_data(irq, tc3589x_gpio); 243 + irq_set_chip_and_handler(irq, &tc3589x_gpio_irq_chip, 244 handle_simple_irq); 245 + irq_set_nested_thread(irq, 1); 246 #ifdef CONFIG_ARM 247 set_irq_flags(irq, IRQF_VALID); 248 #else 249 + irq_set_noprobe(irq); 250 #endif 251 } 252 ··· 262 #ifdef CONFIG_ARM 263 set_irq_flags(irq, 0); 264 #endif 265 + irq_set_chip_and_handler(irq, NULL, NULL); 266 + irq_set_chip_data(irq, NULL); 267 } 268 } 269
+9 -9
drivers/gpio/timbgpio.c
··· 196 197 static void timbgpio_irq(unsigned int irq, struct irq_desc *desc) 198 { 199 - struct timbgpio *tgpio = get_irq_data(irq); 200 unsigned long ipr; 201 int offset; 202 ··· 292 return 0; 293 294 for (i = 0; i < pdata->nr_pins; i++) { 295 - set_irq_chip_and_handler_name(tgpio->irq_base + i, 296 &timbgpio_irqchip, handle_simple_irq, "mux"); 297 - set_irq_chip_data(tgpio->irq_base + i, tgpio); 298 #ifdef CONFIG_ARM 299 set_irq_flags(tgpio->irq_base + i, IRQF_VALID | IRQF_PROBE); 300 #endif 301 } 302 303 - set_irq_data(irq, tgpio); 304 - set_irq_chained_handler(irq, timbgpio_irq); 305 306 return 0; 307 ··· 327 if (irq >= 0 && tgpio->irq_base > 0) { 328 int i; 329 for (i = 0; i < tgpio->gpio.ngpio; i++) { 330 - set_irq_chip(tgpio->irq_base + i, NULL); 331 - set_irq_chip_data(tgpio->irq_base + i, NULL); 332 } 333 334 - set_irq_handler(irq, NULL); 335 - set_irq_data(irq, NULL); 336 } 337 338 err = gpiochip_remove(&tgpio->gpio);
··· 196 197 static void timbgpio_irq(unsigned int irq, struct irq_desc *desc) 198 { 199 + struct timbgpio *tgpio = irq_get_handler_data(irq); 200 unsigned long ipr; 201 int offset; 202 ··· 292 return 0; 293 294 for (i = 0; i < pdata->nr_pins; i++) { 295 + irq_set_chip_and_handler_name(tgpio->irq_base + i, 296 &timbgpio_irqchip, handle_simple_irq, "mux"); 297 + irq_set_chip_data(tgpio->irq_base + i, tgpio); 298 #ifdef CONFIG_ARM 299 set_irq_flags(tgpio->irq_base + i, IRQF_VALID | IRQF_PROBE); 300 #endif 301 } 302 303 + irq_set_handler_data(irq, tgpio); 304 + irq_set_chained_handler(irq, timbgpio_irq); 305 306 return 0; 307 ··· 327 if (irq >= 0 && tgpio->irq_base > 0) { 328 int i; 329 for (i = 0; i < tgpio->gpio.ngpio; i++) { 330 + irq_set_chip(tgpio->irq_base + i, NULL); 331 + irq_set_chip_data(tgpio->irq_base + i, NULL); 332 } 333 334 + irq_set_handler(irq, NULL); 335 + irq_set_handler_data(irq, NULL); 336 } 337 338 err = gpiochip_remove(&tgpio->gpio);
+6 -6
drivers/gpio/vr41xx_giu.c
··· 238 break; 239 } 240 } 241 - set_irq_chip_and_handler(GIU_IRQ(pin), 242 &giuint_low_irq_chip, 243 handle_edge_irq); 244 } else { 245 giu_clear(GIUINTTYPL, mask); 246 giu_clear(GIUINTHTSELL, mask); 247 - set_irq_chip_and_handler(GIU_IRQ(pin), 248 &giuint_low_irq_chip, 249 handle_level_irq); 250 } ··· 273 break; 274 } 275 } 276 - set_irq_chip_and_handler(GIU_IRQ(pin), 277 &giuint_high_irq_chip, 278 handle_edge_irq); 279 } else { 280 giu_clear(GIUINTTYPH, mask); 281 giu_clear(GIUINTHTSELH, mask); 282 - set_irq_chip_and_handler(GIU_IRQ(pin), 283 &giuint_high_irq_chip, 284 handle_level_irq); 285 } ··· 539 chip = &giuint_high_irq_chip; 540 541 if (trigger & (1 << pin)) 542 - set_irq_chip_and_handler(i, chip, handle_edge_irq); 543 else 544 - set_irq_chip_and_handler(i, chip, handle_level_irq); 545 546 } 547
··· 238 break; 239 } 240 } 241 + irq_set_chip_and_handler(GIU_IRQ(pin), 242 &giuint_low_irq_chip, 243 handle_edge_irq); 244 } else { 245 giu_clear(GIUINTTYPL, mask); 246 giu_clear(GIUINTHTSELL, mask); 247 + irq_set_chip_and_handler(GIU_IRQ(pin), 248 &giuint_low_irq_chip, 249 handle_level_irq); 250 } ··· 273 break; 274 } 275 } 276 + irq_set_chip_and_handler(GIU_IRQ(pin), 277 &giuint_high_irq_chip, 278 handle_edge_irq); 279 } else { 280 giu_clear(GIUINTTYPH, mask); 281 giu_clear(GIUINTHTSELH, mask); 282 + irq_set_chip_and_handler(GIU_IRQ(pin), 283 &giuint_high_irq_chip, 284 handle_level_irq); 285 } ··· 539 chip = &giuint_high_irq_chip; 540 541 if (trigger & (1 << pin)) 542 + irq_set_chip_and_handler(i, chip, handle_edge_irq); 543 else 544 + irq_set_chip_and_handler(i, chip, handle_level_irq); 545 546 } 547
+4
include/linux/irq.h
··· 28 #include <asm/ptrace.h> 29 #include <asm/irq_regs.h> 30 31 struct irq_desc; 32 struct irq_data; 33 typedef void (*irq_flow_handler_t)(unsigned int irq, ··· 271 * @irq_set_wake: enable/disable power-management wake-on of an IRQ 272 * @irq_bus_lock: function to lock access to slow bus (i2c) chips 273 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips 274 * @flags: chip specific flags 275 * 276 * @release: release function solely used by UML ··· 318 319 void (*irq_bus_lock)(struct irq_data *data); 320 void (*irq_bus_sync_unlock)(struct irq_data *data); 321 322 unsigned long flags; 323
··· 28 #include <asm/ptrace.h> 29 #include <asm/irq_regs.h> 30 31 + struct seq_file; 32 struct irq_desc; 33 struct irq_data; 34 typedef void (*irq_flow_handler_t)(unsigned int irq, ··· 270 * @irq_set_wake: enable/disable power-management wake-on of an IRQ 271 * @irq_bus_lock: function to lock access to slow bus (i2c) chips 272 * @irq_bus_sync_unlock:function to sync and unlock slow bus (i2c) chips 273 + * @irq_print_chip: optional to print special chip info in show_interrupts 274 * @flags: chip specific flags 275 * 276 * @release: release function solely used by UML ··· 316 317 void (*irq_bus_lock)(struct irq_data *data); 318 void (*irq_bus_sync_unlock)(struct irq_data *data); 319 + 320 + void (*irq_print_chip)(struct irq_data *data, struct seq_file *p); 321 322 unsigned long flags; 323
+4
kernel/irq/Kconfig
··· 31 config GENERIC_IRQ_SHOW 32 bool 33 34 # Support for delayed migration from interrupt context 35 config GENERIC_PENDING_IRQ 36 bool
··· 31 config GENERIC_IRQ_SHOW 32 bool 33 34 + # Print level/edge extra information 35 + config GENERIC_IRQ_SHOW_LEVEL 36 + bool 37 + 38 # Support for delayed migration from interrupt context 39 config GENERIC_PENDING_IRQ 40 bool
+14 -1
kernel/irq/proc.c
··· 404 seq_printf(p, "%*d: ", prec, i); 405 for_each_online_cpu(j) 406 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 407 - seq_printf(p, " %8s", desc->irq_data.chip->name); 408 if (desc->name) 409 seq_printf(p, "-%-8s", desc->name); 410
··· 404 seq_printf(p, "%*d: ", prec, i); 405 for_each_online_cpu(j) 406 seq_printf(p, "%10u ", kstat_irqs_cpu(i, j)); 407 + 408 + if (desc->irq_data.chip) { 409 + if (desc->irq_data.chip->irq_print_chip) 410 + desc->irq_data.chip->irq_print_chip(&desc->irq_data, p); 411 + else if (desc->irq_data.chip->name) 412 + seq_printf(p, " %8s", desc->irq_data.chip->name); 413 + else 414 + seq_printf(p, " %8s", "-"); 415 + } else { 416 + seq_printf(p, " %8s", "None"); 417 + } 418 + #ifdef CONFIG_GENIRC_IRQ_SHOW_LEVEL 419 + seq_printf(p, " %-8s", irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge"); 420 + #endif 421 if (desc->name) 422 seq_printf(p, "-%-8s", desc->name); 423