diff -r ed834aa98f89 -r 6e9de6fbf74c mini/ec_mini.c --- a/mini/ec_mini.c Fri Dec 16 15:23:56 2005 +0000 +++ b/mini/ec_mini.c Fri Dec 16 15:25:13 2005 +0000 @@ -228,47 +228,51 @@ int __init init_module() { - printk(KERN_INFO "=== Starting Minimal EtherCAT environment... ===\n"); - - if ((ecat_master = EtherCAT_request(0)) == NULL) - { - printk(KERN_ERR "EtherCAT master 0 not available!\n"); - return -1; - } - - printk("Checking EtherCAT slaves.\n"); - - if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) - { - printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); - return -1; - } - - printk("Activating all EtherCAT slaves.\n"); - - if (EtherCAT_activate_all_slaves(ecat_master) != 0) - { - printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); - return -1; - } - -#ifdef ECAT_CYCLIC_DATA - printk("Starting cyclic sample thread.\n"); - - init_timer(&timer); - - timer.function = run; - timer.data = 0; - timer.expires = jiffies+10; // Das erste Mal sofort feuern - last_start_jiffies = timer.expires; - add_timer(&timer); - - printk("Initialised sample thread.\n"); -#endif - - printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n"); - - return 0; + printk(KERN_INFO "=== Starting Minimal EtherCAT environment... ===\n"); + + if ((ecat_master = EtherCAT_request(0)) == NULL) { + printk(KERN_ERR "EtherCAT master 0 not available!\n"); + goto out_return; + } + + printk("Checking EtherCAT slaves.\n"); + + if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) { + printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); + goto out_release_master; + } + + printk("Activating all EtherCAT slaves.\n"); + + if (EtherCAT_activate_all_slaves(ecat_master) != 0) + { + printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); + goto out_release_master; + } + +#ifdef ECAT_CYCLIC_DATA + printk("Starting cyclic sample thread.\n"); + + init_timer(&timer); + + timer.function = run; + timer.data = 0; + timer.expires = jiffies+10; // Das erste Mal sofort feuern + last_start_jiffies = timer.expires; + add_timer(&timer); + + printk("Initialised sample thread.\n"); +#endif + + printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n"); + + return 0; + + out_release_master: + EtherCAT_release(ecat_master); + + out_return: + return -1; } /****************************************************************************** @@ -284,14 +288,14 @@ if (ecat_master) { #ifdef ECAT_CYCLIC_DATA - del_timer_sync(&timer); - EtherCAT_clear_process_data(ecat_master); + del_timer_sync(&timer); + EtherCAT_clear_process_data(ecat_master); #endif // ECAT_CYCLIC_DATA - printk(KERN_INFO "Deactivating slaves.\n"); - EtherCAT_deactivate_all_slaves(ecat_master); - - EtherCAT_release(ecat_master); + printk(KERN_INFO "Deactivating slaves.\n"); + EtherCAT_deactivate_all_slaves(ecat_master); + + EtherCAT_release(ecat_master); } printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n");