/* (irq_register & sjaIR_TI) */
/* old variant using SJAIR, collides with intended use with irq_accept */
- if ((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) {
+ if (((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING))||
+ (can_msgobj_test_fl(obj,TX_REQUEST))) {
DEBUGMSG("sja1000_irq_handler: TI or TX_PENDING and TBS\n");
obj->ret = 0;
can_msgobj_set_fl(obj,TX_REQUEST);
}
irq_register=can_read_reg(chip,SJAIR);
-
+
status=can_read_reg(chip,SJASR);
- } while((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_TI|sjaIR_RI)) ||
- ((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) ||
+ if(((status & sjaSR_TBS) && can_msgobj_test_fl(obj,TX_PENDING)) ||
+ (irq_register & sjaIR_TI))
+ can_msgobj_set_fl(obj,TX_REQUEST);
+
+ } while((irq_register & (sjaIR_BEI|sjaIR_EPI|sjaIR_DOI|sjaIR_EI|sjaIR_RI)) ||
+ (can_msgobj_test_fl(obj,TX_REQUEST) && !can_msgobj_test_fl(obj,TX_LOCK)) ||
(status & sjaSR_RBS));
return CANCHIP_IRQ_HANDLED;