equal
deleted
inserted
replaced
295 } |
295 } |
296 } |
296 } |
297 |
297 |
298 // fetch state from each slave |
298 // fetch state from each slave |
299 fsm->slave = list_entry(master->slaves.next, ec_slave_t, list); |
299 fsm->slave = list_entry(master->slaves.next, ec_slave_t, list); |
300 ec_datagram_nprd(fsm->datagram, fsm->slave->station_address, 0x0130, 2); |
300 ec_datagram_fprd(fsm->datagram, fsm->slave->station_address, 0x0130, 2); |
301 fsm->retries = EC_FSM_RETRIES; |
301 fsm->retries = EC_FSM_RETRIES; |
302 fsm->state = ec_fsm_master_state_read_states; |
302 fsm->state = ec_fsm_master_state_read_states; |
303 } |
303 } |
304 |
304 |
305 /*****************************************************************************/ |
305 /*****************************************************************************/ |
345 EC_DBG("Writing EEPROM data to slave %i...\n", |
345 EC_DBG("Writing EEPROM data to slave %i...\n", |
346 slave->ring_position); |
346 slave->ring_position); |
347 fsm->eeprom_request = request; |
347 fsm->eeprom_request = request; |
348 fsm->eeprom_index = 0; |
348 fsm->eeprom_index = 0; |
349 ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->word_offset, |
349 ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->word_offset, |
350 request->data, EC_FSM_SII_NODE); |
350 request->data, EC_FSM_SII_USE_CONFIGURED_ADDRESS); |
351 fsm->state = ec_fsm_master_state_write_eeprom; |
351 fsm->state = ec_fsm_master_state_write_eeprom; |
352 fsm->state(fsm); // execute immediately |
352 fsm->state(fsm); // execute immediately |
353 return 1; |
353 return 1; |
354 } |
354 } |
355 |
355 |
570 // is there another slave to query? |
570 // is there another slave to query? |
571 if (slave->list.next != &master->slaves) { |
571 if (slave->list.next != &master->slaves) { |
572 // process next slave |
572 // process next slave |
573 fsm->idle = 1; |
573 fsm->idle = 1; |
574 fsm->slave = list_entry(slave->list.next, ec_slave_t, list); |
574 fsm->slave = list_entry(slave->list.next, ec_slave_t, list); |
575 ec_datagram_nprd(fsm->datagram, fsm->slave->station_address, |
575 ec_datagram_fprd(fsm->datagram, fsm->slave->station_address, |
576 0x0130, 2); |
576 0x0130, 2); |
577 fsm->retries = EC_FSM_RETRIES; |
577 fsm->retries = EC_FSM_RETRIES; |
578 fsm->state = ec_fsm_master_state_read_states; |
578 fsm->state = ec_fsm_master_state_read_states; |
579 return; |
579 return; |
580 } |
580 } |
590 // At least one slave is offline. validate! |
590 // At least one slave is offline. validate! |
591 EC_INFO("Validating bus.\n"); |
591 EC_INFO("Validating bus.\n"); |
592 fsm->idle = 0; |
592 fsm->idle = 0; |
593 fsm->slave = list_entry(master->slaves.next, ec_slave_t, list); |
593 fsm->slave = list_entry(master->slaves.next, ec_slave_t, list); |
594 fsm->state = ec_fsm_master_state_validate_vendor; |
594 fsm->state = ec_fsm_master_state_validate_vendor; |
595 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x0008, EC_FSM_SII_POSITION); |
595 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x0008, |
|
596 EC_FSM_SII_USE_INCREMENT_ADDRESS); |
596 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
597 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
597 return; |
598 return; |
598 } |
599 } |
599 } |
600 } |
600 |
601 |
699 return; |
700 return; |
700 } |
701 } |
701 |
702 |
702 // vendor ID is ok. check product code. |
703 // vendor ID is ok. check product code. |
703 fsm->state = ec_fsm_master_state_validate_product; |
704 fsm->state = ec_fsm_master_state_validate_product; |
704 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x000A, EC_FSM_SII_POSITION); |
705 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x000A, |
|
706 EC_FSM_SII_USE_INCREMENT_ADDRESS); |
705 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
707 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
706 } |
708 } |
707 |
709 |
708 /*****************************************************************************/ |
710 /*****************************************************************************/ |
709 |
711 |
776 } |
778 } |
777 |
779 |
778 // validate next slave |
780 // validate next slave |
779 fsm->slave = list_entry(fsm->slave->list.next, ec_slave_t, list); |
781 fsm->slave = list_entry(fsm->slave->list.next, ec_slave_t, list); |
780 fsm->state = ec_fsm_master_state_validate_vendor; |
782 fsm->state = ec_fsm_master_state_validate_vendor; |
781 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x0008, EC_FSM_SII_POSITION); |
783 ec_fsm_sii_read(&fsm->fsm_sii, slave, 0x0008, |
|
784 EC_FSM_SII_USE_INCREMENT_ADDRESS); |
782 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
785 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
783 } |
786 } |
784 |
787 |
785 /*****************************************************************************/ |
788 /*****************************************************************************/ |
786 |
789 |
978 fsm->eeprom_index++; |
981 fsm->eeprom_index++; |
979 if (fsm->eeprom_index < request->word_size) { |
982 if (fsm->eeprom_index < request->word_size) { |
980 ec_fsm_sii_write(&fsm->fsm_sii, slave, |
983 ec_fsm_sii_write(&fsm->fsm_sii, slave, |
981 request->word_offset + fsm->eeprom_index, |
984 request->word_offset + fsm->eeprom_index, |
982 request->data + fsm->eeprom_index * 2, |
985 request->data + fsm->eeprom_index * 2, |
983 EC_FSM_SII_NODE); |
986 EC_FSM_SII_USE_CONFIGURED_ADDRESS); |
984 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
987 ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately |
985 return; |
988 return; |
986 } |
989 } |
987 |
990 |
988 // finished writing EEPROM |
991 // finished writing EEPROM |