Lines Matching refs:channel
41 static int _idtcm_adjfine(struct idtcm_channel *channel, long scaled_ppm);
242 static int _idtcm_set_scsr_read_trig(struct idtcm_channel *channel, in _idtcm_set_scsr_read_trig() argument
245 struct idtcm *idtcm = channel->idtcm; in _idtcm_set_scsr_read_trig()
251 err = idtcm_read(idtcm, channel->tod_read_primary, in _idtcm_set_scsr_read_trig()
259 err = idtcm_write(idtcm, channel->tod_read_primary, in _idtcm_set_scsr_read_trig()
265 err = idtcm_read(idtcm, channel->tod_read_primary, in _idtcm_set_scsr_read_trig()
274 err = idtcm_write(idtcm, channel->tod_read_primary, in _idtcm_set_scsr_read_trig()
279 static int idtcm_enable_extts(struct idtcm_channel *channel, u8 todn, u8 ref, in idtcm_enable_extts() argument
282 struct idtcm *idtcm = channel->idtcm; in idtcm_enable_extts()
295 err = _idtcm_set_scsr_read_trig(&idtcm->channel[todn], in idtcm_enable_extts()
300 idtcm->event_channel[todn] = channel; in idtcm_enable_extts()
301 idtcm->channel[todn].refn = ref; in idtcm_enable_extts()
374 static int _idtcm_gettime(struct idtcm_channel *channel, in _idtcm_gettime() argument
377 struct idtcm *idtcm = channel->idtcm; in _idtcm_gettime()
391 err = idtcm_read(idtcm, channel->tod_read_primary, in _idtcm_gettime()
398 err = idtcm_read(idtcm, channel->tod_read_primary, in _idtcm_gettime()
416 extts_channel = &idtcm->channel[todn]; in idtcm_extts_check_channel()
431 static u8 idtcm_enable_extts_mask(struct idtcm_channel *channel, in idtcm_enable_extts_mask() argument
434 struct idtcm *idtcm = channel->idtcm; in idtcm_enable_extts_mask()
439 u8 refn = idtcm->channel[i].refn; in idtcm_enable_extts_mask()
449 (void)idtcm_enable_extts(channel, i, refn, enable); in idtcm_enable_extts_mask()
456 static int _idtcm_gettime_immediate(struct idtcm_channel *channel, in _idtcm_gettime_immediate() argument
459 struct idtcm *idtcm = channel->idtcm; in _idtcm_gettime_immediate()
465 extts_mask = idtcm_enable_extts_mask(channel, idtcm->extts_mask, in _idtcm_gettime_immediate()
469 err = _idtcm_set_scsr_read_trig(channel, in _idtcm_gettime_immediate()
472 err = _idtcm_gettime(channel, ts, 10); in _idtcm_gettime_immediate()
476 idtcm_enable_extts_mask(channel, extts_mask, true); in _idtcm_gettime_immediate()
608 static int idtcm_sync_pps_output(struct idtcm_channel *channel) in idtcm_sync_pps_output() argument
610 struct idtcm *idtcm = channel->idtcm; in idtcm_sync_pps_output()
618 u16 output_mask = channel->output_mask; in idtcm_sync_pps_output()
675 err = _sync_pll_output(idtcm, pll, channel->sync_src, in idtcm_sync_pps_output()
685 static int _idtcm_set_dpll_hw_tod(struct idtcm_channel *channel, in _idtcm_set_dpll_hw_tod() argument
689 struct idtcm *idtcm = channel->idtcm; in _idtcm_set_dpll_hw_tod()
697 err = idtcm_read(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1, in _idtcm_set_dpll_hw_tod()
705 err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1, in _idtcm_set_dpll_hw_tod()
715 err = idtcm_write(idtcm, channel->hw_dpll_n, in _idtcm_set_dpll_hw_tod()
724 err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1, in _idtcm_set_dpll_hw_tod()
745 err = idtcm_write(idtcm, channel->hw_dpll_n, in _idtcm_set_dpll_hw_tod()
752 static int _idtcm_set_dpll_scsr_tod(struct idtcm_channel *channel, in _idtcm_set_dpll_scsr_tod() argument
757 struct idtcm *idtcm = channel->idtcm; in _idtcm_set_dpll_scsr_tod()
768 err = idtcm_write(idtcm, channel->tod_write, TOD_WRITE, in _idtcm_set_dpll_scsr_tod()
774 err = idtcm_read(idtcm, channel->tod_write, TOD_WRITE_CMD, in _idtcm_set_dpll_scsr_tod()
784 err = idtcm_write(idtcm, channel->tod_write, TOD_WRITE_CMD, in _idtcm_set_dpll_scsr_tod()
795 err = idtcm_read(idtcm, channel->tod_write, TOD_WRITE_CMD, in _idtcm_set_dpll_scsr_tod()
861 static int _idtcm_settime_deprecated(struct idtcm_channel *channel, in _idtcm_settime_deprecated() argument
864 struct idtcm *idtcm = channel->idtcm; in _idtcm_settime_deprecated()
867 err = _idtcm_set_dpll_hw_tod(channel, ts, HW_TOD_WR_TRIG_SEL_MSB); in _idtcm_settime_deprecated()
874 return idtcm_sync_pps_output(channel); in _idtcm_settime_deprecated()
877 static int _idtcm_settime(struct idtcm_channel *channel, in _idtcm_settime() argument
881 return _idtcm_set_dpll_scsr_tod(channel, ts, in _idtcm_settime()
886 static int idtcm_set_phase_pull_in_offset(struct idtcm_channel *channel, in idtcm_set_phase_pull_in_offset() argument
891 struct idtcm *idtcm = channel->idtcm; in idtcm_set_phase_pull_in_offset()
899 err = idtcm_write(idtcm, channel->dpll_phase_pull_in, PULL_IN_OFFSET, in idtcm_set_phase_pull_in_offset()
905 static int idtcm_set_phase_pull_in_slope_limit(struct idtcm_channel *channel, in idtcm_set_phase_pull_in_slope_limit() argument
910 struct idtcm *idtcm = channel->idtcm; in idtcm_set_phase_pull_in_slope_limit()
921 err = idtcm_write(idtcm, channel->dpll_phase_pull_in, in idtcm_set_phase_pull_in_slope_limit()
927 static int idtcm_start_phase_pull_in(struct idtcm_channel *channel) in idtcm_start_phase_pull_in() argument
930 struct idtcm *idtcm = channel->idtcm; in idtcm_start_phase_pull_in()
933 err = idtcm_read(idtcm, channel->dpll_phase_pull_in, PULL_IN_CTRL, in idtcm_start_phase_pull_in()
940 err = idtcm_write(idtcm, channel->dpll_phase_pull_in, in idtcm_start_phase_pull_in()
949 static int do_phase_pull_in_fw(struct idtcm_channel *channel, in do_phase_pull_in_fw() argument
955 err = idtcm_set_phase_pull_in_offset(channel, -offset_ns); in do_phase_pull_in_fw()
959 err = idtcm_set_phase_pull_in_slope_limit(channel, max_ffo_ppb); in do_phase_pull_in_fw()
963 err = idtcm_start_phase_pull_in(channel); in do_phase_pull_in_fw()
968 static int set_tod_write_overhead(struct idtcm_channel *channel) in set_tod_write_overhead() argument
970 struct idtcm *idtcm = channel->idtcm; in set_tod_write_overhead()
982 idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_OVR__0, in set_tod_write_overhead()
988 err = idtcm_write(idtcm, channel->hw_dpll_n, in set_tod_write_overhead()
1012 static int _idtcm_adjtime_deprecated(struct idtcm_channel *channel, s64 delta) in _idtcm_adjtime_deprecated() argument
1015 struct idtcm *idtcm = channel->idtcm; in _idtcm_adjtime_deprecated()
1020 err = channel->do_phase_pull_in(channel, delta, 0); in _idtcm_adjtime_deprecated()
1024 err = set_tod_write_overhead(channel); in _idtcm_adjtime_deprecated()
1028 err = _idtcm_gettime_immediate(channel, &ts); in _idtcm_adjtime_deprecated()
1037 err = _idtcm_settime_deprecated(channel, &ts); in _idtcm_adjtime_deprecated()
1132 SET_U16_LSB(idtcm->channel[0].output_mask, val); in set_pll_output_mask()
1135 SET_U16_MSB(idtcm->channel[0].output_mask, val); in set_pll_output_mask()
1138 SET_U16_LSB(idtcm->channel[1].output_mask, val); in set_pll_output_mask()
1141 SET_U16_MSB(idtcm->channel[1].output_mask, val); in set_pll_output_mask()
1144 SET_U16_LSB(idtcm->channel[2].output_mask, val); in set_pll_output_mask()
1147 SET_U16_MSB(idtcm->channel[2].output_mask, val); in set_pll_output_mask()
1150 SET_U16_LSB(idtcm->channel[3].output_mask, val); in set_pll_output_mask()
1153 SET_U16_MSB(idtcm->channel[3].output_mask, val); in set_pll_output_mask()
1175 idtcm->channel[index].pll = pll; in set_tod_ptp_pll()
1228 i, idtcm->channel[i].pll, in display_pll_and_masks()
1229 idtcm->channel[i].output_mask); in display_pll_and_masks()
1307 static int idtcm_output_enable(struct idtcm_channel *channel, in idtcm_output_enable() argument
1310 struct idtcm *idtcm = channel->idtcm; in idtcm_output_enable()
1335 static int idtcm_output_mask_enable(struct idtcm_channel *channel, in idtcm_output_mask_enable() argument
1342 mask = channel->output_mask; in idtcm_output_mask_enable()
1347 err = idtcm_output_enable(channel, enable, outn); in idtcm_output_mask_enable()
1359 static int idtcm_perout_enable(struct idtcm_channel *channel, in idtcm_perout_enable() argument
1363 struct idtcm *idtcm = channel->idtcm; in idtcm_perout_enable()
1369 err = idtcm_output_mask_enable(channel, enable); in idtcm_perout_enable()
1371 err = idtcm_output_enable(channel, enable, perout->index); in idtcm_perout_enable()
1379 return _idtcm_settime(channel, &ts, SCSR_TOD_WR_TYPE_SEL_DELTA_PLUS); in idtcm_perout_enable()
1382 static int idtcm_get_pll_mode(struct idtcm_channel *channel, in idtcm_get_pll_mode() argument
1385 struct idtcm *idtcm = channel->idtcm; in idtcm_get_pll_mode()
1389 err = idtcm_read(idtcm, channel->dpll_n, in idtcm_get_pll_mode()
1400 static int idtcm_set_pll_mode(struct idtcm_channel *channel, in idtcm_set_pll_mode() argument
1403 struct idtcm *idtcm = channel->idtcm; in idtcm_set_pll_mode()
1407 err = idtcm_read(idtcm, channel->dpll_n, in idtcm_set_pll_mode()
1417 err = idtcm_write(idtcm, channel->dpll_n, in idtcm_set_pll_mode()
1423 static int idtcm_get_manual_reference(struct idtcm_channel *channel, in idtcm_get_manual_reference() argument
1426 struct idtcm *idtcm = channel->idtcm; in idtcm_get_manual_reference()
1430 err = idtcm_read(idtcm, channel->dpll_ctrl_n, in idtcm_get_manual_reference()
1443 static int idtcm_set_manual_reference(struct idtcm_channel *channel, in idtcm_set_manual_reference() argument
1446 struct idtcm *idtcm = channel->idtcm; in idtcm_set_manual_reference()
1450 err = idtcm_read(idtcm, channel->dpll_ctrl_n, in idtcm_set_manual_reference()
1460 err = idtcm_write(idtcm, channel->dpll_ctrl_n, in idtcm_set_manual_reference()
1467 static int configure_dpll_mode_write_frequency(struct idtcm_channel *channel) in configure_dpll_mode_write_frequency() argument
1469 struct idtcm *idtcm = channel->idtcm; in configure_dpll_mode_write_frequency()
1472 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY); in configure_dpll_mode_write_frequency()
1477 channel->mode = PTP_PLL_MODE_WRITE_FREQUENCY; in configure_dpll_mode_write_frequency()
1482 static int configure_dpll_mode_write_phase(struct idtcm_channel *channel) in configure_dpll_mode_write_phase() argument
1484 struct idtcm *idtcm = channel->idtcm; in configure_dpll_mode_write_phase()
1487 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_PHASE); in configure_dpll_mode_write_phase()
1492 channel->mode = PTP_PLL_MODE_WRITE_PHASE; in configure_dpll_mode_write_phase()
1497 static int configure_manual_reference_write_frequency(struct idtcm_channel *channel) in configure_manual_reference_write_frequency() argument
1499 struct idtcm *idtcm = channel->idtcm; in configure_manual_reference_write_frequency()
1502 err = idtcm_set_manual_reference(channel, MANU_REF_WRITE_FREQUENCY); in configure_manual_reference_write_frequency()
1507 channel->mode = PTP_PLL_MODE_WRITE_FREQUENCY; in configure_manual_reference_write_frequency()
1512 static int configure_manual_reference_write_phase(struct idtcm_channel *channel) in configure_manual_reference_write_phase() argument
1514 struct idtcm *idtcm = channel->idtcm; in configure_manual_reference_write_phase()
1517 err = idtcm_set_manual_reference(channel, MANU_REF_WRITE_PHASE); in configure_manual_reference_write_phase()
1522 channel->mode = PTP_PLL_MODE_WRITE_PHASE; in configure_manual_reference_write_phase()
1527 static int idtcm_stop_phase_pull_in(struct idtcm_channel *channel) in idtcm_stop_phase_pull_in() argument
1531 err = _idtcm_adjfine(channel, channel->current_freq_scaled_ppm); in idtcm_stop_phase_pull_in()
1535 channel->phase_pull_in = false; in idtcm_stop_phase_pull_in()
1542 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_work_handler() local
1543 struct idtcm *idtcm = channel->idtcm; in idtcm_work_handler()
1547 (void)idtcm_stop_phase_pull_in(channel); in idtcm_work_handler()
1573 static int do_phase_pull_in_sw(struct idtcm_channel *channel, in do_phase_pull_in_sw() argument
1577 s32 current_ppm = channel->current_freq_scaled_ppm; in do_phase_pull_in_sw()
1602 err = _idtcm_adjfine(channel, delta_ppm); in do_phase_pull_in_sw()
1608 ptp_schedule_worker(channel->ptp_clock, in do_phase_pull_in_sw()
1611 channel->phase_pull_in = true; in do_phase_pull_in_sw()
1616 static int initialize_operating_mode_with_manual_reference(struct idtcm_channel *channel, in initialize_operating_mode_with_manual_reference() argument
1619 struct idtcm *idtcm = channel->idtcm; in initialize_operating_mode_with_manual_reference()
1621 channel->mode = PTP_PLL_MODE_UNSUPPORTED; in initialize_operating_mode_with_manual_reference()
1622 channel->configure_write_frequency = configure_manual_reference_write_frequency; in initialize_operating_mode_with_manual_reference()
1623 channel->configure_write_phase = configure_manual_reference_write_phase; in initialize_operating_mode_with_manual_reference()
1624 channel->do_phase_pull_in = do_phase_pull_in_sw; in initialize_operating_mode_with_manual_reference()
1628 channel->mode = PTP_PLL_MODE_WRITE_PHASE; in initialize_operating_mode_with_manual_reference()
1631 channel->mode = PTP_PLL_MODE_WRITE_FREQUENCY; in initialize_operating_mode_with_manual_reference()
1641 static int initialize_operating_mode_with_pll_mode(struct idtcm_channel *channel, in initialize_operating_mode_with_pll_mode() argument
1644 struct idtcm *idtcm = channel->idtcm; in initialize_operating_mode_with_pll_mode()
1647 channel->mode = PTP_PLL_MODE_UNSUPPORTED; in initialize_operating_mode_with_pll_mode()
1648 channel->configure_write_frequency = configure_dpll_mode_write_frequency; in initialize_operating_mode_with_pll_mode()
1649 channel->configure_write_phase = configure_dpll_mode_write_phase; in initialize_operating_mode_with_pll_mode()
1650 channel->do_phase_pull_in = do_phase_pull_in_fw; in initialize_operating_mode_with_pll_mode()
1654 channel->mode = PTP_PLL_MODE_WRITE_PHASE; in initialize_operating_mode_with_pll_mode()
1657 channel->mode = PTP_PLL_MODE_WRITE_FREQUENCY; in initialize_operating_mode_with_pll_mode()
1668 static int initialize_dco_operating_mode(struct idtcm_channel *channel) in initialize_dco_operating_mode() argument
1672 struct idtcm *idtcm = channel->idtcm; in initialize_dco_operating_mode()
1675 channel->mode = PTP_PLL_MODE_UNSUPPORTED; in initialize_dco_operating_mode()
1677 err = idtcm_get_pll_mode(channel, &mode); in initialize_dco_operating_mode()
1684 err = idtcm_get_manual_reference(channel, &ref); in initialize_dco_operating_mode()
1689 err = initialize_operating_mode_with_manual_reference(channel, ref); in initialize_dco_operating_mode()
1691 err = initialize_operating_mode_with_pll_mode(channel, mode); in initialize_dco_operating_mode()
1694 if (channel->mode == PTP_PLL_MODE_WRITE_PHASE) in initialize_dco_operating_mode()
1695 channel->configure_write_frequency(channel); in initialize_dco_operating_mode()
1709 static int _idtcm_adjphase(struct idtcm_channel *channel, s32 delta_ns) in _idtcm_adjphase() argument
1711 struct idtcm *idtcm = channel->idtcm; in _idtcm_adjphase()
1718 if (channel->mode != PTP_PLL_MODE_WRITE_PHASE) { in _idtcm_adjphase()
1719 err = channel->configure_write_phase(channel); in _idtcm_adjphase()
1743 err = idtcm_write(idtcm, channel->dpll_phase, DPLL_WR_PHASE, in _idtcm_adjphase()
1749 static int _idtcm_adjfine(struct idtcm_channel *channel, long scaled_ppm) in _idtcm_adjfine() argument
1751 struct idtcm *idtcm = channel->idtcm; in _idtcm_adjfine()
1757 if (channel->mode != PTP_PLL_MODE_WRITE_FREQUENCY) { in _idtcm_adjfine()
1758 err = channel->configure_write_frequency(channel); in _idtcm_adjfine()
1787 err = idtcm_write(idtcm, channel->dpll_freq, DPLL_WR_FREQ, in _idtcm_adjfine()
1795 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_gettime() local
1796 struct idtcm *idtcm = channel->idtcm; in idtcm_gettime()
1800 err = _idtcm_gettime_immediate(channel, ts); in idtcm_gettime()
1813 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_settime_deprecated() local
1814 struct idtcm *idtcm = channel->idtcm; in idtcm_settime_deprecated()
1818 err = _idtcm_settime_deprecated(channel, ts); in idtcm_settime_deprecated()
1831 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_settime() local
1832 struct idtcm *idtcm = channel->idtcm; in idtcm_settime()
1836 err = _idtcm_settime(channel, ts, SCSR_TOD_WR_TYPE_SEL_ABSOLUTE); in idtcm_settime()
1848 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_adjtime_deprecated() local
1849 struct idtcm *idtcm = channel->idtcm; in idtcm_adjtime_deprecated()
1853 err = _idtcm_adjtime_deprecated(channel, delta); in idtcm_adjtime_deprecated()
1865 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_adjtime() local
1866 struct idtcm *idtcm = channel->idtcm; in idtcm_adjtime()
1871 if (channel->phase_pull_in == true) in idtcm_adjtime()
1877 err = channel->do_phase_pull_in(channel, delta, 0); in idtcm_adjtime()
1886 err = _idtcm_settime(channel, &ts, type); in idtcm_adjtime()
1900 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_adjphase() local
1901 struct idtcm *idtcm = channel->idtcm; in idtcm_adjphase()
1905 err = _idtcm_adjphase(channel, delta); in idtcm_adjphase()
1917 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_adjfine() local
1918 struct idtcm *idtcm = channel->idtcm; in idtcm_adjfine()
1921 if (channel->phase_pull_in == true) in idtcm_adjfine()
1924 if (scaled_ppm == channel->current_freq_scaled_ppm) in idtcm_adjfine()
1928 err = _idtcm_adjfine(channel, scaled_ppm); in idtcm_adjfine()
1935 channel->current_freq_scaled_ppm = scaled_ppm; in idtcm_adjfine()
1943 struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); in idtcm_enable() local
1944 struct idtcm *idtcm = channel->idtcm; in idtcm_enable()
1952 err = idtcm_perout_enable(channel, &rq->perout, false); in idtcm_enable()
1958 err = idtcm_perout_enable(channel, &rq->perout, true); in idtcm_enable()
1961 err = idtcm_enable_extts(channel, rq->extts.index, in idtcm_enable()
1971 dev_err(channel->idtcm->dev, in idtcm_enable()
1977 static int idtcm_enable_tod(struct idtcm_channel *channel) in idtcm_enable_tod() argument
1979 struct idtcm *idtcm = channel->idtcm; in idtcm_enable_tod()
1987 err = idtcm_output_mask_enable(channel, false); in idtcm_enable_tod()
1995 err = idtcm_read(idtcm, channel->tod_n, tod_cfg, &cfg, sizeof(cfg)); in idtcm_enable_tod()
2001 err = idtcm_write(idtcm, channel->tod_n, tod_cfg, &cfg, sizeof(cfg)); in idtcm_enable_tod()
2006 return _idtcm_settime_deprecated(channel, &ts); in idtcm_enable_tod()
2008 return _idtcm_settime(channel, &ts, in idtcm_enable_tod()
2069 static int configure_channel_pll(struct idtcm_channel *channel) in configure_channel_pll() argument
2071 struct idtcm *idtcm = channel->idtcm; in configure_channel_pll()
2074 switch (channel->pll) { in configure_channel_pll()
2076 channel->dpll_freq = DPLL_FREQ_0; in configure_channel_pll()
2077 channel->dpll_n = DPLL_0; in configure_channel_pll()
2078 channel->hw_dpll_n = HW_DPLL_0; in configure_channel_pll()
2079 channel->dpll_phase = DPLL_PHASE_0; in configure_channel_pll()
2080 channel->dpll_ctrl_n = DPLL_CTRL_0; in configure_channel_pll()
2081 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_0; in configure_channel_pll()
2084 channel->dpll_freq = DPLL_FREQ_1; in configure_channel_pll()
2085 channel->dpll_n = DPLL_1; in configure_channel_pll()
2086 channel->hw_dpll_n = HW_DPLL_1; in configure_channel_pll()
2087 channel->dpll_phase = DPLL_PHASE_1; in configure_channel_pll()
2088 channel->dpll_ctrl_n = DPLL_CTRL_1; in configure_channel_pll()
2089 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_1; in configure_channel_pll()
2092 channel->dpll_freq = DPLL_FREQ_2; in configure_channel_pll()
2093 channel->dpll_n = IDTCM_FW_REG(idtcm->fw_ver, V520, DPLL_2); in configure_channel_pll()
2094 channel->hw_dpll_n = HW_DPLL_2; in configure_channel_pll()
2095 channel->dpll_phase = DPLL_PHASE_2; in configure_channel_pll()
2096 channel->dpll_ctrl_n = DPLL_CTRL_2; in configure_channel_pll()
2097 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_2; in configure_channel_pll()
2100 channel->dpll_freq = DPLL_FREQ_3; in configure_channel_pll()
2101 channel->dpll_n = DPLL_3; in configure_channel_pll()
2102 channel->hw_dpll_n = HW_DPLL_3; in configure_channel_pll()
2103 channel->dpll_phase = DPLL_PHASE_3; in configure_channel_pll()
2104 channel->dpll_ctrl_n = DPLL_CTRL_3; in configure_channel_pll()
2105 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_3; in configure_channel_pll()
2108 channel->dpll_freq = DPLL_FREQ_4; in configure_channel_pll()
2109 channel->dpll_n = IDTCM_FW_REG(idtcm->fw_ver, V520, DPLL_4); in configure_channel_pll()
2110 channel->hw_dpll_n = HW_DPLL_4; in configure_channel_pll()
2111 channel->dpll_phase = DPLL_PHASE_4; in configure_channel_pll()
2112 channel->dpll_ctrl_n = DPLL_CTRL_4; in configure_channel_pll()
2113 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_4; in configure_channel_pll()
2116 channel->dpll_freq = DPLL_FREQ_5; in configure_channel_pll()
2117 channel->dpll_n = DPLL_5; in configure_channel_pll()
2118 channel->hw_dpll_n = HW_DPLL_5; in configure_channel_pll()
2119 channel->dpll_phase = DPLL_PHASE_5; in configure_channel_pll()
2120 channel->dpll_ctrl_n = DPLL_CTRL_5; in configure_channel_pll()
2121 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_5; in configure_channel_pll()
2124 channel->dpll_freq = DPLL_FREQ_6; in configure_channel_pll()
2125 channel->dpll_n = IDTCM_FW_REG(idtcm->fw_ver, V520, DPLL_6); in configure_channel_pll()
2126 channel->hw_dpll_n = HW_DPLL_6; in configure_channel_pll()
2127 channel->dpll_phase = DPLL_PHASE_6; in configure_channel_pll()
2128 channel->dpll_ctrl_n = DPLL_CTRL_6; in configure_channel_pll()
2129 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_6; in configure_channel_pll()
2132 channel->dpll_freq = DPLL_FREQ_7; in configure_channel_pll()
2133 channel->dpll_n = DPLL_7; in configure_channel_pll()
2134 channel->hw_dpll_n = HW_DPLL_7; in configure_channel_pll()
2135 channel->dpll_phase = DPLL_PHASE_7; in configure_channel_pll()
2136 channel->dpll_ctrl_n = DPLL_CTRL_7; in configure_channel_pll()
2137 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_7; in configure_channel_pll()
2150 static u32 idtcm_get_dco_delay(struct idtcm_channel *channel) in idtcm_get_dco_delay() argument
2152 struct idtcm *idtcm = channel->idtcm; in idtcm_get_dco_delay()
2160 err = idtcm_read(idtcm, channel->dpll_ctrl_n, in idtcm_get_dco_delay()
2165 err = idtcm_read(idtcm, channel->dpll_ctrl_n, in idtcm_get_dco_delay()
2183 static int configure_channel_tod(struct idtcm_channel *channel, u32 index) in configure_channel_tod() argument
2185 enum fw_version fw_ver = channel->idtcm->fw_ver; in configure_channel_tod()
2190 channel->tod_read_primary = IDTCM_FW_REG(fw_ver, V520, TOD_READ_PRIMARY_0); in configure_channel_tod()
2191 channel->tod_write = IDTCM_FW_REG(fw_ver, V520, TOD_WRITE_0); in configure_channel_tod()
2192 channel->tod_n = IDTCM_FW_REG(fw_ver, V520, TOD_0); in configure_channel_tod()
2193 channel->sync_src = SYNC_SOURCE_DPLL0_TOD_PPS; in configure_channel_tod()
2196 channel->tod_read_primary = IDTCM_FW_REG(fw_ver, V520, TOD_READ_PRIMARY_1); in configure_channel_tod()
2197 channel->tod_write = IDTCM_FW_REG(fw_ver, V520, TOD_WRITE_1); in configure_channel_tod()
2198 channel->tod_n = IDTCM_FW_REG(fw_ver, V520, TOD_1); in configure_channel_tod()
2199 channel->sync_src = SYNC_SOURCE_DPLL1_TOD_PPS; in configure_channel_tod()
2202 channel->tod_read_primary = IDTCM_FW_REG(fw_ver, V520, TOD_READ_PRIMARY_2); in configure_channel_tod()
2203 channel->tod_write = IDTCM_FW_REG(fw_ver, V520, TOD_WRITE_2); in configure_channel_tod()
2204 channel->tod_n = IDTCM_FW_REG(fw_ver, V520, TOD_2); in configure_channel_tod()
2205 channel->sync_src = SYNC_SOURCE_DPLL2_TOD_PPS; in configure_channel_tod()
2208 channel->tod_read_primary = IDTCM_FW_REG(fw_ver, V520, TOD_READ_PRIMARY_3); in configure_channel_tod()
2209 channel->tod_write = IDTCM_FW_REG(fw_ver, V520, TOD_WRITE_3); in configure_channel_tod()
2210 channel->tod_n = IDTCM_FW_REG(fw_ver, V520, TOD_3); in configure_channel_tod()
2211 channel->sync_src = SYNC_SOURCE_DPLL3_TOD_PPS; in configure_channel_tod()
2222 struct idtcm_channel *channel; in idtcm_enable_channel() local
2228 channel = &idtcm->channel[index]; in idtcm_enable_channel()
2230 channel->idtcm = idtcm; in idtcm_enable_channel()
2231 channel->current_freq_scaled_ppm = 0; in idtcm_enable_channel()
2234 err = configure_channel_pll(channel); in idtcm_enable_channel()
2239 err = configure_channel_tod(channel, index); in idtcm_enable_channel()
2244 channel->caps = idtcm_caps_deprecated; in idtcm_enable_channel()
2246 channel->caps = idtcm_caps; in idtcm_enable_channel()
2248 snprintf(channel->caps.name, sizeof(channel->caps.name), in idtcm_enable_channel()
2251 err = initialize_dco_operating_mode(channel); in idtcm_enable_channel()
2255 err = idtcm_enable_tod(channel); in idtcm_enable_channel()
2262 channel->dco_delay = idtcm_get_dco_delay(channel); in idtcm_enable_channel()
2264 channel->ptp_clock = ptp_clock_register(&channel->caps, NULL); in idtcm_enable_channel()
2266 if (IS_ERR(channel->ptp_clock)) { in idtcm_enable_channel()
2267 err = PTR_ERR(channel->ptp_clock); in idtcm_enable_channel()
2268 channel->ptp_clock = NULL; in idtcm_enable_channel()
2272 if (!channel->ptp_clock) in idtcm_enable_channel()
2276 index, channel->ptp_clock->index); in idtcm_enable_channel()
2283 struct idtcm_channel *channel; in idtcm_enable_extts_channel() local
2289 channel = &idtcm->channel[index]; in idtcm_enable_extts_channel()
2290 channel->idtcm = idtcm; in idtcm_enable_extts_channel()
2293 err = configure_channel_tod(channel, index); in idtcm_enable_extts_channel()
2297 channel->idtcm = idtcm; in idtcm_enable_extts_channel()
2331 struct idtcm_channel *channel; in ptp_clock_unregister_all() local
2334 channel = &idtcm->channel[i]; in ptp_clock_unregister_all()
2335 if (channel->ptp_clock) in ptp_clock_unregister_all()
2336 ptp_clock_unregister(channel->ptp_clock); in ptp_clock_unregister_all()
2345 idtcm->channel[0].pll = DEFAULT_TOD0_PTP_PLL; in set_default_masks()
2346 idtcm->channel[1].pll = DEFAULT_TOD1_PTP_PLL; in set_default_masks()
2347 idtcm->channel[2].pll = DEFAULT_TOD2_PTP_PLL; in set_default_masks()
2348 idtcm->channel[3].pll = DEFAULT_TOD3_PTP_PLL; in set_default_masks()
2350 idtcm->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0; in set_default_masks()
2351 idtcm->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1; in set_default_masks()
2352 idtcm->channel[2].output_mask = DEFAULT_OUTPUT_MASK_PLL2; in set_default_masks()
2353 idtcm->channel[3].output_mask = DEFAULT_OUTPUT_MASK_PLL3; in set_default_masks()