equal
deleted
inserted
replaced
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); |