equal
deleted
inserted
replaced
81 .release = ec_slave_clear, |
81 .release = ec_slave_clear, |
82 .sysfs_ops = &sysfs_ops, |
82 .sysfs_ops = &sysfs_ops, |
83 .default_attrs = def_attrs |
83 .default_attrs = def_attrs |
84 }; |
84 }; |
85 |
85 |
|
86 static struct kobj_type ktype_ec_slave_sdos = {}; |
|
87 |
86 /** \endcond */ |
88 /** \endcond */ |
87 |
89 |
88 /*****************************************************************************/ |
90 /*****************************************************************************/ |
89 |
91 |
90 /** |
92 /** |
108 kobject_init(&slave->kobj); |
110 kobject_init(&slave->kobj); |
109 slave->kobj.ktype = &ktype_ec_slave; |
111 slave->kobj.ktype = &ktype_ec_slave; |
110 slave->kobj.parent = &master->kobj; |
112 slave->kobj.parent = &master->kobj; |
111 if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) { |
113 if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) { |
112 EC_ERR("Failed to set kobject name.\n"); |
114 EC_ERR("Failed to set kobject name.\n"); |
|
115 kobject_put(&slave->kobj); |
|
116 return -1; |
|
117 } |
|
118 |
|
119 // init SDO kobject and add it to the hierarchy |
|
120 memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject)); |
|
121 kobject_init(&slave->sdo_kobj); |
|
122 slave->sdo_kobj.ktype = &ktype_ec_slave_sdos; |
|
123 slave->sdo_kobj.parent = &slave->kobj; |
|
124 if (kobject_set_name(&slave->sdo_kobj, "sdos")) { |
|
125 EC_ERR("Failed to set kobject name.\n"); |
|
126 kobject_put(&slave->sdo_kobj); |
113 kobject_put(&slave->kobj); |
127 kobject_put(&slave->kobj); |
114 return -1; |
128 return -1; |
115 } |
129 } |
116 |
130 |
117 slave->master = master; |
131 slave->master = master; |
156 INIT_LIST_HEAD(&slave->sii_syncs); |
170 INIT_LIST_HEAD(&slave->sii_syncs); |
157 INIT_LIST_HEAD(&slave->sii_pdos); |
171 INIT_LIST_HEAD(&slave->sii_pdos); |
158 INIT_LIST_HEAD(&slave->sdo_dictionary); |
172 INIT_LIST_HEAD(&slave->sdo_dictionary); |
159 INIT_LIST_HEAD(&slave->sdo_confs); |
173 INIT_LIST_HEAD(&slave->sdo_confs); |
160 |
174 |
|
175 slave->sdo_dictionary_fetched = 0; |
|
176 slave->jiffies_preop = 0; |
|
177 |
161 for (i = 0; i < 4; i++) { |
178 for (i = 0; i < 4; i++) { |
162 slave->dl_link[i] = 0; |
179 slave->dl_link[i] = 0; |
163 slave->dl_loop[i] = 0; |
180 slave->dl_loop[i] = 0; |
164 slave->dl_signal[i] = 0; |
181 slave->dl_signal[i] = 0; |
165 slave->sii_physical_layer[i] = 0xFF; |
182 slave->sii_physical_layer[i] = 0xFF; |
222 list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) { |
239 list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) { |
223 list_del(&sdo->list); |
240 list_del(&sdo->list); |
224 kobject_del(&sdo->kobj); |
241 kobject_del(&sdo->kobj); |
225 kobject_put(&sdo->kobj); |
242 kobject_put(&sdo->kobj); |
226 } |
243 } |
|
244 |
|
245 // free SDO kobject |
|
246 if (slave->sdo_dictionary_fetched) kobject_del(&slave->sdo_kobj); |
|
247 kobject_put(&slave->sdo_kobj); |
227 |
248 |
228 // free all SDO configurations |
249 // free all SDO configurations |
229 list_for_each_entry_safe(sdodata, next_sdodata, &slave->sdo_confs, list) { |
250 list_for_each_entry_safe(sdodata, next_sdodata, &slave->sdo_confs, list) { |
230 list_del(&sdodata->list); |
251 list_del(&sdodata->list); |
231 kfree(sdodata->data); |
252 kfree(sdodata->data); |