Lines Matching refs:idt82p33
80 static int idt82p33_xfer(struct idt82p33 *idt82p33, in idt82p33_xfer() argument
86 struct i2c_client *client = idt82p33->client; in idt82p33_xfer()
112 static int idt82p33_page_offset(struct idt82p33 *idt82p33, unsigned char val) in idt82p33_page_offset() argument
116 if (idt82p33->page_offset == val) in idt82p33_page_offset()
119 err = idt82p33_xfer(idt82p33, PAGE_ADDR, &val, sizeof(val), 1); in idt82p33_page_offset()
121 dev_err(&idt82p33->client->dev, in idt82p33_page_offset()
124 idt82p33->page_offset = val; in idt82p33_page_offset()
129 static int idt82p33_rdwr(struct idt82p33 *idt82p33, unsigned int regaddr, in idt82p33_rdwr() argument
138 err = idt82p33_page_offset(idt82p33, page); in idt82p33_rdwr()
142 err = idt82p33_xfer(idt82p33, offset, buf, count, write); in idt82p33_rdwr()
147 static int idt82p33_read(struct idt82p33 *idt82p33, unsigned int regaddr, in idt82p33_read() argument
150 return idt82p33_rdwr(idt82p33, regaddr, buf, count, false); in idt82p33_read()
153 static int idt82p33_write(struct idt82p33 *idt82p33, unsigned int regaddr, in idt82p33_write() argument
156 return idt82p33_rdwr(idt82p33, regaddr, buf, count, true); in idt82p33_write()
162 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_dpll_set_mode() local
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()
191 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_gettime() local
200 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in _idt82p33_gettime()
206 if (idt82p33->calculate_overhead_flag) in _idt82p33_gettime()
207 idt82p33->start_time = ktime_get_raw(); in _idt82p33_gettime()
209 err = idt82p33_read(idt82p33, channel->dpll_tod_sts, buf, sizeof(buf)); in _idt82p33_gettime()
228 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_settime() local
239 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in _idt82p33_settime()
245 if (idt82p33->calculate_overhead_flag) { in _idt82p33_settime()
247 - ktime_to_ns(idt82p33->start_time); in _idt82p33_settime()
251 idt82p33->calculate_overhead_flag = 0; in _idt82p33_settime()
260 err = idt82p33_write(idt82p33, channel->dpll_tod_cnfg + i, in _idt82p33_settime()
271 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_adjtime() local
276 idt82p33->calculate_overhead_flag = 1; in _idt82p33_adjtime()
284 now_ns += delta_ns + idt82p33->tod_write_overhead_ns; in _idt82p33_adjtime()
295 struct idt82p33 *idt82p33 = channel->idt82p33; in _idt82p33_adjfine() local
338 err = idt82p33_write(idt82p33, channel->dpll_freq_cnfg, in _idt82p33_adjfine()
350 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_one_byte_write_overhead() local
366 err = idt82p33_write(idt82p33, channel->dpll_tod_trigger, in idt82p33_measure_one_byte_write_overhead()
385 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_tod_write_9_byte_overhead() local
393 idt82p33->tod_write_overhead_ns = 0; in idt82p33_measure_tod_write_9_byte_overhead()
401 err = idt82p33_write(idt82p33, in idt82p33_measure_tod_write_9_byte_overhead()
413 idt82p33->tod_write_overhead_ns = div_s64(total_ns, in idt82p33_measure_tod_write_9_byte_overhead()
444 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_measure_tod_write_overhead() local
447 idt82p33->tod_write_overhead_ns = 0; in idt82p33_measure_tod_write_overhead()
467 idt82p33->tod_write_overhead_ns -= trailing_overhead_ns; in idt82p33_measure_tod_write_overhead()
472 static int idt82p33_check_and_set_masks(struct idt82p33 *idt82p33, in idt82p33_check_and_set_masks() argument
481 dev_err(&idt82p33->client->dev, in idt82p33_check_and_set_masks()
485 idt82p33->pll_mask = val; in idt82p33_check_and_set_masks()
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()
498 static void idt82p33_display_masks(struct idt82p33 *idt82p33) in idt82p33_display_masks() argument
502 dev_info(&idt82p33->client->dev, in idt82p33_display_masks()
503 "pllmask = 0x%02x\n", idt82p33->pll_mask); in idt82p33_display_masks()
508 if (mask & idt82p33->pll_mask) in idt82p33_display_masks()
509 dev_info(&idt82p33->client->dev, in idt82p33_display_masks()
511 i, idt82p33->channel[i].output_mask); in idt82p33_display_masks()
517 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_sync_tod() local
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()
558 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_sync_tod_work_handler() local
560 mutex_lock(&idt82p33->reg_lock); in idt82p33_sync_tod_work_handler()
564 mutex_unlock(&idt82p33->reg_lock); in idt82p33_sync_tod_work_handler()
569 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_pps_enable() local
578 err = idt82p33_read(idt82p33, OUT_MUX_CNFG(outn), in idt82p33_pps_enable()
588 err = idt82p33_write(idt82p33, OUT_MUX_CNFG(outn), in idt82p33_pps_enable()
603 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_enable_tod() local
609 err = idt82p33_write(idt82p33, channel->dpll_input_mode_cnfg, in idt82p33_enable_tod()
632 static void idt82p33_ptp_clock_unregister_all(struct idt82p33 *idt82p33) in idt82p33_ptp_clock_unregister_all() argument
639 channel = &idt82p33->channel[i]; in idt82p33_ptp_clock_unregister_all()
653 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_enable() local
658 mutex_lock(&idt82p33->reg_lock); in idt82p33_enable()
672 mutex_unlock(&idt82p33->reg_lock); in idt82p33_enable()
681 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_adjfine() local
684 mutex_lock(&idt82p33->reg_lock); in idt82p33_adjfine()
686 mutex_unlock(&idt82p33->reg_lock); in idt82p33_adjfine()
695 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_adjtime() local
698 mutex_lock(&idt82p33->reg_lock); in idt82p33_adjtime()
701 mutex_unlock(&idt82p33->reg_lock); in idt82p33_adjtime()
708 mutex_unlock(&idt82p33->reg_lock); in idt82p33_adjtime()
714 mutex_unlock(&idt82p33->reg_lock); in idt82p33_adjtime()
723 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_gettime() local
726 mutex_lock(&idt82p33->reg_lock); in idt82p33_gettime()
728 mutex_unlock(&idt82p33->reg_lock); in idt82p33_gettime()
738 struct idt82p33 *idt82p33 = channel->idt82p33; in idt82p33_settime() local
741 mutex_lock(&idt82p33->reg_lock); in idt82p33_settime()
743 mutex_unlock(&idt82p33->reg_lock); in idt82p33_settime()
794 static int idt82p33_enable_channel(struct idt82p33 *idt82p33, u32 index) in idt82p33_enable_channel() argument
802 channel = &idt82p33->channel[index]; in idt82p33_enable_channel()
808 channel->idt82p33 = idt82p33; in idt82p33_enable_channel()
834 dev_info(&idt82p33->client->dev, "PLL%d registered as ptp%d\n", in idt82p33_enable_channel()
840 static int idt82p33_load_firmware(struct idt82p33 *idt82p33) in idt82p33_load_firmware() argument
848 dev_dbg(&idt82p33->client->dev, in idt82p33_load_firmware()
851 err = request_firmware(&fw, FW_FILENAME, &idt82p33->client->dev); in idt82p33_load_firmware()
856 dev_dbg(&idt82p33->client->dev, "firmware size %zu bytes\n", fw->size); in idt82p33_load_firmware()
863 dev_err(&idt82p33->client->dev, in idt82p33_load_firmware()
873 err = idt82p33_check_and_set_masks(idt82p33, page, in idt82p33_load_firmware()
887 err = idt82p33_write(idt82p33, _ADDR(page, loaddr), in idt82p33_load_firmware()
895 idt82p33_display_masks(idt82p33); in idt82p33_load_firmware()
905 struct idt82p33 *idt82p33; in idt82p33_probe() local
911 idt82p33 = devm_kzalloc(&client->dev, in idt82p33_probe()
912 sizeof(struct idt82p33), GFP_KERNEL); in idt82p33_probe()
913 if (!idt82p33) in idt82p33_probe()
916 mutex_init(&idt82p33->reg_lock); in idt82p33_probe()
918 idt82p33->client = client; in idt82p33_probe()
919 idt82p33->page_offset = 0xff; in idt82p33_probe()
920 idt82p33->tod_write_overhead_ns = 0; in idt82p33_probe()
921 idt82p33->calculate_overhead_flag = 0; in idt82p33_probe()
922 idt82p33->pll_mask = DEFAULT_PLL_MASK; in idt82p33_probe()
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()
926 mutex_lock(&idt82p33->reg_lock); in idt82p33_probe()
928 err = idt82p33_load_firmware(idt82p33); in idt82p33_probe()
931 dev_warn(&idt82p33->client->dev, in idt82p33_probe()
934 if (idt82p33->pll_mask) { in idt82p33_probe()
936 if (idt82p33->pll_mask & (1 << i)) { in idt82p33_probe()
937 err = idt82p33_enable_channel(idt82p33, i); in idt82p33_probe()
943 dev_err(&idt82p33->client->dev, in idt82p33_probe()
948 mutex_unlock(&idt82p33->reg_lock); in idt82p33_probe()
951 idt82p33_ptp_clock_unregister_all(idt82p33); in idt82p33_probe()
955 i2c_set_clientdata(client, idt82p33); in idt82p33_probe()
962 struct idt82p33 *idt82p33 = i2c_get_clientdata(client); in idt82p33_remove() local
964 idt82p33_ptp_clock_unregister_all(idt82p33); in idt82p33_remove()
965 mutex_destroy(&idt82p33->reg_lock); in idt82p33_remove()