1363 ec_master_t *master = slave->master; |
1363 ec_master_t *master = slave->master; |
1364 ec_slave_config_t *config = slave->config; |
1364 ec_slave_config_t *config = slave->config; |
1365 uint32_t abs_sync_diff; |
1365 uint32_t abs_sync_diff; |
1366 unsigned long diff_ms; |
1366 unsigned long diff_ms; |
1367 ec_sync_signal_t *sync0 = &config->dc_sync[0]; |
1367 ec_sync_signal_t *sync0 = &config->dc_sync[0]; |
|
1368 ec_sync_signal_t *sync1 = &config->dc_sync[1]; |
1368 u64 start_time; |
1369 u64 start_time; |
1369 |
1370 |
1370 if (!config) { // config removed in the meantime |
1371 if (!config) { // config removed in the meantime |
1371 ec_fsm_slave_config_reconfigure(fsm); |
1372 ec_fsm_slave_config_reconfigure(fsm); |
1372 return; |
1373 return; |
1418 |
1419 |
1419 if (sync0->cycle_time) { |
1420 if (sync0->cycle_time) { |
1420 // find correct phase |
1421 // find correct phase |
1421 if (master->has_app_time) { |
1422 if (master->has_app_time) { |
1422 u64 diff, start; |
1423 u64 diff, start; |
1423 u32 remainder; |
1424 u32 remainder, cycle; |
1424 |
1425 |
1425 diff = start_time - master->app_start_time; |
1426 diff = start_time - master->app_start_time; |
1426 remainder = do_div(diff, sync0->cycle_time); |
1427 cycle = sync0->cycle_time + sync1->cycle_time; |
1427 |
1428 remainder = do_div(diff, cycle); |
1428 start = start_time + |
1429 |
1429 sync0->cycle_time - remainder + sync0->shift_time; |
1430 start = start_time + cycle - remainder + sync0->shift_time; |
1430 |
1431 |
1431 EC_SLAVE_DBG(slave, 1, "app_start_time=%llu\n", |
1432 EC_SLAVE_DBG(slave, 1, "app_start_time=%llu\n", |
1432 master->app_start_time); |
1433 master->app_start_time); |
1433 EC_SLAVE_DBG(slave, 1, " app_time=%llu\n", master->app_time); |
1434 EC_SLAVE_DBG(slave, 1, " app_time=%llu\n", master->app_time); |
1434 EC_SLAVE_DBG(slave, 1, " start_time=%llu\n", start_time); |
1435 EC_SLAVE_DBG(slave, 1, " start_time=%llu\n", start_time); |
1435 EC_SLAVE_DBG(slave, 1, " cycle_time=%u\n", sync0->cycle_time); |
1436 EC_SLAVE_DBG(slave, 1, " cycle=%u\n", cycle); |
1436 EC_SLAVE_DBG(slave, 1, " shift_time=%i\n", sync0->shift_time); |
1437 EC_SLAVE_DBG(slave, 1, " shift_time=%i\n", sync0->shift_time); |
1437 EC_SLAVE_DBG(slave, 1, " remainder=%u\n", remainder); |
1438 EC_SLAVE_DBG(slave, 1, " remainder=%u\n", remainder); |
1438 EC_SLAVE_DBG(slave, 1, " start=%llu\n", start); |
1439 EC_SLAVE_DBG(slave, 1, " start=%llu\n", start); |
1439 start_time = start; |
1440 start_time = start; |
1440 } else { |
1441 } else { |