X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/41a1b398bf97d389f4542666b8498f4c45121060..c3adf4f9af7ee68df8bb65fafa4dbcbdcc4895ba:/lincan/src/main.c diff --git a/lincan/src/main.c b/lincan/src/main.c index c364895..8018b58 100644 --- a/lincan/src/main.c +++ b/lincan/src/main.c @@ -396,7 +396,7 @@ int init_module(void) res = usbcan_init(); if (res){ CANMSG("usb_register for usbcan failed. Error number %d.\n", res); - return -ENODEV; + goto memory_error; } #endif @@ -441,8 +441,7 @@ int init_module(void) - -struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void (*chipdataregfnc)(struct canchip_t *ch,void *data)){ +struct candevice_t* register_hotplug_dev(const char *hwname,int (*chipdataregfnc)(struct canchip_t *ch,void *data),void *devdata){ int i=0, j, board=0; struct candevice_t *candev; struct canchip_t *chip; @@ -456,11 +455,11 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( } brp = boardtype_find(hwname); if(!brp) { - CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hw[board]); + CANMSG("Sorry, hardware \"%s\" is currently not supported.\n",hwname); return NULL; } if (board==MAX_HW_CARDS){ - CANMSG("Device \"%s\" could not be registered due to internal limits.\n",hw[board]); + CANMSG("Device \"%s\" could not be registered due to internal limits.\n",hwname); return NULL; } hw[board]=brp->boardtype; @@ -488,7 +487,10 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( if((chip=candev->chip[j])==NULL) continue; - chipdataregfnc(chip,devdata); + if (chipdataregfnc && devdata){ + if (chipdataregfnc(chip,devdata)) + goto interrupt_error; + } if(chip->chipspecops->attach_to_chip(chip)<0) { CANMSG("Initial attach to the chip HW failed\n"); @@ -584,8 +586,8 @@ struct candevice_t* register_hotplug_dev(const char *hwname,void *devdata,void ( #endif /*CAN_WITH_RTL*/ // register_error: - if ( can_del_mem_list() ) - CANMSG("Error deallocating memory\n"); +// if ( can_del_mem_list() ) +// CANMSG("Error deallocating memory\n"); return NULL; } @@ -597,6 +599,7 @@ void cleanup_hotplug_dev(struct candevice_t *dev) if (!dev) return; + DEBUGMSG("Cleaning up hotplug device.\n"); #ifdef CONFIG_PROC_FS if (can_delete_procentry(dev)) @@ -650,9 +653,11 @@ void cleanup_module(void) #endif #if defined(CONFIG_OC_LINCAN_CARD_usbcan) + DEBUGMSG("Unregistering usbcan.\n"); usbcan_exit(); #endif + DEBUGMSG("Continuing with coldplug cleanup.\n"); #ifdef CONFIG_PROC_FS if (can_delete_procdir()) CANMSG("Error unregistering /proc/can entry.\n"); @@ -692,6 +697,8 @@ void cleanup_module(void) canqueue_rtl_done(); #endif /*CAN_WITH_RTL*/ + DEBUGMSG("Can hardware cleanup done, freeing memory.\n"); + if ( can_del_mem_list() ) CANMSG("Error deallocating memory\n");