414 fsm->state = ec_fsm_slave_config_state_dc_read_offset; |
414 fsm->state = ec_fsm_slave_config_state_dc_read_offset; |
415 } |
415 } |
416 |
416 |
417 /*****************************************************************************/ |
417 /*****************************************************************************/ |
418 |
418 |
419 #define ABS(X) ((X) >= 0 ? (X) : -(X)) |
|
420 |
|
421 /** Configure 32 bit time offset. |
419 /** Configure 32 bit time offset. |
422 */ |
420 */ |
423 u64 ec_fsm_slave_config_dc_offset32( |
421 u64 ec_fsm_slave_config_dc_offset32( |
424 ec_fsm_slave_config_t *fsm, /**< slave state machine */ |
422 ec_fsm_slave_config_t *fsm, /**< slave state machine */ |
425 u64 system_time, /**< System time register. */ |
423 u64 system_time, /**< System time register. */ |
443 EC_DBG("Slave %u: system_time=%u (corrected with %u)," |
441 EC_DBG("Slave %u: system_time=%u (corrected with %u)," |
444 " app_time=%u, diff=%i\n", |
442 " app_time=%u, diff=%i\n", |
445 slave->ring_position, system_time32, correction, |
443 slave->ring_position, system_time32, correction, |
446 (u32) slave->master->app_time, time_diff); |
444 (u32) slave->master->app_time, time_diff); |
447 |
445 |
448 if (ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { |
446 if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { |
449 new_offset = time_diff + old_offset32; |
447 new_offset = time_diff + old_offset32; |
450 if (slave->master->debug_level) |
448 if (slave->master->debug_level) |
451 EC_DBG("Slave %u: Setting time offset to %u (was %u)\n", |
449 EC_DBG("Slave %u: Setting time offset to %u (was %u)\n", |
452 slave->ring_position, new_offset, old_offset32); |
450 slave->ring_position, new_offset, old_offset32); |
453 return (u64) new_offset; |
451 return (u64) new_offset; |
484 " app_time=%llu, diff=%lli\n", |
482 " app_time=%llu, diff=%lli\n", |
485 slave->ring_position, system_time, correction, |
483 slave->ring_position, system_time, correction, |
486 slave->master->app_time, time_diff); |
484 slave->master->app_time, time_diff); |
487 |
485 |
488 |
486 |
489 if (ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { |
487 if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) { |
490 new_offset = time_diff + old_offset; |
488 new_offset = time_diff + old_offset; |
491 if (slave->master->debug_level) |
489 if (slave->master->debug_level) |
492 EC_DBG("Slave %u: Setting time offset to %llu (was %llu)\n", |
490 EC_DBG("Slave %u: Setting time offset to %llu (was %llu)\n", |
493 slave->ring_position, new_offset, old_offset); |
491 slave->ring_position, new_offset, old_offset); |
494 } else { |
492 } else { |