X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/95c031e101c74ae6472a7e538f3128f67a490082..c1f8d2586d9c8219ed3a92004b207d0ee81689f4:/lincan/src/setup.c diff --git a/lincan/src/setup.c b/lincan/src/setup.c index c77d03c..167ec2b 100644 --- a/lincan/src/setup.c +++ b/lincan/src/setup.c @@ -568,6 +568,16 @@ int init_hwspecops(struct candevice_t *candev, int *irqnum_p) #ifndef CAN_WITH_RTL +/** + * can_default_irq_dispatch - the first level interrupt dispatch handler + * @irq: interrupt vector number, this value is system specific + * @dev_id: driver private pointer registered at time of request_irq() call. + * The CAN driver uses this pointer to store relationship of interrupt + * to chip state structure - @struct canchip_t + * @regs: system dependent value pointing to registers stored in exception frame + * + * File: src/setup.c + */ can_irqreturn_t can_default_irq_dispatch(int irq, void *dev_id, struct pt_regs *regs) { int retval; @@ -589,6 +599,8 @@ int can_chip_setup_irq(struct canchip_t *chip) return -1; if(!chip->chipspecops->irq_handler) return 0; + if(chip->flags & CHIP_IRQ_CUSTOM) + return 1; if ((chip->flags & CHIP_IRQ_VME) == 0) { if (request_irq(chip->chip_irq,can_default_irq_dispatch,SA_SHIRQ,DEVICE_NAME,chip)) @@ -620,6 +632,9 @@ int can_chip_setup_irq(struct canchip_t *chip) void can_chip_free_irq(struct canchip_t *chip) { if((chip->flags & CHIP_IRQ_SETUP) && (chip->chip_irq>=0)) { + if(chip->flags & CHIP_IRQ_CUSTOM) + return; + if ((chip->flags & CHIP_IRQ_VME) == 0) free_irq(chip->chip_irq, chip); else {