X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/7eca1ac39aa9f2a65ba0607d55f7155f5a56ad15..cd942e22c45aa0f9f9463777fe7e8635454bec81:/lincan/src/main.c diff --git a/lincan/src/main.c b/lincan/src/main.c index bb6abbf..dac9620 100644 --- a/lincan/src/main.c +++ b/lincan/src/main.c @@ -195,7 +195,7 @@ int init_module(void) res=register_chrdev(major,DEVICE_NAME, &can_fops); if (res<0) { CANMSG("Error registering driver.\n"); - return -ENODEV; + goto register_error; } #ifdef CAN_WITH_RTL @@ -229,15 +229,25 @@ int init_module(void) for(j=0; jnr_all_chips; j++) { if((chip=candev->chip[j])==NULL) continue; + + if(chip->chipspecops->attach_to_chip(chip)<0) { + CANMSG("Initial attach to the chip HW failed\n"); + goto interrupt_error; + } + + chip->flags |= CHIP_ATTACHED; + if(can_chip_setup_irq(chip)<0) { - CANMSG("IRQ setup failed\n"); + CANMSG("Error to setup chip IRQ\n"); goto interrupt_error; } } - + if (candev->flags & CANDEV_PROGRAMMABLE_IRQ) - if (candev->hwspecops->program_irq(candev)) + if (candev->hwspecops->program_irq(candev)){ + CANMSG("Error to program board interrupt\n"); goto interrupt_error; + } } #ifdef CONFIG_PROC_FS @@ -275,7 +285,6 @@ int init_module(void) #endif interrupt_error: ; - CANMSG("Error registering interrupt line.\n"); goto memory_error; reset_error: ; @@ -300,8 +309,12 @@ int init_module(void) CANMSG("Error unloading CAN driver, error: %d\n",res); else CANMSG("No CAN devices or driver setup error.\n"); - return -ENODEV; + register_error: + if ( can_del_mem_list() ) + CANMSG("Error deallocating memory\n"); + + return -ENODEV; } void cleanup_module(void)