master/module.c
changeset 497 04552130dd54
parent 495 88c597598bbc
child 525 8b20781bd1e0
equal deleted inserted replaced
496:b2aee2241952 497:04552130dd54
   309     if (ec_device_init(master->device, master, net_dev, isr, module)) {
   309     if (ec_device_init(master->device, master, net_dev, isr, module)) {
   310         EC_ERR("Failed to init device!\n");
   310         EC_ERR("Failed to init device!\n");
   311         goto out_free;
   311         goto out_free;
   312     }
   312     }
   313 
   313 
   314     if (ec_device_open(master->device)) {
       
   315         EC_ERR("Failed to open device!\n");
       
   316         goto out_clear;
       
   317     }
       
   318 
       
   319     up(&master->device_sem);
   314     up(&master->device_sem);
   320 
       
   321     ec_master_enter_idle_mode(master);
       
   322 
       
   323     return master->device;
   315     return master->device;
   324 
   316 
   325  out_clear:
       
   326     ec_device_clear(master->device);
       
   327  out_free:
   317  out_free:
   328     kfree(master->device);
   318     kfree(master->device);
   329     master->device = NULL;
   319     master->device = NULL;
   330  out_up:
   320  out_up:
   331     up(&master->device_sem);
   321     up(&master->device_sem);
   350 {
   340 {
   351     ec_master_t *master;
   341     ec_master_t *master;
   352 
   342 
   353     if (!(master = ec_find_master(master_index))) return;
   343     if (!(master = ec_find_master(master_index))) return;
   354 
   344 
   355     ec_master_leave_idle_mode(master);
       
   356 
       
   357     if (ec_device_close(master->device))
       
   358         EC_WARN("Failed to close device!\n");
       
   359 
       
   360     down(&master->device_sem);
   345     down(&master->device_sem);
   361 
   346 
   362     if (!master->device || master->device != device) {
   347     if (!master->device || master->device != device) {
   363         up(&master->device_sem);
   348         up(&master->device_sem);
   364         EC_WARN("Unable to unregister device!\n");
   349         EC_WARN("Unable to unregister device!\n");
   368     ec_device_clear(master->device);
   353     ec_device_clear(master->device);
   369     kfree(master->device);
   354     kfree(master->device);
   370     master->device = NULL;
   355     master->device = NULL;
   371 
   356 
   372     up(&master->device_sem);
   357     up(&master->device_sem);
       
   358 }
       
   359 
       
   360 /*****************************************************************************/
       
   361 
       
   362 /**
       
   363    Opens the network device and makes the master enter IDLE mode.
       
   364    \return 0 on success, else < 0
       
   365    \ingroup DeviceInterface
       
   366 */
       
   367 
       
   368 int ecdev_open(ec_device_t *device /**< EtherCAT device */)
       
   369 {
       
   370     if (ec_device_open(device)) {
       
   371         EC_ERR("Failed to open device!\n");
       
   372         return -1;
       
   373     }
       
   374 
       
   375     ec_master_enter_idle_mode(device->master);
       
   376     return 0;
       
   377 }
       
   378 
       
   379 /*****************************************************************************/
       
   380 
       
   381 /**
       
   382    Makes the master leave IDLE mode and closes the network device.
       
   383    \return 0 on success, else < 0
       
   384    \ingroup DeviceInterface
       
   385 */
       
   386 
       
   387 void ecdev_close(ec_device_t *device /**< EtherCAT device */)
       
   388 {
       
   389     ec_master_leave_idle_mode(device->master);
       
   390 
       
   391     if (ec_device_close(device))
       
   392         EC_WARN("Failed to close device!\n");
   373 }
   393 }
   374 
   394 
   375 /******************************************************************************
   395 /******************************************************************************
   376  *  Realtime interface
   396  *  Realtime interface
   377  *****************************************************************************/
   397  *****************************************************************************/
   463 module_init(ec_init_module);
   483 module_init(ec_init_module);
   464 module_exit(ec_cleanup_module);
   484 module_exit(ec_cleanup_module);
   465 
   485 
   466 EXPORT_SYMBOL(ecdev_register);
   486 EXPORT_SYMBOL(ecdev_register);
   467 EXPORT_SYMBOL(ecdev_unregister);
   487 EXPORT_SYMBOL(ecdev_unregister);
       
   488 EXPORT_SYMBOL(ecdev_open);
       
   489 EXPORT_SYMBOL(ecdev_close);
   468 EXPORT_SYMBOL(ecrt_request_master);
   490 EXPORT_SYMBOL(ecrt_request_master);
   469 EXPORT_SYMBOL(ecrt_release_master);
   491 EXPORT_SYMBOL(ecrt_release_master);
   470 
   492 
   471 /** \endcond */
   493 /** \endcond */
   472 
   494