xref: /openbmc/linux/drivers/ptp/ptp_clockmatrix.c (revision 2d68bb26)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * PTP hardware clock driver for the IDT ClockMatrix(TM) family of timing and
4  * synchronization devices.
5  *
6  * Copyright (C) 2019 Integrated Device Technology, Inc., a Renesas Company.
7  */
8 #include <linux/firmware.h>
9 #include <linux/i2c.h>
10 #include <linux/module.h>
11 #include <linux/ptp_clock_kernel.h>
12 #include <linux/delay.h>
13 #include <linux/kernel.h>
14 #include <linux/timekeeping.h>
15 
16 #include "ptp_private.h"
17 #include "ptp_clockmatrix.h"
18 
19 MODULE_DESCRIPTION("Driver for IDT ClockMatrix(TM) family");
20 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>");
21 MODULE_AUTHOR("IDT support-1588 <IDT-support-1588@lm.renesas.com>");
22 MODULE_VERSION("1.0");
23 MODULE_LICENSE("GPL");
24 
25 #define SETTIME_CORRECTION (0)
26 
27 static int char_array_to_timespec(u8 *buf,
28 				  u8 count,
29 				  struct timespec64 *ts)
30 {
31 	u8 i;
32 	u64 nsec;
33 	time64_t sec;
34 
35 	if (count < TOD_BYTE_COUNT)
36 		return 1;
37 
38 	/* Sub-nanoseconds are in buf[0]. */
39 	nsec = buf[4];
40 	for (i = 0; i < 3; i++) {
41 		nsec <<= 8;
42 		nsec |= buf[3 - i];
43 	}
44 
45 	sec = buf[10];
46 	for (i = 0; i < 5; i++) {
47 		sec <<= 8;
48 		sec |= buf[9 - i];
49 	}
50 
51 	ts->tv_sec = sec;
52 	ts->tv_nsec = nsec;
53 
54 	return 0;
55 }
56 
57 static int timespec_to_char_array(struct timespec64 const *ts,
58 				  u8 *buf,
59 				  u8 count)
60 {
61 	u8 i;
62 	s32 nsec;
63 	time64_t sec;
64 
65 	if (count < TOD_BYTE_COUNT)
66 		return 1;
67 
68 	nsec = ts->tv_nsec;
69 	sec = ts->tv_sec;
70 
71 	/* Sub-nanoseconds are in buf[0]. */
72 	buf[0] = 0;
73 	for (i = 1; i < 5; i++) {
74 		buf[i] = nsec & 0xff;
75 		nsec >>= 8;
76 	}
77 
78 	for (i = 5; i < TOD_BYTE_COUNT; i++) {
79 
80 		buf[i] = sec & 0xff;
81 		sec >>= 8;
82 	}
83 
84 	return 0;
85 }
86 
87 static int idtcm_xfer(struct idtcm *idtcm,
88 		      u8 regaddr,
89 		      u8 *buf,
90 		      u16 count,
91 		      bool write)
92 {
93 	struct i2c_client *client = idtcm->client;
94 	struct i2c_msg msg[2];
95 	int cnt;
96 
97 	msg[0].addr = client->addr;
98 	msg[0].flags = 0;
99 	msg[0].len = 1;
100 	msg[0].buf = &regaddr;
101 
102 	msg[1].addr = client->addr;
103 	msg[1].flags = write ? 0 : I2C_M_RD;
104 	msg[1].len = count;
105 	msg[1].buf = buf;
106 
107 	cnt = i2c_transfer(client->adapter, msg, 2);
108 
109 	if (cnt < 0) {
110 		dev_err(&client->dev, "i2c_transfer returned %d\n", cnt);
111 		return cnt;
112 	} else if (cnt != 2) {
113 		dev_err(&client->dev,
114 			"i2c_transfer sent only %d of %d messages\n", cnt, 2);
115 		return -EIO;
116 	}
117 
118 	return 0;
119 }
120 
121 static int idtcm_page_offset(struct idtcm *idtcm, u8 val)
122 {
123 	u8 buf[4];
124 	int err;
125 
126 	if (idtcm->page_offset == val)
127 		return 0;
128 
129 	buf[0] = 0x0;
130 	buf[1] = val;
131 	buf[2] = 0x10;
132 	buf[3] = 0x20;
133 
134 	err = idtcm_xfer(idtcm, PAGE_ADDR, buf, sizeof(buf), 1);
135 
136 	if (err)
137 		dev_err(&idtcm->client->dev, "failed to set page offset\n");
138 	else
139 		idtcm->page_offset = val;
140 
141 	return err;
142 }
143 
144 static int _idtcm_rdwr(struct idtcm *idtcm,
145 		       u16 regaddr,
146 		       u8 *buf,
147 		       u16 count,
148 		       bool write)
149 {
150 	u8 hi;
151 	u8 lo;
152 	int err;
153 
154 	hi = (regaddr >> 8) & 0xff;
155 	lo = regaddr & 0xff;
156 
157 	err = idtcm_page_offset(idtcm, hi);
158 
159 	if (err)
160 		goto out;
161 
162 	err = idtcm_xfer(idtcm, lo, buf, count, write);
163 out:
164 	return err;
165 }
166 
167 static int idtcm_read(struct idtcm *idtcm,
168 		      u16 module,
169 		      u16 regaddr,
170 		      u8 *buf,
171 		      u16 count)
172 {
173 	return _idtcm_rdwr(idtcm, module + regaddr, buf, count, false);
174 }
175 
176 static int idtcm_write(struct idtcm *idtcm,
177 		       u16 module,
178 		       u16 regaddr,
179 		       u8 *buf,
180 		       u16 count)
181 {
182 	return _idtcm_rdwr(idtcm, module + regaddr, buf, count, true);
183 }
184 
185 static int _idtcm_gettime(struct idtcm_channel *channel,
186 			  struct timespec64 *ts)
187 {
188 	struct idtcm *idtcm = channel->idtcm;
189 	u8 buf[TOD_BYTE_COUNT];
190 	u8 trigger;
191 	int err;
192 
193 	err = idtcm_read(idtcm, channel->tod_read_primary,
194 			 TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
195 	if (err)
196 		return err;
197 
198 	trigger &= ~(TOD_READ_TRIGGER_MASK << TOD_READ_TRIGGER_SHIFT);
199 	trigger |= (1 << TOD_READ_TRIGGER_SHIFT);
200 	trigger |= TOD_READ_TRIGGER_MODE;
201 
202 	err = idtcm_write(idtcm, channel->tod_read_primary,
203 			  TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
204 
205 	if (err)
206 		return err;
207 
208 	if (idtcm->calculate_overhead_flag)
209 		idtcm->start_time = ktime_get_raw();
210 
211 	err = idtcm_read(idtcm, channel->tod_read_primary,
212 			 TOD_READ_PRIMARY, buf, sizeof(buf));
213 
214 	if (err)
215 		return err;
216 
217 	err = char_array_to_timespec(buf, sizeof(buf), ts);
218 
219 	return err;
220 }
221 
222 static int _sync_pll_output(struct idtcm *idtcm,
223 			    u8 pll,
224 			    u8 sync_src,
225 			    u8 qn,
226 			    u8 qn_plus_1)
227 {
228 	int err;
229 	u8 val;
230 	u16 sync_ctrl0;
231 	u16 sync_ctrl1;
232 
233 	if ((qn == 0) && (qn_plus_1 == 0))
234 		return 0;
235 
236 	switch (pll) {
237 	case 0:
238 		sync_ctrl0 = HW_Q0_Q1_CH_SYNC_CTRL_0;
239 		sync_ctrl1 = HW_Q0_Q1_CH_SYNC_CTRL_1;
240 		break;
241 	case 1:
242 		sync_ctrl0 = HW_Q2_Q3_CH_SYNC_CTRL_0;
243 		sync_ctrl1 = HW_Q2_Q3_CH_SYNC_CTRL_1;
244 		break;
245 	case 2:
246 		sync_ctrl0 = HW_Q4_Q5_CH_SYNC_CTRL_0;
247 		sync_ctrl1 = HW_Q4_Q5_CH_SYNC_CTRL_1;
248 		break;
249 	case 3:
250 		sync_ctrl0 = HW_Q6_Q7_CH_SYNC_CTRL_0;
251 		sync_ctrl1 = HW_Q6_Q7_CH_SYNC_CTRL_1;
252 		break;
253 	case 4:
254 		sync_ctrl0 = HW_Q8_CH_SYNC_CTRL_0;
255 		sync_ctrl1 = HW_Q8_CH_SYNC_CTRL_1;
256 		break;
257 	case 5:
258 		sync_ctrl0 = HW_Q9_CH_SYNC_CTRL_0;
259 		sync_ctrl1 = HW_Q9_CH_SYNC_CTRL_1;
260 		break;
261 	case 6:
262 		sync_ctrl0 = HW_Q10_CH_SYNC_CTRL_0;
263 		sync_ctrl1 = HW_Q10_CH_SYNC_CTRL_1;
264 		break;
265 	case 7:
266 		sync_ctrl0 = HW_Q11_CH_SYNC_CTRL_0;
267 		sync_ctrl1 = HW_Q11_CH_SYNC_CTRL_1;
268 		break;
269 	default:
270 		return -EINVAL;
271 	}
272 
273 	val = SYNCTRL1_MASTER_SYNC_RST;
274 
275 	/* Place master sync in reset */
276 	err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
277 	if (err)
278 		return err;
279 
280 	err = idtcm_write(idtcm, 0, sync_ctrl0, &sync_src, sizeof(sync_src));
281 	if (err)
282 		return err;
283 
284 	/* Set sync trigger mask */
285 	val |= SYNCTRL1_FBDIV_FRAME_SYNC_TRIG | SYNCTRL1_FBDIV_SYNC_TRIG;
286 
287 	if (qn)
288 		val |= SYNCTRL1_Q0_DIV_SYNC_TRIG;
289 
290 	if (qn_plus_1)
291 		val |= SYNCTRL1_Q1_DIV_SYNC_TRIG;
292 
293 	err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
294 	if (err)
295 		return err;
296 
297 	/* Place master sync out of reset */
298 	val &= ~(SYNCTRL1_MASTER_SYNC_RST);
299 	err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
300 
301 	return err;
302 }
303 
304 static int idtcm_sync_pps_output(struct idtcm_channel *channel)
305 {
306 	struct idtcm *idtcm = channel->idtcm;
307 
308 	u8 pll;
309 	u8 sync_src;
310 	u8 qn;
311 	u8 qn_plus_1;
312 	int err = 0;
313 
314 	u16 output_mask = channel->output_mask;
315 
316 	switch (channel->dpll_n) {
317 	case DPLL_0:
318 		sync_src = SYNC_SOURCE_DPLL0_TOD_PPS;
319 		break;
320 	case DPLL_1:
321 		sync_src = SYNC_SOURCE_DPLL1_TOD_PPS;
322 		break;
323 	case DPLL_2:
324 		sync_src = SYNC_SOURCE_DPLL2_TOD_PPS;
325 		break;
326 	case DPLL_3:
327 		sync_src = SYNC_SOURCE_DPLL3_TOD_PPS;
328 		break;
329 	default:
330 		return -EINVAL;
331 	}
332 
333 	for (pll = 0; pll < 8; pll++) {
334 
335 		qn = output_mask & 0x1;
336 		output_mask = output_mask >> 1;
337 
338 		if (pll < 4) {
339 			/* First 4 pll has 2 outputs */
340 			qn_plus_1 = output_mask & 0x1;
341 			output_mask = output_mask >> 1;
342 		} else {
343 			qn_plus_1 = 0;
344 		}
345 
346 		if ((qn != 0) || (qn_plus_1 != 0))
347 			err = _sync_pll_output(idtcm, pll, sync_src, qn,
348 					       qn_plus_1);
349 
350 		if (err)
351 			return err;
352 	}
353 
354 	return err;
355 }
356 
357 static int _idtcm_set_dpll_tod(struct idtcm_channel *channel,
358 			       struct timespec64 const *ts,
359 			       enum hw_tod_write_trig_sel wr_trig)
360 {
361 	struct idtcm *idtcm = channel->idtcm;
362 
363 	u8 buf[TOD_BYTE_COUNT];
364 	u8 cmd;
365 	int err;
366 	struct timespec64 local_ts = *ts;
367 	s64 total_overhead_ns;
368 
369 	/* Configure HW TOD write trigger. */
370 	err = idtcm_read(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
371 			 &cmd, sizeof(cmd));
372 
373 	if (err)
374 		return err;
375 
376 	cmd &= ~(0x0f);
377 	cmd |= wr_trig | 0x08;
378 
379 	err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
380 			  &cmd, sizeof(cmd));
381 
382 	if (err)
383 		return err;
384 
385 	if (wr_trig  != HW_TOD_WR_TRIG_SEL_MSB) {
386 
387 		err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
388 
389 		if (err)
390 			return err;
391 
392 		err = idtcm_write(idtcm, channel->hw_dpll_n,
393 				  HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
394 
395 		if (err)
396 			return err;
397 	}
398 
399 	/* ARM HW TOD write trigger. */
400 	cmd &= ~(0x08);
401 
402 	err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
403 			  &cmd, sizeof(cmd));
404 
405 	if (wr_trig == HW_TOD_WR_TRIG_SEL_MSB) {
406 
407 		if (idtcm->calculate_overhead_flag) {
408 			total_overhead_ns =  ktime_to_ns(ktime_get_raw()
409 							 - idtcm->start_time)
410 					     + idtcm->tod_write_overhead_ns
411 					     + SETTIME_CORRECTION;
412 
413 			timespec64_add_ns(&local_ts, total_overhead_ns);
414 
415 			idtcm->calculate_overhead_flag = 0;
416 		}
417 
418 		err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
419 
420 		if (err)
421 			return err;
422 
423 		err = idtcm_write(idtcm, channel->hw_dpll_n,
424 				  HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
425 	}
426 
427 	return err;
428 }
429 
430 static int _idtcm_settime(struct idtcm_channel *channel,
431 			  struct timespec64 const *ts,
432 			  enum hw_tod_write_trig_sel wr_trig)
433 {
434 	struct idtcm *idtcm = channel->idtcm;
435 	s32 retval;
436 	int err;
437 	int i;
438 	u8 trig_sel;
439 
440 	err = _idtcm_set_dpll_tod(channel, ts, wr_trig);
441 
442 	if (err)
443 		return err;
444 
445 	/* Wait for the operation to complete. */
446 	for (i = 0; i < 10000; i++) {
447 		err = idtcm_read(idtcm, channel->hw_dpll_n,
448 				 HW_DPLL_TOD_CTRL_1, &trig_sel,
449 				 sizeof(trig_sel));
450 
451 		if (err)
452 			return err;
453 
454 		if (trig_sel == 0x4a)
455 			break;
456 
457 		err = 1;
458 	}
459 
460 	if (err)
461 		return err;
462 
463 	retval = idtcm_sync_pps_output(channel);
464 
465 	return retval;
466 }
467 
468 static int idtcm_set_phase_pull_in_offset(struct idtcm_channel *channel,
469 					  s32 offset_ns)
470 {
471 	int err;
472 	int i;
473 	struct idtcm *idtcm = channel->idtcm;
474 
475 	u8 buf[4];
476 
477 	for (i = 0; i < 4; i++) {
478 		buf[i] = 0xff & (offset_ns);
479 		offset_ns >>= 8;
480 	}
481 
482 	err = idtcm_write(idtcm, channel->dpll_phase_pull_in, PULL_IN_OFFSET,
483 			  buf, sizeof(buf));
484 
485 	return err;
486 }
487 
488 static int idtcm_set_phase_pull_in_slope_limit(struct idtcm_channel *channel,
489 					       u32 max_ffo_ppb)
490 {
491 	int err;
492 	u8 i;
493 	struct idtcm *idtcm = channel->idtcm;
494 
495 	u8 buf[3];
496 
497 	if (max_ffo_ppb & 0xff000000)
498 		max_ffo_ppb = 0;
499 
500 	for (i = 0; i < 3; i++) {
501 		buf[i] = 0xff & (max_ffo_ppb);
502 		max_ffo_ppb >>= 8;
503 	}
504 
505 	err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
506 			  PULL_IN_SLOPE_LIMIT, buf, sizeof(buf));
507 
508 	return err;
509 }
510 
511 static int idtcm_start_phase_pull_in(struct idtcm_channel *channel)
512 {
513 	int err;
514 	struct idtcm *idtcm = channel->idtcm;
515 
516 	u8 buf;
517 
518 	err = idtcm_read(idtcm, channel->dpll_phase_pull_in, PULL_IN_CTRL,
519 			 &buf, sizeof(buf));
520 
521 	if (err)
522 		return err;
523 
524 	if (buf == 0) {
525 		buf = 0x01;
526 		err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
527 				  PULL_IN_CTRL, &buf, sizeof(buf));
528 	} else {
529 		err = -EBUSY;
530 	}
531 
532 	return err;
533 }
534 
535 static int idtcm_do_phase_pull_in(struct idtcm_channel *channel,
536 				  s32 offset_ns,
537 				  u32 max_ffo_ppb)
538 {
539 	int err;
540 
541 	err = idtcm_set_phase_pull_in_offset(channel, -offset_ns);
542 
543 	if (err)
544 		return err;
545 
546 	err = idtcm_set_phase_pull_in_slope_limit(channel, max_ffo_ppb);
547 
548 	if (err)
549 		return err;
550 
551 	err = idtcm_start_phase_pull_in(channel);
552 
553 	return err;
554 }
555 
556 static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta)
557 {
558 	int err;
559 	struct idtcm *idtcm = channel->idtcm;
560 	struct timespec64 ts;
561 	s64 now;
562 
563 	if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) {
564 		err = idtcm_do_phase_pull_in(channel, delta, 0);
565 	} else {
566 		idtcm->calculate_overhead_flag = 1;
567 
568 		err = _idtcm_gettime(channel, &ts);
569 
570 		if (err)
571 			return err;
572 
573 		now = timespec64_to_ns(&ts);
574 		now += delta;
575 
576 		ts = ns_to_timespec64(now);
577 
578 		err = _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
579 	}
580 
581 	return err;
582 }
583 
584 static int idtcm_state_machine_reset(struct idtcm *idtcm)
585 {
586 	int err;
587 	u8 byte = SM_RESET_CMD;
588 
589 	err = idtcm_write(idtcm, RESET_CTRL, SM_RESET, &byte, sizeof(byte));
590 
591 	if (!err)
592 		msleep_interruptible(POST_SM_RESET_DELAY_MS);
593 
594 	return err;
595 }
596 
597 static int idtcm_read_hw_rev_id(struct idtcm *idtcm, u8 *hw_rev_id)
598 {
599 	return idtcm_read(idtcm,
600 			  GENERAL_STATUS,
601 			  HW_REV_ID,
602 			  hw_rev_id,
603 			  sizeof(u8));
604 }
605 
606 static int idtcm_read_bond_id(struct idtcm *idtcm, u8 *bond_id)
607 {
608 	return idtcm_read(idtcm,
609 			  GENERAL_STATUS,
610 			  BOND_ID,
611 			  bond_id,
612 			  sizeof(u8));
613 }
614 
615 static int idtcm_read_hw_csr_id(struct idtcm *idtcm, u16 *hw_csr_id)
616 {
617 	int err;
618 	u8 buf[2] = {0};
619 
620 	err = idtcm_read(idtcm, GENERAL_STATUS, HW_CSR_ID, buf, sizeof(buf));
621 
622 	*hw_csr_id = (buf[1] << 8) | buf[0];
623 
624 	return err;
625 }
626 
627 static int idtcm_read_hw_irq_id(struct idtcm *idtcm, u16 *hw_irq_id)
628 {
629 	int err;
630 	u8 buf[2] = {0};
631 
632 	err = idtcm_read(idtcm, GENERAL_STATUS, HW_IRQ_ID, buf, sizeof(buf));
633 
634 	*hw_irq_id = (buf[1] << 8) | buf[0];
635 
636 	return err;
637 }
638 
639 static int idtcm_read_product_id(struct idtcm *idtcm, u16 *product_id)
640 {
641 	int err;
642 	u8 buf[2] = {0};
643 
644 	err = idtcm_read(idtcm, GENERAL_STATUS, PRODUCT_ID, buf, sizeof(buf));
645 
646 	*product_id = (buf[1] << 8) | buf[0];
647 
648 	return err;
649 }
650 
651 static int idtcm_read_major_release(struct idtcm *idtcm, u8 *major)
652 {
653 	int err;
654 	u8 buf = 0;
655 
656 	err = idtcm_read(idtcm, GENERAL_STATUS, MAJ_REL, &buf, sizeof(buf));
657 
658 	*major = buf >> 1;
659 
660 	return err;
661 }
662 
663 static int idtcm_read_minor_release(struct idtcm *idtcm, u8 *minor)
664 {
665 	return idtcm_read(idtcm, GENERAL_STATUS, MIN_REL, minor, sizeof(u8));
666 }
667 
668 static int idtcm_read_hotfix_release(struct idtcm *idtcm, u8 *hotfix)
669 {
670 	return idtcm_read(idtcm,
671 			  GENERAL_STATUS,
672 			  HOTFIX_REL,
673 			  hotfix,
674 			  sizeof(u8));
675 }
676 
677 static int idtcm_read_pipeline(struct idtcm *idtcm, u32 *pipeline)
678 {
679 	int err;
680 	u8 buf[4] = {0};
681 
682 	err = idtcm_read(idtcm,
683 			 GENERAL_STATUS,
684 			 PIPELINE_ID,
685 			 &buf[0],
686 			 sizeof(buf));
687 
688 	*pipeline = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
689 
690 	return err;
691 }
692 
693 static int process_pll_mask(struct idtcm *idtcm, u32 addr, u8 val, u8 *mask)
694 {
695 	int err = 0;
696 
697 	if (addr == PLL_MASK_ADDR) {
698 		if ((val & 0xf0) || !(val & 0xf)) {
699 			dev_err(&idtcm->client->dev,
700 				"Invalid PLL mask 0x%hhx\n", val);
701 			err = -EINVAL;
702 		}
703 		*mask = val;
704 	}
705 
706 	return err;
707 }
708 
709 static int set_pll_output_mask(struct idtcm *idtcm, u16 addr, u8 val)
710 {
711 	int err = 0;
712 
713 	switch (addr) {
714 	case OUTPUT_MASK_PLL0_ADDR:
715 		SET_U16_LSB(idtcm->channel[0].output_mask, val);
716 		break;
717 	case OUTPUT_MASK_PLL0_ADDR + 1:
718 		SET_U16_MSB(idtcm->channel[0].output_mask, val);
719 		break;
720 	case OUTPUT_MASK_PLL1_ADDR:
721 		SET_U16_LSB(idtcm->channel[1].output_mask, val);
722 		break;
723 	case OUTPUT_MASK_PLL1_ADDR + 1:
724 		SET_U16_MSB(idtcm->channel[1].output_mask, val);
725 		break;
726 	case OUTPUT_MASK_PLL2_ADDR:
727 		SET_U16_LSB(idtcm->channel[2].output_mask, val);
728 		break;
729 	case OUTPUT_MASK_PLL2_ADDR + 1:
730 		SET_U16_MSB(idtcm->channel[2].output_mask, val);
731 		break;
732 	case OUTPUT_MASK_PLL3_ADDR:
733 		SET_U16_LSB(idtcm->channel[3].output_mask, val);
734 		break;
735 	case OUTPUT_MASK_PLL3_ADDR + 1:
736 		SET_U16_MSB(idtcm->channel[3].output_mask, val);
737 		break;
738 	default:
739 		err = -EINVAL;
740 		break;
741 	}
742 
743 	return err;
744 }
745 
746 static int check_and_set_masks(struct idtcm *idtcm,
747 			       u16 regaddr,
748 			       u8 val)
749 {
750 	int err = 0;
751 
752 	if (set_pll_output_mask(idtcm, regaddr, val)) {
753 		/* Not an output mask, check for pll mask */
754 		err = process_pll_mask(idtcm, regaddr, val, &idtcm->pll_mask);
755 	}
756 
757 	return err;
758 }
759 
760 static void display_pll_and_output_masks(struct idtcm *idtcm)
761 {
762 	u8 i;
763 	u8 mask;
764 
765 	dev_dbg(&idtcm->client->dev, "pllmask = 0x%02x\n", idtcm->pll_mask);
766 
767 	for (i = 0; i < MAX_PHC_PLL; i++) {
768 		mask = 1 << i;
769 
770 		if (mask & idtcm->pll_mask)
771 			dev_dbg(&idtcm->client->dev,
772 				"PLL%d output_mask = 0x%04x\n",
773 				i, idtcm->channel[i].output_mask);
774 	}
775 }
776 
777 static int idtcm_load_firmware(struct idtcm *idtcm,
778 			       struct device *dev)
779 {
780 	const struct firmware *fw;
781 	struct idtcm_fwrc *rec;
782 	u32 regaddr;
783 	int err;
784 	s32 len;
785 	u8 val;
786 	u8 loaddr;
787 
788 	dev_dbg(&idtcm->client->dev, "requesting firmware '%s'\n", FW_FILENAME);
789 
790 	err = request_firmware(&fw, FW_FILENAME, dev);
791 
792 	if (err)
793 		return err;
794 
795 	dev_dbg(&idtcm->client->dev, "firmware size %zu bytes\n", fw->size);
796 
797 	rec = (struct idtcm_fwrc *) fw->data;
798 
799 	if (fw->size > 0)
800 		idtcm_state_machine_reset(idtcm);
801 
802 	for (len = fw->size; len > 0; len -= sizeof(*rec)) {
803 
804 		if (rec->reserved) {
805 			dev_err(&idtcm->client->dev,
806 				"bad firmware, reserved field non-zero\n");
807 			err = -EINVAL;
808 		} else {
809 			regaddr = rec->hiaddr << 8;
810 			regaddr |= rec->loaddr;
811 
812 			val = rec->value;
813 			loaddr = rec->loaddr;
814 
815 			rec++;
816 
817 			err = check_and_set_masks(idtcm, regaddr, val);
818 		}
819 
820 		if (err == 0) {
821 			/* Top (status registers) and bottom are read-only */
822 			if ((regaddr < GPIO_USER_CONTROL)
823 			    || (regaddr >= SCRATCH))
824 				continue;
825 
826 			/* Page size 128, last 4 bytes of page skipped */
827 			if (((loaddr > 0x7b) && (loaddr <= 0x7f))
828 			     || ((loaddr > 0xfb) && (loaddr <= 0xff)))
829 				continue;
830 
831 			err = idtcm_write(idtcm, regaddr, 0, &val, sizeof(val));
832 		}
833 
834 		if (err)
835 			goto out;
836 	}
837 
838 	display_pll_and_output_masks(idtcm);
839 
840 out:
841 	release_firmware(fw);
842 	return err;
843 }
844 
845 static int idtcm_pps_enable(struct idtcm_channel *channel, bool enable)
846 {
847 	struct idtcm *idtcm = channel->idtcm;
848 	u32 module;
849 	u8 val;
850 	int err;
851 
852 	/*
853 	 * This assumes that the 1-PPS is on the second of the two
854 	 * output.  But is this always true?
855 	 */
856 	switch (channel->dpll_n) {
857 	case DPLL_0:
858 		module = OUTPUT_1;
859 		break;
860 	case DPLL_1:
861 		module = OUTPUT_3;
862 		break;
863 	case DPLL_2:
864 		module = OUTPUT_5;
865 		break;
866 	case DPLL_3:
867 		module = OUTPUT_7;
868 		break;
869 	default:
870 		return -EINVAL;
871 	}
872 
873 	err = idtcm_read(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
874 
875 	if (err)
876 		return err;
877 
878 	if (enable)
879 		val |= SQUELCH_DISABLE;
880 	else
881 		val &= ~SQUELCH_DISABLE;
882 
883 	err = idtcm_write(idtcm, module, OUT_CTRL_1, &val, sizeof(val));
884 
885 	if (err)
886 		return err;
887 
888 	return 0;
889 }
890 
891 static int idtcm_set_pll_mode(struct idtcm_channel *channel,
892 			      enum pll_mode pll_mode)
893 {
894 	struct idtcm *idtcm = channel->idtcm;
895 	int err;
896 	u8 dpll_mode;
897 
898 	err = idtcm_read(idtcm, channel->dpll_n, DPLL_MODE,
899 			 &dpll_mode, sizeof(dpll_mode));
900 	if (err)
901 		return err;
902 
903 	dpll_mode &= ~(PLL_MODE_MASK << PLL_MODE_SHIFT);
904 
905 	dpll_mode |= (pll_mode << PLL_MODE_SHIFT);
906 
907 	channel->pll_mode = pll_mode;
908 
909 	err = idtcm_write(idtcm, channel->dpll_n, DPLL_MODE,
910 			  &dpll_mode, sizeof(dpll_mode));
911 	if (err)
912 		return err;
913 
914 	return 0;
915 }
916 
917 /* PTP Hardware Clock interface */
918 
919 static int idtcm_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
920 {
921 	struct idtcm_channel *channel =
922 		container_of(ptp, struct idtcm_channel, caps);
923 	struct idtcm *idtcm = channel->idtcm;
924 	u8 i;
925 	bool neg_adj = 0;
926 	int err;
927 	u8 buf[6] = {0};
928 	s64 fcw;
929 
930 	if (channel->pll_mode  != PLL_MODE_WRITE_FREQUENCY) {
931 		err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
932 		if (err)
933 			return err;
934 	}
935 
936 	/*
937 	 * Frequency Control Word unit is: 1.11 * 10^-10 ppm
938 	 *
939 	 * adjfreq:
940 	 *       ppb * 10^9
941 	 * FCW = ----------
942 	 *          111
943 	 *
944 	 * adjfine:
945 	 *       ppm_16 * 5^12
946 	 * FCW = -------------
947 	 *         111 * 2^4
948 	 */
949 	if (ppb < 0) {
950 		neg_adj = 1;
951 		ppb = -ppb;
952 	}
953 
954 	/* 2 ^ -53 = 1.1102230246251565404236316680908e-16 */
955 	fcw = ppb * 1000000000000ULL;
956 
957 	fcw = div_u64(fcw, 111022);
958 
959 	if (neg_adj)
960 		fcw = -fcw;
961 
962 	for (i = 0; i < 6; i++) {
963 		buf[i] = fcw & 0xff;
964 		fcw >>= 8;
965 	}
966 
967 	mutex_lock(&idtcm->reg_lock);
968 
969 	err = idtcm_write(idtcm, channel->dpll_freq, DPLL_WR_FREQ,
970 			  buf, sizeof(buf));
971 
972 	mutex_unlock(&idtcm->reg_lock);
973 	return err;
974 }
975 
976 static int idtcm_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
977 {
978 	struct idtcm_channel *channel =
979 		container_of(ptp, struct idtcm_channel, caps);
980 	struct idtcm *idtcm = channel->idtcm;
981 	int err;
982 
983 	mutex_lock(&idtcm->reg_lock);
984 
985 	err = _idtcm_gettime(channel, ts);
986 
987 	mutex_unlock(&idtcm->reg_lock);
988 
989 	return err;
990 }
991 
992 static int idtcm_settime(struct ptp_clock_info *ptp,
993 			 const struct timespec64 *ts)
994 {
995 	struct idtcm_channel *channel =
996 		container_of(ptp, struct idtcm_channel, caps);
997 	struct idtcm *idtcm = channel->idtcm;
998 	int err;
999 
1000 	mutex_lock(&idtcm->reg_lock);
1001 
1002 	err = _idtcm_settime(channel, ts, HW_TOD_WR_TRIG_SEL_MSB);
1003 
1004 	mutex_unlock(&idtcm->reg_lock);
1005 
1006 	return err;
1007 }
1008 
1009 static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta)
1010 {
1011 	struct idtcm_channel *channel =
1012 		container_of(ptp, struct idtcm_channel, caps);
1013 	struct idtcm *idtcm = channel->idtcm;
1014 	int err;
1015 
1016 	mutex_lock(&idtcm->reg_lock);
1017 
1018 	err = _idtcm_adjtime(channel, delta);
1019 
1020 	mutex_unlock(&idtcm->reg_lock);
1021 
1022 	return err;
1023 }
1024 
1025 static int idtcm_enable(struct ptp_clock_info *ptp,
1026 			struct ptp_clock_request *rq, int on)
1027 {
1028 	struct idtcm_channel *channel =
1029 		container_of(ptp, struct idtcm_channel, caps);
1030 
1031 	switch (rq->type) {
1032 	case PTP_CLK_REQ_PEROUT:
1033 		if (!on)
1034 			return idtcm_pps_enable(channel, false);
1035 
1036 		/* Only accept a 1-PPS aligned to the second. */
1037 		if (rq->perout.start.nsec || rq->perout.period.sec != 1 ||
1038 		    rq->perout.period.nsec)
1039 			return -ERANGE;
1040 
1041 		return idtcm_pps_enable(channel, true);
1042 	default:
1043 		break;
1044 	}
1045 
1046 	return -EOPNOTSUPP;
1047 }
1048 
1049 static int idtcm_enable_tod(struct idtcm_channel *channel)
1050 {
1051 	struct idtcm *idtcm = channel->idtcm;
1052 	struct timespec64 ts = {0, 0};
1053 	u8 cfg;
1054 	int err;
1055 
1056 	err = idtcm_pps_enable(channel, false);
1057 	if (err)
1058 		return err;
1059 
1060 	/*
1061 	 * Start the TOD clock ticking.
1062 	 */
1063 	err = idtcm_read(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1064 	if (err)
1065 		return err;
1066 
1067 	cfg |= TOD_ENABLE;
1068 
1069 	err = idtcm_write(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1070 	if (err)
1071 		return err;
1072 
1073 	return _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
1074 }
1075 
1076 static void idtcm_display_version_info(struct idtcm *idtcm)
1077 {
1078 	u8 major;
1079 	u8 minor;
1080 	u8 hotfix;
1081 	u32 pipeline;
1082 	u16 product_id;
1083 	u16 csr_id;
1084 	u16 irq_id;
1085 	u8 hw_rev_id;
1086 	u8 bond_id;
1087 
1088 	idtcm_read_major_release(idtcm, &major);
1089 	idtcm_read_minor_release(idtcm, &minor);
1090 	idtcm_read_hotfix_release(idtcm, &hotfix);
1091 	idtcm_read_pipeline(idtcm, &pipeline);
1092 
1093 	idtcm_read_product_id(idtcm, &product_id);
1094 	idtcm_read_hw_rev_id(idtcm, &hw_rev_id);
1095 	idtcm_read_bond_id(idtcm, &bond_id);
1096 	idtcm_read_hw_csr_id(idtcm, &csr_id);
1097 	idtcm_read_hw_irq_id(idtcm, &irq_id);
1098 
1099 	dev_info(&idtcm->client->dev, "Version:  %d.%d.%d, Pipeline %u\t"
1100 		 "0x%04x, Rev %d, Bond %d, CSR %d, IRQ %d\n",
1101 		 major, minor, hotfix, pipeline,
1102 		 product_id, hw_rev_id, bond_id, csr_id, irq_id);
1103 }
1104 
1105 static struct ptp_clock_info idtcm_caps = {
1106 	.owner		= THIS_MODULE,
1107 	.max_adj	= 244000,
1108 	.n_per_out	= 1,
1109 	.adjfreq	= &idtcm_adjfreq,
1110 	.adjtime	= &idtcm_adjtime,
1111 	.gettime64	= &idtcm_gettime,
1112 	.settime64	= &idtcm_settime,
1113 	.enable		= &idtcm_enable,
1114 };
1115 
1116 static int idtcm_enable_channel(struct idtcm *idtcm, u32 index)
1117 {
1118 	struct idtcm_channel *channel;
1119 	int err;
1120 
1121 	if (!(index < MAX_PHC_PLL))
1122 		return -EINVAL;
1123 
1124 	channel = &idtcm->channel[index];
1125 
1126 	switch (index) {
1127 	case 0:
1128 		channel->dpll_freq = DPLL_FREQ_0;
1129 		channel->dpll_n = DPLL_0;
1130 		channel->tod_read_primary = TOD_READ_PRIMARY_0;
1131 		channel->tod_write = TOD_WRITE_0;
1132 		channel->tod_n = TOD_0;
1133 		channel->hw_dpll_n = HW_DPLL_0;
1134 		channel->dpll_phase = DPLL_PHASE_0;
1135 		channel->dpll_ctrl_n = DPLL_CTRL_0;
1136 		channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_0;
1137 		break;
1138 	case 1:
1139 		channel->dpll_freq = DPLL_FREQ_1;
1140 		channel->dpll_n = DPLL_1;
1141 		channel->tod_read_primary = TOD_READ_PRIMARY_1;
1142 		channel->tod_write = TOD_WRITE_1;
1143 		channel->tod_n = TOD_1;
1144 		channel->hw_dpll_n = HW_DPLL_1;
1145 		channel->dpll_phase = DPLL_PHASE_1;
1146 		channel->dpll_ctrl_n = DPLL_CTRL_1;
1147 		channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_1;
1148 		break;
1149 	case 2:
1150 		channel->dpll_freq = DPLL_FREQ_2;
1151 		channel->dpll_n = DPLL_2;
1152 		channel->tod_read_primary = TOD_READ_PRIMARY_2;
1153 		channel->tod_write = TOD_WRITE_2;
1154 		channel->tod_n = TOD_2;
1155 		channel->hw_dpll_n = HW_DPLL_2;
1156 		channel->dpll_phase = DPLL_PHASE_2;
1157 		channel->dpll_ctrl_n = DPLL_CTRL_2;
1158 		channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_2;
1159 		break;
1160 	case 3:
1161 		channel->dpll_freq = DPLL_FREQ_3;
1162 		channel->dpll_n = DPLL_3;
1163 		channel->tod_read_primary = TOD_READ_PRIMARY_3;
1164 		channel->tod_write = TOD_WRITE_3;
1165 		channel->tod_n = TOD_3;
1166 		channel->hw_dpll_n = HW_DPLL_3;
1167 		channel->dpll_phase = DPLL_PHASE_3;
1168 		channel->dpll_ctrl_n = DPLL_CTRL_3;
1169 		channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_3;
1170 		break;
1171 	default:
1172 		return -EINVAL;
1173 	}
1174 
1175 	channel->idtcm = idtcm;
1176 
1177 	channel->caps = idtcm_caps;
1178 	snprintf(channel->caps.name, sizeof(channel->caps.name),
1179 		 "IDT CM PLL%u", index);
1180 
1181 	err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
1182 	if (err)
1183 		return err;
1184 
1185 	err = idtcm_enable_tod(channel);
1186 	if (err)
1187 		return err;
1188 
1189 	channel->ptp_clock = ptp_clock_register(&channel->caps, NULL);
1190 
1191 	if (IS_ERR(channel->ptp_clock)) {
1192 		err = PTR_ERR(channel->ptp_clock);
1193 		channel->ptp_clock = NULL;
1194 		return err;
1195 	}
1196 
1197 	if (!channel->ptp_clock)
1198 		return -ENOTSUPP;
1199 
1200 	dev_info(&idtcm->client->dev, "PLL%d registered as ptp%d\n",
1201 		 index, channel->ptp_clock->index);
1202 
1203 	return 0;
1204 }
1205 
1206 static void ptp_clock_unregister_all(struct idtcm *idtcm)
1207 {
1208 	u8 i;
1209 	struct idtcm_channel *channel;
1210 
1211 	for (i = 0; i < MAX_PHC_PLL; i++) {
1212 
1213 		channel = &idtcm->channel[i];
1214 
1215 		if (channel->ptp_clock)
1216 			ptp_clock_unregister(channel->ptp_clock);
1217 	}
1218 }
1219 
1220 static void set_default_masks(struct idtcm *idtcm)
1221 {
1222 	idtcm->pll_mask = DEFAULT_PLL_MASK;
1223 
1224 	idtcm->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0;
1225 	idtcm->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1;
1226 	idtcm->channel[2].output_mask = DEFAULT_OUTPUT_MASK_PLL2;
1227 	idtcm->channel[3].output_mask = DEFAULT_OUTPUT_MASK_PLL3;
1228 }
1229 
1230 static int set_tod_write_overhead(struct idtcm *idtcm)
1231 {
1232 	int err;
1233 	u8 i;
1234 
1235 	s64 total_ns = 0;
1236 
1237 	ktime_t start;
1238 	ktime_t stop;
1239 
1240 	char buf[TOD_BYTE_COUNT];
1241 
1242 	struct idtcm_channel *channel = &idtcm->channel[2];
1243 
1244 	/* Set page offset */
1245 	idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_OVR__0,
1246 		    buf, sizeof(buf));
1247 
1248 	for (i = 0; i < TOD_WRITE_OVERHEAD_COUNT_MAX; i++) {
1249 
1250 		start = ktime_get_raw();
1251 
1252 		err = idtcm_write(idtcm, channel->hw_dpll_n,
1253 				  HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
1254 
1255 		if (err)
1256 			return err;
1257 
1258 		stop = ktime_get_raw();
1259 
1260 		total_ns += ktime_to_ns(stop - start);
1261 	}
1262 
1263 	idtcm->tod_write_overhead_ns = div_s64(total_ns,
1264 					       TOD_WRITE_OVERHEAD_COUNT_MAX);
1265 
1266 	return err;
1267 }
1268 
1269 static int idtcm_probe(struct i2c_client *client,
1270 		       const struct i2c_device_id *id)
1271 {
1272 	struct idtcm *idtcm;
1273 	int err;
1274 	u8 i;
1275 
1276 	/* Unused for now */
1277 	(void)id;
1278 
1279 	idtcm = devm_kzalloc(&client->dev, sizeof(struct idtcm), GFP_KERNEL);
1280 
1281 	if (!idtcm)
1282 		return -ENOMEM;
1283 
1284 	idtcm->client = client;
1285 	idtcm->page_offset = 0xff;
1286 	idtcm->calculate_overhead_flag = 0;
1287 
1288 	set_default_masks(idtcm);
1289 
1290 	mutex_init(&idtcm->reg_lock);
1291 	mutex_lock(&idtcm->reg_lock);
1292 
1293 	idtcm_display_version_info(idtcm);
1294 
1295 	err = set_tod_write_overhead(idtcm);
1296 
1297 	if (err) {
1298 		mutex_unlock(&idtcm->reg_lock);
1299 		return err;
1300 	}
1301 
1302 	err = idtcm_load_firmware(idtcm, &client->dev);
1303 
1304 	if (err)
1305 		dev_warn(&idtcm->client->dev,
1306 			 "loading firmware failed with %d\n", err);
1307 
1308 	if (idtcm->pll_mask) {
1309 		for (i = 0; i < MAX_PHC_PLL; i++) {
1310 			if (idtcm->pll_mask & (1 << i)) {
1311 				err = idtcm_enable_channel(idtcm, i);
1312 				if (err)
1313 					break;
1314 			}
1315 		}
1316 	} else {
1317 		dev_err(&idtcm->client->dev,
1318 			"no PLLs flagged as PHCs, nothing to do\n");
1319 		err = -ENODEV;
1320 	}
1321 
1322 	mutex_unlock(&idtcm->reg_lock);
1323 
1324 	if (err) {
1325 		ptp_clock_unregister_all(idtcm);
1326 		return err;
1327 	}
1328 
1329 	i2c_set_clientdata(client, idtcm);
1330 
1331 	return 0;
1332 }
1333 
1334 static int idtcm_remove(struct i2c_client *client)
1335 {
1336 	struct idtcm *idtcm = i2c_get_clientdata(client);
1337 
1338 	ptp_clock_unregister_all(idtcm);
1339 
1340 	mutex_destroy(&idtcm->reg_lock);
1341 
1342 	return 0;
1343 }
1344 
1345 #ifdef CONFIG_OF
1346 static const struct of_device_id idtcm_dt_id[] = {
1347 	{ .compatible = "idt,8a34000" },
1348 	{ .compatible = "idt,8a34001" },
1349 	{ .compatible = "idt,8a34002" },
1350 	{ .compatible = "idt,8a34003" },
1351 	{ .compatible = "idt,8a34004" },
1352 	{ .compatible = "idt,8a34005" },
1353 	{ .compatible = "idt,8a34006" },
1354 	{ .compatible = "idt,8a34007" },
1355 	{ .compatible = "idt,8a34008" },
1356 	{ .compatible = "idt,8a34009" },
1357 	{ .compatible = "idt,8a34010" },
1358 	{ .compatible = "idt,8a34011" },
1359 	{ .compatible = "idt,8a34012" },
1360 	{ .compatible = "idt,8a34013" },
1361 	{ .compatible = "idt,8a34014" },
1362 	{ .compatible = "idt,8a34015" },
1363 	{ .compatible = "idt,8a34016" },
1364 	{ .compatible = "idt,8a34017" },
1365 	{ .compatible = "idt,8a34018" },
1366 	{ .compatible = "idt,8a34019" },
1367 	{ .compatible = "idt,8a34040" },
1368 	{ .compatible = "idt,8a34041" },
1369 	{ .compatible = "idt,8a34042" },
1370 	{ .compatible = "idt,8a34043" },
1371 	{ .compatible = "idt,8a34044" },
1372 	{ .compatible = "idt,8a34045" },
1373 	{ .compatible = "idt,8a34046" },
1374 	{ .compatible = "idt,8a34047" },
1375 	{ .compatible = "idt,8a34048" },
1376 	{ .compatible = "idt,8a34049" },
1377 	{},
1378 };
1379 MODULE_DEVICE_TABLE(of, idtcm_dt_id);
1380 #endif
1381 
1382 static const struct i2c_device_id idtcm_i2c_id[] = {
1383 	{ "8a34000" },
1384 	{ "8a34001" },
1385 	{ "8a34002" },
1386 	{ "8a34003" },
1387 	{ "8a34004" },
1388 	{ "8a34005" },
1389 	{ "8a34006" },
1390 	{ "8a34007" },
1391 	{ "8a34008" },
1392 	{ "8a34009" },
1393 	{ "8a34010" },
1394 	{ "8a34011" },
1395 	{ "8a34012" },
1396 	{ "8a34013" },
1397 	{ "8a34014" },
1398 	{ "8a34015" },
1399 	{ "8a34016" },
1400 	{ "8a34017" },
1401 	{ "8a34018" },
1402 	{ "8a34019" },
1403 	{ "8a34040" },
1404 	{ "8a34041" },
1405 	{ "8a34042" },
1406 	{ "8a34043" },
1407 	{ "8a34044" },
1408 	{ "8a34045" },
1409 	{ "8a34046" },
1410 	{ "8a34047" },
1411 	{ "8a34048" },
1412 	{ "8a34049" },
1413 	{},
1414 };
1415 MODULE_DEVICE_TABLE(i2c, idtcm_i2c_id);
1416 
1417 static struct i2c_driver idtcm_driver = {
1418 	.driver = {
1419 		.of_match_table	= of_match_ptr(idtcm_dt_id),
1420 		.name		= "idtcm",
1421 	},
1422 	.probe		= idtcm_probe,
1423 	.remove		= idtcm_remove,
1424 	.id_table	= idtcm_i2c_id,
1425 };
1426 
1427 module_i2c_driver(idtcm_driver);
1428