]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/setup.c
Included support for PiMX1 board with SJA1000 on MX_DIS1 expansion board.
[lincan.git] / lincan / src / setup.c
index c77d03cdc7850d61717f5c2587a7e577f5b1be93..167ec2bfbd142894b9c488d00148eaf2c69b638b 100644 (file)
@@ -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 {