Lines Matching refs:channel

159 static int idt82p33_dpll_set_mode(struct idt82p33_channel *channel,  in idt82p33_dpll_set_mode()  argument
162 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_dpll_set_mode()
166 if (channel->pll_mode == mode) in idt82p33_dpll_set_mode()
169 err = idt82p33_read(idt82p33, channel->dpll_mode_cnfg, in idt82p33_dpll_set_mode()
178 err = idt82p33_write(idt82p33, channel->dpll_mode_cnfg, in idt82p33_dpll_set_mode()
183 channel->pll_mode = dpll_mode; in idt82p33_dpll_set_mode()
188 static int _idt82p33_gettime(struct idt82p33_channel *channel, in _idt82p33_gettime() argument
191 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_gettime()
200 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in _idt82p33_gettime()
209 err = idt82p33_read(idt82p33, channel->dpll_tod_sts, buf, sizeof(buf)); in _idt82p33_gettime()
225 static int _idt82p33_settime(struct idt82p33_channel *channel, in _idt82p33_settime() argument
228 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_settime()
239 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in _idt82p33_settime()
260 err = idt82p33_write(idt82p33, channel->dpll_tod_cnfg + i, in _idt82p33_settime()
269 static int _idt82p33_adjtime(struct idt82p33_channel *channel, s64 delta_ns) in _idt82p33_adjtime() argument
271 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_adjtime()
278 err = _idt82p33_gettime(channel, &ts); in _idt82p33_adjtime()
288 err = _idt82p33_settime(channel, &ts); in _idt82p33_adjtime()
293 static int _idt82p33_adjfine(struct idt82p33_channel *channel, long scaled_ppm) in _idt82p33_adjfine() argument
295 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_adjfine()
301 if (scaled_ppm == channel->current_freq_ppb) in _idt82p33_adjfine()
333 err = idt82p33_dpll_set_mode(channel, PLL_MODE_DCO); in _idt82p33_adjfine()
338 err = idt82p33_write(idt82p33, channel->dpll_freq_cnfg, in _idt82p33_adjfine()
342 channel->current_freq_ppb = scaled_ppm; in _idt82p33_adjfine()
348 struct idt82p33_channel *channel, s64 *overhead_ns) in idt82p33_measure_one_byte_write_overhead() argument
350 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_one_byte_write_overhead()
366 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in idt82p33_measure_one_byte_write_overhead()
383 struct idt82p33_channel *channel) in idt82p33_measure_tod_write_9_byte_overhead() argument
385 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_tod_write_9_byte_overhead()
402 channel->dpll_tod_cnfg + i, in idt82p33_measure_tod_write_9_byte_overhead()
420 struct idt82p33_channel *channel, s64 *overhead_ns) in idt82p33_measure_settime_gettime_gap_overhead() argument
428 err = _idt82p33_settime(channel, &ts1); in idt82p33_measure_settime_gettime_gap_overhead()
433 err = _idt82p33_gettime(channel, &ts2); in idt82p33_measure_settime_gettime_gap_overhead()
441 static int idt82p33_measure_tod_write_overhead(struct idt82p33_channel *channel) in idt82p33_measure_tod_write_overhead() argument
444 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_tod_write_overhead()
449 err = idt82p33_measure_settime_gettime_gap_overhead(channel, &gap_ns); in idt82p33_measure_tod_write_overhead()
454 err = idt82p33_measure_one_byte_write_overhead(channel, in idt82p33_measure_tod_write_overhead()
460 err = idt82p33_measure_tod_write_9_byte_overhead(channel); in idt82p33_measure_tod_write_overhead()
489 idt82p33->channel[0].output_mask = val; in idt82p33_check_and_set_masks()
492 idt82p33->channel[1].output_mask = val; in idt82p33_check_and_set_masks()
511 i, idt82p33->channel[i].output_mask); in idt82p33_display_masks()
515 static int idt82p33_sync_tod(struct idt82p33_channel *channel, bool enable) in idt82p33_sync_tod() argument
517 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_sync_tod()
521 if (enable == channel->sync_tod_on) { in idt82p33_sync_tod()
523 mod_delayed_work(system_wq, &channel->sync_tod_work, in idt82p33_sync_tod()
529 err = idt82p33_read(idt82p33, channel->dpll_sync_cnfg, in idt82p33_sync_tod()
539 err = idt82p33_write(idt82p33, channel->dpll_sync_cnfg, in idt82p33_sync_tod()
544 channel->sync_tod_on = enable; in idt82p33_sync_tod()
547 mod_delayed_work(system_wq, &channel->sync_tod_work, in idt82p33_sync_tod()
556 struct idt82p33_channel *channel = in idt82p33_sync_tod_work_handler() local
558 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_sync_tod_work_handler()
562 (void)idt82p33_sync_tod(channel, false); in idt82p33_sync_tod_work_handler()
567 static int idt82p33_pps_enable(struct idt82p33_channel *channel, bool enable) in idt82p33_pps_enable() argument
569 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_pps_enable()
573 mask = channel->output_mask; in idt82p33_pps_enable()
601 static int idt82p33_enable_tod(struct idt82p33_channel *channel) in idt82p33_enable_tod() argument
603 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_enable_tod()
609 err = idt82p33_write(idt82p33, channel->dpll_input_mode_cnfg, in idt82p33_enable_tod()
614 err = idt82p33_pps_enable(channel, false); in idt82p33_enable_tod()
619 err = idt82p33_measure_tod_write_overhead(channel); in idt82p33_enable_tod()
624 err = _idt82p33_settime(channel, &ts); in idt82p33_enable_tod()
629 return idt82p33_sync_tod(channel, true); in idt82p33_enable_tod()
634 struct idt82p33_channel *channel; in idt82p33_ptp_clock_unregister_all() local
639 channel = &idt82p33->channel[i]; in idt82p33_ptp_clock_unregister_all()
641 if (channel->ptp_clock) { in idt82p33_ptp_clock_unregister_all()
642 ptp_clock_unregister(channel->ptp_clock); in idt82p33_ptp_clock_unregister_all()
643 cancel_delayed_work_sync(&channel->sync_tod_work); in idt82p33_ptp_clock_unregister_all()
651 struct idt82p33_channel *channel = in idt82p33_enable() local
653 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_enable()
662 err = idt82p33_pps_enable(channel, false); in idt82p33_enable()
669 err = idt82p33_pps_enable(channel, true); in idt82p33_enable()
679 struct idt82p33_channel *channel = in idt82p33_adjfine() local
681 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_adjfine()
685 err = _idt82p33_adjfine(channel, scaled_ppm); in idt82p33_adjfine()
693 struct idt82p33_channel *channel = in idt82p33_adjtime() local
695 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_adjtime()
705 err = _idt82p33_adjtime(channel, delta_ns); in idt82p33_adjtime()
712 err = idt82p33_sync_tod(channel, true); in idt82p33_adjtime()
721 struct idt82p33_channel *channel = in idt82p33_gettime() local
723 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_gettime()
727 err = _idt82p33_gettime(channel, ts); in idt82p33_gettime()
736 struct idt82p33_channel *channel = in idt82p33_settime() local
738 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_settime()
742 err = _idt82p33_settime(channel, ts); in idt82p33_settime()
748 static int idt82p33_channel_init(struct idt82p33_channel *channel, int index) in idt82p33_channel_init() argument
752 channel->dpll_tod_cnfg = DPLL1_TOD_CNFG; in idt82p33_channel_init()
753 channel->dpll_tod_trigger = DPLL1_TOD_TRIGGER; in idt82p33_channel_init()
754 channel->dpll_tod_sts = DPLL1_TOD_STS; in idt82p33_channel_init()
755 channel->dpll_mode_cnfg = DPLL1_OPERATING_MODE_CNFG; in idt82p33_channel_init()
756 channel->dpll_freq_cnfg = DPLL1_HOLDOVER_FREQ_CNFG; in idt82p33_channel_init()
757 channel->dpll_phase_cnfg = DPLL1_PHASE_OFFSET_CNFG; in idt82p33_channel_init()
758 channel->dpll_sync_cnfg = DPLL1_SYNC_EDGE_CNFG; in idt82p33_channel_init()
759 channel->dpll_input_mode_cnfg = DPLL1_INPUT_MODE_CNFG; in idt82p33_channel_init()
762 channel->dpll_tod_cnfg = DPLL2_TOD_CNFG; in idt82p33_channel_init()
763 channel->dpll_tod_trigger = DPLL2_TOD_TRIGGER; in idt82p33_channel_init()
764 channel->dpll_tod_sts = DPLL2_TOD_STS; in idt82p33_channel_init()
765 channel->dpll_mode_cnfg = DPLL2_OPERATING_MODE_CNFG; in idt82p33_channel_init()
766 channel->dpll_freq_cnfg = DPLL2_HOLDOVER_FREQ_CNFG; in idt82p33_channel_init()
767 channel->dpll_phase_cnfg = DPLL2_PHASE_OFFSET_CNFG; in idt82p33_channel_init()
768 channel->dpll_sync_cnfg = DPLL2_SYNC_EDGE_CNFG; in idt82p33_channel_init()
769 channel->dpll_input_mode_cnfg = DPLL2_INPUT_MODE_CNFG; in idt82p33_channel_init()
775 INIT_DELAYED_WORK(&channel->sync_tod_work, in idt82p33_channel_init()
777 channel->sync_tod_on = false; in idt82p33_channel_init()
778 channel->current_freq_ppb = 0; in idt82p33_channel_init()
796 struct idt82p33_channel *channel; in idt82p33_enable_channel() local
802 channel = &idt82p33->channel[index]; in idt82p33_enable_channel()
804 err = idt82p33_channel_init(channel, index); in idt82p33_enable_channel()
808 channel->idt82p33 = idt82p33; in idt82p33_enable_channel()
810 idt82p33_caps_init(&channel->caps); in idt82p33_enable_channel()
811 snprintf(channel->caps.name, sizeof(channel->caps.name), in idt82p33_enable_channel()
813 channel->caps.n_per_out = hweight8(channel->output_mask); in idt82p33_enable_channel()
815 err = idt82p33_dpll_set_mode(channel, PLL_MODE_DCO); in idt82p33_enable_channel()
819 err = idt82p33_enable_tod(channel); in idt82p33_enable_channel()
823 channel->ptp_clock = ptp_clock_register(&channel->caps, NULL); in idt82p33_enable_channel()
825 if (IS_ERR(channel->ptp_clock)) { in idt82p33_enable_channel()
826 err = PTR_ERR(channel->ptp_clock); in idt82p33_enable_channel()
827 channel->ptp_clock = NULL; in idt82p33_enable_channel()
831 if (!channel->ptp_clock) in idt82p33_enable_channel()
835 index, channel->ptp_clock->index); in idt82p33_enable_channel()
923 idt82p33->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0; in idt82p33_probe()
924 idt82p33->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1; in idt82p33_probe()