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++) {
DEBUGMSG("Cleared all message objects on chip\n");
- for (i=1; i<=15; i++) {
+ for (i=0; i<chip->max_objects; i++) {
obj=chip->msgobj[i];
canobj_write_reg(chip,obj,(INTPD_RES|RXIE_RES|TXIE_RES|MVAL_RES),iMSGCTL0);
canobj_write_reg(chip,obj,(NEWD_RES|MLST_RES|TXRQ_RES|RMPD_RES), iMSGCTL1);
return 0;
}
+int i82527_attach_to_chip(struct canchip_t *chip)
+{
+ return 0;
+}
+
+int i82527_release_chip(struct canchip_t *chip)
+{
+ i82527_stop_chip(chip);
+ can_write_reg(chip, (iCTL_CCE|iCTL_INI), iCTL);
+
+ return 0;
+}
+
static inline
void i82527_irq_write_handler(struct canchip_t *chip, struct msgobj_t *obj)
{
}
}
+ mb();
+
can_msgobj_clear_fl(obj,TX_LOCK);
if(can_msgobj_test_fl(obj,TX_REQUEST))
continue;
unsigned char msgcfg;
unsigned irq_register;
+ unsigned status_register;
unsigned object;
struct msgobj_t *obj;
int loop_cnt=CHIP_MAX_IRQLOOP;
DEBUGMSG("i82527: iIRQ 0x%02x\n",irq_register);
if (irq_register == 0x01) {
- DEBUGMSG("Status register: 0x%x\n",can_read_reg(chip, iSTAT));
+ status_register=can_read_reg(chip, iSTAT);
+ CANMSG("Status register: 0x%x\n",status_register);
continue;
/*return CANCHIP_IRQ_NONE;*/
}
if (irq_register == 0x02)
object = 14;
- else if(irq_register < 14)
+ else if(irq_register <= 13+3)
object = irq_register-3;
else
return CANCHIP_IRQ_NONE;
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;
}
chipspecops->enable_configuration = i82527_enable_configuration;
chipspecops->disable_configuration = i82527_disable_configuration;
chipspecops->set_btregs = i82527_set_btregs;
+ chipspecops->attach_to_chip = i82527_attach_to_chip;
+ chipspecops->release_chip = i82527_release_chip;
chipspecops->start_chip = i82527_start_chip;
chipspecops->stop_chip = i82527_stop_chip;
chipspecops->irq_handler = i82527_irq_handler;
+ chipspecops->irq_accept = NULL;
return 0;
}