]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/src/i82527.c
Added CAN chip specific irq_accept routine for fast interrupt acknowledge.
[lincan.git] / lincan / src / i82527.c
index fb232f380725269d2fc8e0b224d6df92ea3a420e..7834c1bc8b35ad7cb40dcf52ee8138b7b7987064 100644 (file)
@@ -131,7 +131,8 @@ int i82527_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw,
        if (i82527_enable_configuration(chip))
                return -ENODEV;
 
-       clock /=2;
+       if(chip->int_cpu_reg & iCPU_DSC)
+               clock /=2;
 
        /* tseg even = round down, odd = round up */
        for (tseg=(0+0+2)*2; tseg<=(MAX_TSEG2+MAX_TSEG1+2)*2+1; tseg++) {
@@ -635,6 +636,7 @@ int i82527_irq_handler(int irq, struct canchip_t *chip)
 
                if(!loop_cnt--) {
                        CANMSG("i82527_irq_handler IRQ %d stuck\n",irq);
+                       CANMSG("i82527_irq_register 0x%x\n",irq_register);
                        return CANCHIP_IRQ_STUCK;
                }
                
@@ -667,9 +669,7 @@ int i82527_irq_handler(int irq, struct canchip_t *chip)
                        i82527_irq_read_handler(chip, obj, object); 
                }
                
-               irq_register=i82527_seg_read_reg(chip, iIRQ);
-
-       } while(irq_register != 0);
+       } while((irq_register=i82527_seg_read_reg(chip, iIRQ)) != 0);
 
        return CANCHIP_IRQ_HANDLED;
 }
@@ -755,6 +755,7 @@ int i82527_register(struct chipspecops_t *chipspecops)
        chipspecops->start_chip = i82527_start_chip;
        chipspecops->stop_chip = i82527_stop_chip;
        chipspecops->irq_handler = i82527_irq_handler;
+       chipspecops->irq_accept = NULL;
        return 0;
 }