Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Staging: ipack: move the responsibility to clear interrupts to the IPack devices.

Now the IPack device acknowledges its own IRQ.

Signed-off-by: Jens Taprogge <jens.taprogge@taprogge.org>
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Jens Taprogge and committed by
Greg Kroah-Hartman
ea991147 e4af9497

+20 -6
-4
drivers/staging/ipack/bridges/tpci200.c
··· 126 126 return -ENODEV; 127 127 ret = slot_irq->handler(slot_irq->arg); 128 128 129 - /* Clear the IPack device interrupt */ 130 - readw(slot_irq->holder->io_space.address + 0xC0); 131 - readw(slot_irq->holder->io_space.address + 0xC2); 132 - 133 129 return ret; 134 130 } 135 131
+17 -2
drivers/staging/ipack/devices/ipoctal.c
··· 252 252 for (i = 0; i < NR_CHANNELS; i++) 253 253 ipoctal_irq_channel(&ipoctal->channel[i]); 254 254 255 + /* Clear the IPack device interrupt */ 256 + readw(ipoctal->dev->int_space.address + ACK_INT_REQ0); 257 + readw(ipoctal->dev->int_space.address + ACK_INT_REQ1); 258 + 255 259 return IRQ_HANDLED; 256 260 } 257 261 ··· 268 264 manufacturerID = ioread8(dev->id_space.address + IPACK_IDPROM_OFFSET_MANUFACTURER_ID); 269 265 if (manufacturerID != IPACK1_VENDOR_ID_SBS) 270 266 return -ENODEV; 271 - 272 267 board_id = ioread8(dev->id_space.address + IPACK_IDPROM_OFFSET_MODEL); 273 268 switch (board_id) { 274 269 case IPACK1_DEVICE_ID_SBS_OCTAL_232: ··· 325 322 goto out_unregister_id_space; 326 323 } 327 324 325 + res = ipoctal->dev->bus->ops->map_space(ipoctal->dev, 0, 326 + IPACK_INT_SPACE); 327 + if (res) { 328 + dev_err(&ipoctal->dev->dev, 329 + "Unable to map slot [%d:%d] INT space!\n", 330 + bus_nr, slot); 331 + goto out_unregister_io_space; 332 + } 333 + 328 334 res = ipoctal->dev->bus->ops->map_space(ipoctal->dev, 329 335 0x8000, IPACK_MEM_SPACE); 330 336 if (res) { 331 337 dev_err(&ipoctal->dev->dev, 332 338 "Unable to map slot [%d:%d] MEM space!\n", 333 339 bus_nr, slot); 334 - goto out_unregister_io_space; 340 + goto out_unregister_int_space; 335 341 } 336 342 337 343 /* Save the virtual address to access the registers easily */ ··· 462 450 463 451 out_unregister_slot_unmap: 464 452 ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_ID_SPACE); 453 + out_unregister_int_space: 454 + ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_INT_SPACE); 465 455 out_unregister_io_space: 466 456 ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_IO_SPACE); 467 457 out_unregister_id_space: ··· 749 735 tty_unregister_driver(ipoctal->tty_drv); 750 736 put_tty_driver(ipoctal->tty_drv); 751 737 ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_MEM_SPACE); 738 + ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_INT_SPACE); 752 739 ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_IO_SPACE); 753 740 ipoctal->dev->bus->ops->unmap_space(ipoctal->dev, IPACK_ID_SPACE); 754 741 kfree(ipoctal);
+3
drivers/staging/ipack/devices/scc2698.h
··· 221 221 #define ISR_DELTA_BREAK_B (0x1 << 6) 222 222 #define ISR_INPUT_PORT_CHANGE (0x1 << 7) 223 223 224 + #define ACK_INT_REQ0 0 225 + #define ACK_INT_REQ1 2 226 + 224 227 #endif /* SCC2698_H_ */