This workaround compiles only for 2.6.x kernels now and correct
fix compatible with 2.4 requires driver wide changes.
That is why CPC-PCI is not enabled by default.
SUPPORTED_CARDS = pip pccan smartcan nsi cc_can104 \
pc_i03 pcm3680 aim104 m437 pcccan ssv \
bfadcan pikronisa kv_pcican msmcan virtual template \
SUPPORTED_CARDS = pip pccan smartcan nsi cc_can104 \
pc_i03 pcm3680 aim104 m437 pcccan ssv \
bfadcan pikronisa kv_pcican msmcan virtual template \
- unican unican_cl2 ems_cpcpci
+ unican unican_cl2
+# ems_cpcpci # compiles only for 2.6 kernels now
# hms30c7202_can c_can c_can_irq
# hms30c7202_can c_can c_can_irq
struct candevice_t *candev=chip->hostdevice;
int i;
unsigned long icr;
struct candevice_t *candev=chip->hostdevice;
int i;
unsigned long icr;
icr=readl(candev->dev_base_addr + PITA2_ICR);
icr=readl(candev->dev_base_addr + PITA2_ICR);
- if(!(icr & PITA2_ICR_INT0)) return IRQ_NONE;
+ if(!(icr & PITA2_ICR_INT0)) return CAN_IRQ_NONE;
/* correct way to handle interrupts from all chips connected to the one PITA-2 */
do {
writel(PITA2_ICR_INT0_En | PITA2_ICR_INT0, candev->dev_base_addr + PITA2_ICR);
/* correct way to handle interrupts from all chips connected to the one PITA-2 */
do {
writel(PITA2_ICR_INT0_En | PITA2_ICR_INT0, candev->dev_base_addr + PITA2_ICR);
for(i=0;i<candev->nr_all_chips;i++){
chip=candev->chip[i];
if(!chip || !(chip->flags&CHIP_CONFIGURED))
continue;
for(i=0;i<candev->nr_all_chips;i++){
chip=candev->chip[i];
if(!chip || !(chip->flags&CHIP_CONFIGURED))
continue;
- sja1000p_irq_handler(irq, chip, regs);
+ if(sja1000p_irq_handler(irq, chip, regs))
+ test_irq_again=1;
}
icr=readl(candev->dev_base_addr + PITA2_ICR);
}
icr=readl(candev->dev_base_addr + PITA2_ICR);
- } while(icr & PITA2_ICR_INT0);
- return IRQ_HANDLED;
+ } while((icr & PITA2_ICR_INT0)||test_irq_again);
+ return CAN_IRQ_HANDLED;
}
int ems_cpcpci_reset(struct candevice_t *candev)
}
int ems_cpcpci_reset(struct candevice_t *candev)