master/master.c
changeset 1013 52256b75f975
parent 1010 6672b86e7b10
child 1015 24efac66a647
equal deleted inserted replaced
1012:89f87a901ce5 1013:52256b75f975
    74 
    74 
    75 int ec_master_init(ec_master_t *master, /**< EtherCAT master */
    75 int ec_master_init(ec_master_t *master, /**< EtherCAT master */
    76         unsigned int index, /**< master index */
    76         unsigned int index, /**< master index */
    77         const uint8_t *main_mac, /**< MAC address of main device */
    77         const uint8_t *main_mac, /**< MAC address of main device */
    78         const uint8_t *backup_mac, /**< MAC address of backup device */
    78         const uint8_t *backup_mac, /**< MAC address of backup device */
    79         dev_t device_number /**< Character device number. */
    79         dev_t device_number, /**< Character device number. */
       
    80         struct class *class /**< Device class. */
    80         )
    81         )
    81 {
    82 {
    82     unsigned int i;
    83     unsigned int i;
    83 
    84 
    84     master->index = index;
    85     master->index = index;
   168     ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram);
   169     ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram);
   169 
   170 
   170     // init character device
   171     // init character device
   171     if (ec_cdev_init(&master->cdev, master, device_number))
   172     if (ec_cdev_init(&master->cdev, master, device_number))
   172         goto out_clear_fsm;
   173         goto out_clear_fsm;
       
   174     
       
   175     master->class_device = class_device_create(class,
       
   176             MKDEV(MAJOR(device_number), master->index),
       
   177             NULL, "EtherCAT%u", master->index);
       
   178     if (IS_ERR(master->class_device)) {
       
   179         EC_ERR("Failed to create class device!\n");
       
   180         goto out_clear_cdev;
       
   181     }
   173 
   182 
   174     return 0;
   183     return 0;
   175 
   184 
       
   185 out_clear_cdev:
       
   186     ec_cdev_clear(&master->cdev);
   176 out_clear_fsm:
   187 out_clear_fsm:
   177     ec_fsm_master_clear(&master->fsm);
   188     ec_fsm_master_clear(&master->fsm);
   178     ec_datagram_clear(&master->fsm_datagram);
   189     ec_datagram_clear(&master->fsm_datagram);
   179 out_clear_backup:
   190 out_clear_backup:
   180     ec_device_clear(&master->backup_device);
   191     ec_device_clear(&master->backup_device);
   190 */
   201 */
   191 void ec_master_clear(
   202 void ec_master_clear(
   192         ec_master_t *master /**< EtherCAT master */
   203         ec_master_t *master /**< EtherCAT master */
   193         )
   204         )
   194 {
   205 {
       
   206     class_device_unregister(master->class_device);
   195     ec_cdev_clear(&master->cdev);
   207     ec_cdev_clear(&master->cdev);
   196 #ifdef EC_EOE
   208 #ifdef EC_EOE
   197     ec_master_clear_eoe_handlers(master);
   209     ec_master_clear_eoe_handlers(master);
   198 #endif
   210 #endif
   199     ec_master_clear_domains(master);
   211     ec_master_clear_domains(master);