[PARPORT] Consolidate code copies into a single generic irq handler

Several arches used the exact same code for their parport irq handling.
Make that code generic, in parport_irq_handler().

Also, s/__inline__/inline/ in include/linux/parport.h.

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>

+25 -50
+1 -8
drivers/parport/parport_amiga.c
··· 137 137 return status; 138 138 } 139 139 140 - /* as this ports irq handling is already done, we use a generic funktion */ 141 - static irqreturn_t amiga_interrupt(int irq, void *dev_id) 142 - { 143 - parport_generic_irq(irq, (struct parport *) dev_id); 144 - return IRQ_HANDLED; 145 - } 146 - 147 140 static void amiga_enable_irq(struct parport *p) 148 141 { 149 142 enable_irq(IRQ_AMIGA_CIAA_FLG); ··· 248 255 if (!p) 249 256 goto out_port; 250 257 251 - err = request_irq(IRQ_AMIGA_CIAA_FLG, amiga_interrupt, 0, p->name, p); 258 + err = request_irq(IRQ_AMIGA_CIAA_FLG, parport_irq_handler, 0, p->name, p); 252 259 if (err) 253 260 goto out_irq; 254 261
+1 -8
drivers/parport/parport_atari.c
··· 103 103 { 104 104 } 105 105 106 - static irqreturn_t 107 - parport_atari_interrupt(int irq, void *dev_id) 108 - { 109 - parport_generic_irq(irq, (struct parport *) dev_id); 110 - return IRQ_HANDLED; 111 - } 112 - 113 106 static void 114 107 parport_atari_enable_irq(struct parport *p) 115 108 { ··· 201 208 &parport_atari_ops); 202 209 if (!p) 203 210 return -ENODEV; 204 - if (request_irq(IRQ_MFP_BUSY, parport_atari_interrupt, 211 + if (request_irq(IRQ_MFP_BUSY, parport_irq_handler, 205 212 IRQ_TYPE_SLOW, p->name, p)) { 206 213 parport_put_port (p); 207 214 return -ENODEV;
+1 -9
drivers/parport/parport_ax88796.c
··· 232 232 writeb(s->u.ax88796.cpr, dd->spp_cpr); 233 233 } 234 234 235 - static irqreturn_t 236 - parport_ax88796_interrupt(int irq, void *dev_id) 237 - { 238 - parport_generic_irq(irq, dev_id); 239 - return IRQ_HANDLED; 240 - } 241 - 242 - 243 235 static struct parport_operations parport_ax88796_ops = { 244 236 .write_data = parport_ax88796_write_data, 245 237 .read_data = parport_ax88796_read_data, ··· 336 344 337 345 if (irq >= 0) { 338 346 /* request irq */ 339 - ret = request_irq(irq, parport_ax88796_interrupt, 347 + ret = request_irq(irq, parport_irq_handler, 340 348 IRQF_TRIGGER_FALLING, pdev->name, pp); 341 349 342 350 if (ret < 0)
+1 -7
drivers/parport/parport_gsc.c
··· 80 80 * of these are in parport_gsc.h. 81 81 */ 82 82 83 - static irqreturn_t parport_gsc_interrupt(int irq, void *dev_id) 84 - { 85 - parport_generic_irq(irq, (struct parport *) dev_id); 86 - return IRQ_HANDLED; 87 - } 88 - 89 83 void parport_gsc_init_state(struct pardevice *dev, struct parport_state *s) 90 84 { 91 85 s->u.pc.ctr = 0xc | (dev->irq_func ? 0x10 : 0x0); ··· 318 324 printk("]\n"); 319 325 320 326 if (p->irq != PARPORT_IRQ_NONE) { 321 - if (request_irq (p->irq, parport_gsc_interrupt, 327 + if (request_irq (p->irq, parport_irq_handler, 322 328 0, p->name, p)) { 323 329 printk (KERN_WARNING "%s: irq %d in use, " 324 330 "resorting to polled operation\n",
+4 -2
drivers/parport/parport_ip32.c
··· 778 778 struct parport * const p = dev_id; 779 779 struct parport_ip32_private * const priv = p->physport->private_data; 780 780 enum parport_ip32_irq_mode irq_mode = priv->irq_mode; 781 + 781 782 switch (irq_mode) { 782 783 case PARPORT_IP32_IRQ_FWD: 783 - parport_generic_irq(irq, p); 784 - break; 784 + return parport_irq_handler(irq, dev_id); 785 + 785 786 case PARPORT_IP32_IRQ_HERE: 786 787 parport_ip32_wakeup(p); 787 788 break; 788 789 } 790 + 789 791 return IRQ_HANDLED; 790 792 } 791 793
+1 -8
drivers/parport/parport_pc.c
··· 272 272 * of these are in parport_pc.h. 273 273 */ 274 274 275 - static irqreturn_t parport_pc_interrupt(int irq, void *dev_id) 276 - { 277 - parport_generic_irq(irq, (struct parport *) dev_id); 278 - /* FIXME! Was it really ours? */ 279 - return IRQ_HANDLED; 280 - } 281 - 282 275 static void parport_pc_init_state(struct pardevice *dev, struct parport_state *s) 283 276 { 284 277 s->u.pc.ctr = 0xc; ··· 2294 2301 EPP_res = NULL; 2295 2302 } 2296 2303 if (p->irq != PARPORT_IRQ_NONE) { 2297 - if (request_irq (p->irq, parport_pc_interrupt, 2304 + if (request_irq (p->irq, parport_irq_handler, 2298 2305 0, p->name, p)) { 2299 2306 printk (KERN_WARNING "%s: irq %d in use, " 2300 2307 "resorting to polled operation\n",
+1 -7
drivers/parport/parport_sunbpp.c
··· 46 46 #define dprintk(x) 47 47 #endif 48 48 49 - static irqreturn_t parport_sunbpp_interrupt(int irq, void *dev_id) 50 - { 51 - parport_generic_irq(irq, (struct parport *) dev_id); 52 - return IRQ_HANDLED; 53 - } 54 - 55 49 static void parport_sunbpp_disable_irq(struct parport *p) 56 50 { 57 51 struct bpp_regs __iomem *regs = (struct bpp_regs __iomem *)p->base; ··· 318 324 p->size = size; 319 325 p->dev = &sdev->ofdev.dev; 320 326 321 - if ((err = request_irq(p->irq, parport_sunbpp_interrupt, 327 + if ((err = request_irq(p->irq, parport_irq_handler, 322 328 IRQF_SHARED, p->name, p)) != 0) { 323 329 goto out_put_port; 324 330 }
+10
drivers/parport/share.c
··· 995 995 } 996 996 } 997 997 998 + irqreturn_t parport_irq_handler(int irq, void *dev_id) 999 + { 1000 + struct parport *port = dev_id; 1001 + 1002 + parport_generic_irq(irq, port); 1003 + 1004 + return IRQ_HANDLED; 1005 + } 1006 + 998 1007 /* Exported symbols for modules. */ 999 1008 1000 1009 EXPORT_SYMBOL(parport_claim); ··· 1020 1011 EXPORT_SYMBOL(parport_put_port); 1021 1012 EXPORT_SYMBOL(parport_find_number); 1022 1013 EXPORT_SYMBOL(parport_find_base); 1014 + EXPORT_SYMBOL(parport_irq_handler); 1023 1015 1024 1016 MODULE_LICENSE("GPL");
+5 -1
include/linux/parport.h
··· 100 100 #include <linux/proc_fs.h> 101 101 #include <linux/spinlock.h> 102 102 #include <linux/wait.h> 103 + #include <linux/irqreturn.h> 103 104 #include <asm/system.h> 104 105 #include <asm/ptrace.h> 105 106 #include <asm/semaphore.h> ··· 367 366 extern struct parport *parport_find_number (int); 368 367 extern struct parport *parport_find_base (unsigned long); 369 368 369 + /* generic irq handler, if it suits your needs */ 370 + extern irqreturn_t parport_irq_handler(int irq, void *dev_id); 371 + 370 372 /* Reference counting for ports. */ 371 373 extern struct parport *parport_get_port (struct parport *); 372 374 extern void parport_put_port (struct parport *); ··· 518 514 extern int parport_daisy_select (struct parport *port, int daisy, int mode); 519 515 520 516 /* Lowlevel drivers _can_ call this support function to handle irqs. */ 521 - static __inline__ void parport_generic_irq(int irq, struct parport *port) 517 + static inline void parport_generic_irq(int irq, struct parport *port) 522 518 { 523 519 parport_ieee1284_interrupt (irq, port); 524 520 read_lock(&port->cad_lock);