323 // check if any slaves are not in the state, they're supposed to be |
323 // check if any slaves are not in the state, they're supposed to be |
324 list_for_each_entry(slave, &master->slaves, list) { |
324 list_for_each_entry(slave, &master->slaves, list) { |
325 if (slave->error_flag |
325 if (slave->error_flag |
326 || !slave->online |
326 || !slave->online |
327 || slave->requested_state == EC_SLAVE_STATE_UNKNOWN |
327 || slave->requested_state == EC_SLAVE_STATE_UNKNOWN |
328 || slave->current_state == slave->requested_state) continue; |
328 || (slave->current_state == slave->requested_state |
|
329 && slave->self_configured)) continue; |
329 |
330 |
330 if (master->debug_level) { |
331 if (master->debug_level) { |
331 ec_state_string(slave->current_state, old_state); |
332 ec_state_string(slave->current_state, old_state); |
332 ec_state_string(slave->requested_state, new_state); |
333 if (slave->current_state != slave->requested_state) { |
333 EC_DBG("Changing state of slave %i (%s -> %s).\n", |
334 ec_state_string(slave->requested_state, new_state); |
334 slave->ring_position, old_state, new_state); |
335 EC_DBG("Changing state of slave %i (%s -> %s).\n", |
|
336 slave->ring_position, old_state, new_state); |
|
337 } |
|
338 else if (!slave->self_configured) { |
|
339 EC_DBG("Reconfiguring slave %i (%s).\n", |
|
340 slave->ring_position, old_state); |
|
341 } |
335 } |
342 } |
336 |
343 |
337 fsm->master_state = ec_fsm_master_configure_slave; |
344 fsm->master_state = ec_fsm_master_configure_slave; |
338 fsm->slave = slave; |
345 fsm->slave = slave; |
339 fsm->slave_state = ec_fsm_slaveconf_state_start; |
346 fsm->slave_state = ec_fsm_slaveconf_state_start; |
1306 slave->error_flag = 1; |
1313 slave->error_flag = 1; |
1307 fsm->slave_state = ec_fsm_slave_state_error; |
1314 fsm->slave_state = ec_fsm_slave_state_error; |
1308 return; |
1315 return; |
1309 } |
1316 } |
1310 |
1317 |
|
1318 slave->self_configured = 1; |
|
1319 |
1311 if (master->debug_level) { |
1320 if (master->debug_level) { |
1312 EC_DBG("Slave %i is now in INIT.\n", slave->ring_position); |
1321 EC_DBG("Slave %i is now in INIT.\n", slave->ring_position); |
1313 } |
1322 } |
1314 |
1323 |
1315 // check and reset CRC fault counters |
1324 // check and reset CRC fault counters |