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