106 unsigned int i; |
106 unsigned int i; |
107 |
107 |
108 slave->ring_position = ring_position; |
108 slave->ring_position = ring_position; |
109 slave->station_address = station_address; |
109 slave->station_address = station_address; |
110 |
110 |
111 // init kobject and add it to the hierarchy |
|
112 memset(&slave->kobj, 0x00, sizeof(struct kobject)); |
|
113 kobject_init(&slave->kobj); |
|
114 slave->kobj.ktype = &ktype_ec_slave; |
|
115 slave->kobj.parent = &master->kobj; |
|
116 if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) { |
|
117 EC_ERR("Failed to set kobject name.\n"); |
|
118 kobject_put(&slave->kobj); |
|
119 return -1; |
|
120 } |
|
121 |
|
122 // init SDO kobject and add it to the hierarchy |
|
123 memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject)); |
|
124 kobject_init(&slave->sdo_kobj); |
|
125 slave->sdo_kobj.ktype = &ktype_ec_slave_sdos; |
|
126 slave->sdo_kobj.parent = &slave->kobj; |
|
127 if (kobject_set_name(&slave->sdo_kobj, "sdos")) { |
|
128 EC_ERR("Failed to set kobject name.\n"); |
|
129 kobject_put(&slave->sdo_kobj); |
|
130 kobject_put(&slave->kobj); |
|
131 return -1; |
|
132 } |
|
133 |
|
134 slave->master = master; |
111 slave->master = master; |
135 |
112 |
136 slave->requested_state = EC_SLAVE_STATE_UNKNOWN; |
113 slave->requested_state = EC_SLAVE_STATE_UNKNOWN; |
137 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
114 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
138 slave->configured = 0; |
115 slave->configured = 0; |
183 slave->dl_loop[i] = 0; |
160 slave->dl_loop[i] = 0; |
184 slave->dl_signal[i] = 0; |
161 slave->dl_signal[i] = 0; |
185 slave->sii_physical_layer[i] = 0xFF; |
162 slave->sii_physical_layer[i] = 0xFF; |
186 } |
163 } |
187 |
164 |
|
165 // init kobject and add it to the hierarchy |
|
166 memset(&slave->kobj, 0x00, sizeof(struct kobject)); |
|
167 kobject_init(&slave->kobj); |
|
168 slave->kobj.ktype = &ktype_ec_slave; |
|
169 slave->kobj.parent = &master->kobj; |
|
170 if (kobject_set_name(&slave->kobj, "slave%03i", slave->ring_position)) { |
|
171 EC_ERR("Failed to set kobject name.\n"); |
|
172 goto out_slave_put; |
|
173 } |
|
174 if (kobject_add(&slave->kobj)) { |
|
175 EC_ERR("Failed to add slave's kobject.\n"); |
|
176 goto out_slave_put; |
|
177 } |
|
178 |
|
179 // init SDO kobject and add it to the hierarchy |
|
180 memset(&slave->sdo_kobj, 0x00, sizeof(struct kobject)); |
|
181 kobject_init(&slave->sdo_kobj); |
|
182 slave->sdo_kobj.ktype = &ktype_ec_slave_sdos; |
|
183 slave->sdo_kobj.parent = &slave->kobj; |
|
184 if (kobject_set_name(&slave->sdo_kobj, "sdos")) { |
|
185 EC_ERR("Failed to set kobject name.\n"); |
|
186 goto out_sdo_put; |
|
187 } |
|
188 if (kobject_add(&slave->sdo_kobj)) { |
|
189 EC_ERR("Failed to add SDOs kobject.\n"); |
|
190 goto out_sdo_put; |
|
191 } |
|
192 |
188 return 0; |
193 return 0; |
|
194 |
|
195 out_sdo_put: |
|
196 kobject_put(&slave->sdo_kobj); |
|
197 kobject_del(&slave->kobj); |
|
198 out_slave_put: |
|
199 kobject_put(&slave->kobj); |
|
200 return -1; |
189 } |
201 } |
190 |
202 |
191 /*****************************************************************************/ |
203 /*****************************************************************************/ |
192 |
204 |
193 /** |
205 /** |
204 list_del(&sdo->list); |
216 list_del(&sdo->list); |
205 ec_sdo_destroy(sdo); |
217 ec_sdo_destroy(sdo); |
206 } |
218 } |
207 |
219 |
208 // free SDO kobject |
220 // free SDO kobject |
209 if (slave->sdo_dictionary_fetched) kobject_del(&slave->sdo_kobj); |
221 kobject_del(&slave->sdo_kobj); |
210 kobject_put(&slave->sdo_kobj); |
222 kobject_put(&slave->sdo_kobj); |
211 |
223 |
212 // destroy self |
224 // destroy self |
213 kobject_del(&slave->kobj); |
225 kobject_del(&slave->kobj); |
214 kobject_put(&slave->kobj); |
226 kobject_put(&slave->kobj); |