ARM: s3c64xx: bring back notes from removed debug-macro.S
[linux-2.6-microblaze.git] / drivers / ptp / ptp_clockmatrix.c
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/jiffies.h>
14 #include <linux/kernel.h>
15 #include <linux/timekeeping.h>
16 #include <linux/string.h>
17
18 #include "ptp_private.h"
19 #include "ptp_clockmatrix.h"
20
21 MODULE_DESCRIPTION("Driver for IDT ClockMatrix(TM) family");
22 MODULE_AUTHOR("Richard Cochran <richardcochran@gmail.com>");
23 MODULE_AUTHOR("IDT support-1588 <IDT-support-1588@lm.renesas.com>");
24 MODULE_VERSION("1.0");
25 MODULE_LICENSE("GPL");
26
27 /*
28  * The name of the firmware file to be loaded
29  * over-rides any automatic selection
30  */
31 static char *firmware;
32 module_param(firmware, charp, 0);
33
34 #define SETTIME_CORRECTION (0)
35
36 static long set_write_phase_ready(struct ptp_clock_info *ptp)
37 {
38         struct idtcm_channel *channel =
39                 container_of(ptp, struct idtcm_channel, caps);
40
41         channel->write_phase_ready = 1;
42
43         return 0;
44 }
45
46 static int char_array_to_timespec(u8 *buf,
47                                   u8 count,
48                                   struct timespec64 *ts)
49 {
50         u8 i;
51         u64 nsec;
52         time64_t sec;
53
54         if (count < TOD_BYTE_COUNT)
55                 return 1;
56
57         /* Sub-nanoseconds are in buf[0]. */
58         nsec = buf[4];
59         for (i = 0; i < 3; i++) {
60                 nsec <<= 8;
61                 nsec |= buf[3 - i];
62         }
63
64         sec = buf[10];
65         for (i = 0; i < 5; i++) {
66                 sec <<= 8;
67                 sec |= buf[9 - i];
68         }
69
70         ts->tv_sec = sec;
71         ts->tv_nsec = nsec;
72
73         return 0;
74 }
75
76 static int timespec_to_char_array(struct timespec64 const *ts,
77                                   u8 *buf,
78                                   u8 count)
79 {
80         u8 i;
81         s32 nsec;
82         time64_t sec;
83
84         if (count < TOD_BYTE_COUNT)
85                 return 1;
86
87         nsec = ts->tv_nsec;
88         sec = ts->tv_sec;
89
90         /* Sub-nanoseconds are in buf[0]. */
91         buf[0] = 0;
92         for (i = 1; i < 5; i++) {
93                 buf[i] = nsec & 0xff;
94                 nsec >>= 8;
95         }
96
97         for (i = 5; i < TOD_BYTE_COUNT; i++) {
98
99                 buf[i] = sec & 0xff;
100                 sec >>= 8;
101         }
102
103         return 0;
104 }
105
106 static int idtcm_strverscmp(const char *ver1, const char *ver2)
107 {
108         u8 num1;
109         u8 num2;
110         int result = 0;
111
112         /* loop through each level of the version string */
113         while (result == 0) {
114                 /* extract leading version numbers */
115                 if (kstrtou8(ver1, 10, &num1) < 0)
116                         return -1;
117
118                 if (kstrtou8(ver2, 10, &num2) < 0)
119                         return -1;
120
121                 /* if numbers differ, then set the result */
122                 if (num1 < num2)
123                         result = -1;
124                 else if (num1 > num2)
125                         result = 1;
126                 else {
127                         /* if numbers are the same, go to next level */
128                         ver1 = strchr(ver1, '.');
129                         ver2 = strchr(ver2, '.');
130                         if (!ver1 && !ver2)
131                                 break;
132                         else if (!ver1)
133                                 result = -1;
134                         else if (!ver2)
135                                 result = 1;
136                         else {
137                                 ver1++;
138                                 ver2++;
139                         }
140                 }
141         }
142         return result;
143 }
144
145 static int idtcm_xfer(struct idtcm *idtcm,
146                       u8 regaddr,
147                       u8 *buf,
148                       u16 count,
149                       bool write)
150 {
151         struct i2c_client *client = idtcm->client;
152         struct i2c_msg msg[2];
153         int cnt;
154         char *fmt = "i2c_transfer failed at %d in %s for %s, at addr: %04X!\n";
155
156         msg[0].addr = client->addr;
157         msg[0].flags = 0;
158         msg[0].len = 1;
159         msg[0].buf = &regaddr;
160
161         msg[1].addr = client->addr;
162         msg[1].flags = write ? 0 : I2C_M_RD;
163         msg[1].len = count;
164         msg[1].buf = buf;
165
166         cnt = i2c_transfer(client->adapter, msg, 2);
167
168         if (cnt < 0) {
169                 dev_err(&client->dev,
170                         fmt,
171                         __LINE__,
172                         __func__,
173                         write ? "write" : "read",
174                         regaddr);
175                 return cnt;
176         } else if (cnt != 2) {
177                 dev_err(&client->dev,
178                         "i2c_transfer sent only %d of %d messages\n", cnt, 2);
179                 return -EIO;
180         }
181
182         return 0;
183 }
184
185 static int idtcm_page_offset(struct idtcm *idtcm, u8 val)
186 {
187         u8 buf[4];
188         int err;
189
190         if (idtcm->page_offset == val)
191                 return 0;
192
193         buf[0] = 0x0;
194         buf[1] = val;
195         buf[2] = 0x10;
196         buf[3] = 0x20;
197
198         err = idtcm_xfer(idtcm, PAGE_ADDR, buf, sizeof(buf), 1);
199
200         if (err) {
201                 idtcm->page_offset = 0xff;
202                 dev_err(&idtcm->client->dev, "failed to set page offset\n");
203         } else {
204                 idtcm->page_offset = val;
205         }
206
207         return err;
208 }
209
210 static int _idtcm_rdwr(struct idtcm *idtcm,
211                        u16 regaddr,
212                        u8 *buf,
213                        u16 count,
214                        bool write)
215 {
216         u8 hi;
217         u8 lo;
218         int err;
219
220         hi = (regaddr >> 8) & 0xff;
221         lo = regaddr & 0xff;
222
223         err = idtcm_page_offset(idtcm, hi);
224
225         if (err)
226                 goto out;
227
228         err = idtcm_xfer(idtcm, lo, buf, count, write);
229 out:
230         return err;
231 }
232
233 static int idtcm_read(struct idtcm *idtcm,
234                       u16 module,
235                       u16 regaddr,
236                       u8 *buf,
237                       u16 count)
238 {
239         return _idtcm_rdwr(idtcm, module + regaddr, buf, count, false);
240 }
241
242 static int idtcm_write(struct idtcm *idtcm,
243                        u16 module,
244                        u16 regaddr,
245                        u8 *buf,
246                        u16 count)
247 {
248         return _idtcm_rdwr(idtcm, module + regaddr, buf, count, true);
249 }
250
251 static int _idtcm_gettime(struct idtcm_channel *channel,
252                           struct timespec64 *ts)
253 {
254         struct idtcm *idtcm = channel->idtcm;
255         u8 buf[TOD_BYTE_COUNT];
256         u8 timeout = 10;
257         u8 trigger;
258         int err;
259
260         err = idtcm_read(idtcm, channel->tod_read_primary,
261                          TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
262         if (err)
263                 return err;
264
265         trigger &= ~(TOD_READ_TRIGGER_MASK << TOD_READ_TRIGGER_SHIFT);
266         trigger |= (1 << TOD_READ_TRIGGER_SHIFT);
267         trigger &= ~TOD_READ_TRIGGER_MODE; /* single shot */
268
269         err = idtcm_write(idtcm, channel->tod_read_primary,
270                           TOD_READ_PRIMARY_CMD, &trigger, sizeof(trigger));
271         if (err)
272                 return err;
273
274         /* wait trigger to be 0 */
275         while (trigger & TOD_READ_TRIGGER_MASK) {
276
277                 if (idtcm->calculate_overhead_flag)
278                         idtcm->start_time = ktime_get_raw();
279
280                 err = idtcm_read(idtcm, channel->tod_read_primary,
281                                  TOD_READ_PRIMARY_CMD, &trigger,
282                                  sizeof(trigger));
283
284                 if (err)
285                         return err;
286
287                 if (--timeout == 0)
288                         return -EIO;
289         }
290
291         err = idtcm_read(idtcm, channel->tod_read_primary,
292                          TOD_READ_PRIMARY, buf, sizeof(buf));
293
294         if (err)
295                 return err;
296
297         err = char_array_to_timespec(buf, sizeof(buf), ts);
298
299         return err;
300 }
301
302 static int _sync_pll_output(struct idtcm *idtcm,
303                             u8 pll,
304                             u8 sync_src,
305                             u8 qn,
306                             u8 qn_plus_1)
307 {
308         int err;
309         u8 val;
310         u16 sync_ctrl0;
311         u16 sync_ctrl1;
312         u8 temp;
313
314         if ((qn == 0) && (qn_plus_1 == 0))
315                 return 0;
316
317         switch (pll) {
318         case 0:
319                 sync_ctrl0 = HW_Q0_Q1_CH_SYNC_CTRL_0;
320                 sync_ctrl1 = HW_Q0_Q1_CH_SYNC_CTRL_1;
321                 break;
322         case 1:
323                 sync_ctrl0 = HW_Q2_Q3_CH_SYNC_CTRL_0;
324                 sync_ctrl1 = HW_Q2_Q3_CH_SYNC_CTRL_1;
325                 break;
326         case 2:
327                 sync_ctrl0 = HW_Q4_Q5_CH_SYNC_CTRL_0;
328                 sync_ctrl1 = HW_Q4_Q5_CH_SYNC_CTRL_1;
329                 break;
330         case 3:
331                 sync_ctrl0 = HW_Q6_Q7_CH_SYNC_CTRL_0;
332                 sync_ctrl1 = HW_Q6_Q7_CH_SYNC_CTRL_1;
333                 break;
334         case 4:
335                 sync_ctrl0 = HW_Q8_CH_SYNC_CTRL_0;
336                 sync_ctrl1 = HW_Q8_CH_SYNC_CTRL_1;
337                 break;
338         case 5:
339                 sync_ctrl0 = HW_Q9_CH_SYNC_CTRL_0;
340                 sync_ctrl1 = HW_Q9_CH_SYNC_CTRL_1;
341                 break;
342         case 6:
343                 sync_ctrl0 = HW_Q10_CH_SYNC_CTRL_0;
344                 sync_ctrl1 = HW_Q10_CH_SYNC_CTRL_1;
345                 break;
346         case 7:
347                 sync_ctrl0 = HW_Q11_CH_SYNC_CTRL_0;
348                 sync_ctrl1 = HW_Q11_CH_SYNC_CTRL_1;
349                 break;
350         default:
351                 return -EINVAL;
352         }
353
354         val = SYNCTRL1_MASTER_SYNC_RST;
355
356         /* Place master sync in reset */
357         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
358         if (err)
359                 return err;
360
361         err = idtcm_write(idtcm, 0, sync_ctrl0, &sync_src, sizeof(sync_src));
362         if (err)
363                 return err;
364
365         /* Set sync trigger mask */
366         val |= SYNCTRL1_FBDIV_FRAME_SYNC_TRIG | SYNCTRL1_FBDIV_SYNC_TRIG;
367
368         if (qn)
369                 val |= SYNCTRL1_Q0_DIV_SYNC_TRIG;
370
371         if (qn_plus_1)
372                 val |= SYNCTRL1_Q1_DIV_SYNC_TRIG;
373
374         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
375         if (err)
376                 return err;
377
378         /* PLL5 can have OUT8 as second additional output. */
379         if ((pll == 5) && (qn_plus_1 != 0)) {
380                 err = idtcm_read(idtcm, 0, HW_Q8_CTRL_SPARE,
381                                  &temp, sizeof(temp));
382                 if (err)
383                         return err;
384
385                 temp &= ~(Q9_TO_Q8_SYNC_TRIG);
386
387                 err = idtcm_write(idtcm, 0, HW_Q8_CTRL_SPARE,
388                                   &temp, sizeof(temp));
389                 if (err)
390                         return err;
391
392                 temp |= Q9_TO_Q8_SYNC_TRIG;
393
394                 err = idtcm_write(idtcm, 0, HW_Q8_CTRL_SPARE,
395                                   &temp, sizeof(temp));
396                 if (err)
397                         return err;
398         }
399
400         /* PLL6 can have OUT11 as second additional output. */
401         if ((pll == 6) && (qn_plus_1 != 0)) {
402                 err = idtcm_read(idtcm, 0, HW_Q11_CTRL_SPARE,
403                                  &temp, sizeof(temp));
404                 if (err)
405                         return err;
406
407                 temp &= ~(Q10_TO_Q11_SYNC_TRIG);
408
409                 err = idtcm_write(idtcm, 0, HW_Q11_CTRL_SPARE,
410                                   &temp, sizeof(temp));
411                 if (err)
412                         return err;
413
414                 temp |= Q10_TO_Q11_SYNC_TRIG;
415
416                 err = idtcm_write(idtcm, 0, HW_Q11_CTRL_SPARE,
417                                   &temp, sizeof(temp));
418                 if (err)
419                         return err;
420         }
421
422         /* Place master sync out of reset */
423         val &= ~(SYNCTRL1_MASTER_SYNC_RST);
424         err = idtcm_write(idtcm, 0, sync_ctrl1, &val, sizeof(val));
425
426         return err;
427 }
428
429 static int sync_source_dpll_tod_pps(u16 tod_addr, u8 *sync_src)
430 {
431         int err = 0;
432
433         switch (tod_addr) {
434         case TOD_0:
435                 *sync_src = SYNC_SOURCE_DPLL0_TOD_PPS;
436                 break;
437         case TOD_1:
438                 *sync_src = SYNC_SOURCE_DPLL1_TOD_PPS;
439                 break;
440         case TOD_2:
441                 *sync_src = SYNC_SOURCE_DPLL2_TOD_PPS;
442                 break;
443         case TOD_3:
444                 *sync_src = SYNC_SOURCE_DPLL3_TOD_PPS;
445                 break;
446         default:
447                 err = -EINVAL;
448         }
449
450         return err;
451 }
452
453 static int idtcm_sync_pps_output(struct idtcm_channel *channel)
454 {
455         struct idtcm *idtcm = channel->idtcm;
456
457         u8 pll;
458         u8 sync_src;
459         u8 qn;
460         u8 qn_plus_1;
461         int err = 0;
462         u8 out8_mux = 0;
463         u8 out11_mux = 0;
464         u8 temp;
465
466         u16 output_mask = channel->output_mask;
467
468         err = sync_source_dpll_tod_pps(channel->tod_n, &sync_src);
469         if (err)
470                 return err;
471
472         err = idtcm_read(idtcm, 0, HW_Q8_CTRL_SPARE,
473                          &temp, sizeof(temp));
474         if (err)
475                 return err;
476
477         if ((temp & Q9_TO_Q8_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK) ==
478             Q9_TO_Q8_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK)
479                 out8_mux = 1;
480
481         err = idtcm_read(idtcm, 0, HW_Q11_CTRL_SPARE,
482                          &temp, sizeof(temp));
483         if (err)
484                 return err;
485
486         if ((temp & Q10_TO_Q11_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK) ==
487             Q10_TO_Q11_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK)
488                 out11_mux = 1;
489
490         for (pll = 0; pll < 8; pll++) {
491                 qn = 0;
492                 qn_plus_1 = 0;
493
494                 if (pll < 4) {
495                         /* First 4 pll has 2 outputs */
496                         qn = output_mask & 0x1;
497                         output_mask = output_mask >> 1;
498                         qn_plus_1 = output_mask & 0x1;
499                         output_mask = output_mask >> 1;
500                 } else if (pll == 4) {
501                         if (out8_mux == 0) {
502                                 qn = output_mask & 0x1;
503                                 output_mask = output_mask >> 1;
504                         }
505                 } else if (pll == 5) {
506                         if (out8_mux) {
507                                 qn_plus_1 = output_mask & 0x1;
508                                 output_mask = output_mask >> 1;
509                         }
510                         qn = output_mask & 0x1;
511                         output_mask = output_mask >> 1;
512                 } else if (pll == 6) {
513                         qn = output_mask & 0x1;
514                         output_mask = output_mask >> 1;
515                         if (out11_mux) {
516                                 qn_plus_1 = output_mask & 0x1;
517                                 output_mask = output_mask >> 1;
518                         }
519                 } else if (pll == 7) {
520                         if (out11_mux == 0) {
521                                 qn = output_mask & 0x1;
522                                 output_mask = output_mask >> 1;
523                         }
524                 }
525
526                 if ((qn != 0) || (qn_plus_1 != 0))
527                         err = _sync_pll_output(idtcm, pll, sync_src, qn,
528                                                qn_plus_1);
529
530                 if (err)
531                         return err;
532         }
533
534         return err;
535 }
536
537 static int _idtcm_set_dpll_hw_tod(struct idtcm_channel *channel,
538                                struct timespec64 const *ts,
539                                enum hw_tod_write_trig_sel wr_trig)
540 {
541         struct idtcm *idtcm = channel->idtcm;
542
543         u8 buf[TOD_BYTE_COUNT];
544         u8 cmd;
545         int err;
546         struct timespec64 local_ts = *ts;
547         s64 total_overhead_ns;
548
549         /* Configure HW TOD write trigger. */
550         err = idtcm_read(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
551                          &cmd, sizeof(cmd));
552
553         if (err)
554                 return err;
555
556         cmd &= ~(0x0f);
557         cmd |= wr_trig | 0x08;
558
559         err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
560                           &cmd, sizeof(cmd));
561
562         if (err)
563                 return err;
564
565         if (wr_trig  != HW_TOD_WR_TRIG_SEL_MSB) {
566
567                 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
568
569                 if (err)
570                         return err;
571
572                 err = idtcm_write(idtcm, channel->hw_dpll_n,
573                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
574
575                 if (err)
576                         return err;
577         }
578
579         /* ARM HW TOD write trigger. */
580         cmd &= ~(0x08);
581
582         err = idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_CTRL_1,
583                           &cmd, sizeof(cmd));
584
585         if (wr_trig == HW_TOD_WR_TRIG_SEL_MSB) {
586
587                 if (idtcm->calculate_overhead_flag) {
588                         /* Assumption: I2C @ 400KHz */
589                         total_overhead_ns =  ktime_to_ns(ktime_get_raw()
590                                                          - idtcm->start_time)
591                                              + idtcm->tod_write_overhead_ns
592                                              + SETTIME_CORRECTION;
593
594                         timespec64_add_ns(&local_ts, total_overhead_ns);
595
596                         idtcm->calculate_overhead_flag = 0;
597                 }
598
599                 err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
600
601                 if (err)
602                         return err;
603
604                 err = idtcm_write(idtcm, channel->hw_dpll_n,
605                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
606         }
607
608         return err;
609 }
610
611 static int _idtcm_set_dpll_scsr_tod(struct idtcm_channel *channel,
612                                     struct timespec64 const *ts,
613                                     enum scsr_tod_write_trig_sel wr_trig,
614                                     enum scsr_tod_write_type_sel wr_type)
615 {
616         struct idtcm *idtcm = channel->idtcm;
617         unsigned char buf[TOD_BYTE_COUNT], cmd;
618         struct timespec64 local_ts = *ts;
619         int err, count = 0;
620
621         timespec64_add_ns(&local_ts, SETTIME_CORRECTION);
622
623         err = timespec_to_char_array(&local_ts, buf, sizeof(buf));
624
625         if (err)
626                 return err;
627
628         err = idtcm_write(idtcm, channel->tod_write, TOD_WRITE,
629                           buf, sizeof(buf));
630         if (err)
631                 return err;
632
633         /* Trigger the write operation. */
634         err = idtcm_read(idtcm, channel->tod_write, TOD_WRITE_CMD,
635                          &cmd, sizeof(cmd));
636         if (err)
637                 return err;
638
639         cmd &= ~(TOD_WRITE_SELECTION_MASK << TOD_WRITE_SELECTION_SHIFT);
640         cmd &= ~(TOD_WRITE_TYPE_MASK << TOD_WRITE_TYPE_SHIFT);
641         cmd |= (wr_trig << TOD_WRITE_SELECTION_SHIFT);
642         cmd |= (wr_type << TOD_WRITE_TYPE_SHIFT);
643
644         err = idtcm_write(idtcm, channel->tod_write, TOD_WRITE_CMD,
645                            &cmd, sizeof(cmd));
646         if (err)
647                 return err;
648
649         /* Wait for the operation to complete. */
650         while (1) {
651                 /* pps trigger takes up to 1 sec to complete */
652                 if (wr_trig == SCSR_TOD_WR_TRIG_SEL_TODPPS)
653                         msleep(50);
654
655                 err = idtcm_read(idtcm, channel->tod_write, TOD_WRITE_CMD,
656                                  &cmd, sizeof(cmd));
657                 if (err)
658                         return err;
659
660                 if (cmd == 0)
661                         break;
662
663                 if (++count > 20) {
664                         dev_err(&idtcm->client->dev,
665                                 "Timed out waiting for the write counter\n");
666                         return -EIO;
667                 }
668         }
669
670         return 0;
671 }
672
673 static int _idtcm_settime(struct idtcm_channel *channel,
674                           struct timespec64 const *ts,
675                           enum hw_tod_write_trig_sel wr_trig)
676 {
677         struct idtcm *idtcm = channel->idtcm;
678         int err;
679         int i;
680         u8 trig_sel;
681
682         err = _idtcm_set_dpll_hw_tod(channel, ts, wr_trig);
683
684         if (err)
685                 return err;
686
687         /* Wait for the operation to complete. */
688         for (i = 0; i < 10000; i++) {
689                 err = idtcm_read(idtcm, channel->hw_dpll_n,
690                                  HW_DPLL_TOD_CTRL_1, &trig_sel,
691                                  sizeof(trig_sel));
692
693                 if (err)
694                         return err;
695
696                 if (trig_sel == 0x4a)
697                         break;
698
699                 err = 1;
700         }
701
702         if (err) {
703                 dev_err(&idtcm->client->dev,
704                         "Failed at line %d in func %s!\n",
705                         __LINE__,
706                         __func__);
707                 return err;
708         }
709
710         return idtcm_sync_pps_output(channel);
711 }
712
713 static int _idtcm_settime_v487(struct idtcm_channel *channel,
714                                struct timespec64 const *ts,
715                                enum scsr_tod_write_type_sel wr_type)
716 {
717         return _idtcm_set_dpll_scsr_tod(channel, ts,
718                                         SCSR_TOD_WR_TRIG_SEL_IMMEDIATE,
719                                         wr_type);
720 }
721
722 static int idtcm_set_phase_pull_in_offset(struct idtcm_channel *channel,
723                                           s32 offset_ns)
724 {
725         int err;
726         int i;
727         struct idtcm *idtcm = channel->idtcm;
728
729         u8 buf[4];
730
731         for (i = 0; i < 4; i++) {
732                 buf[i] = 0xff & (offset_ns);
733                 offset_ns >>= 8;
734         }
735
736         err = idtcm_write(idtcm, channel->dpll_phase_pull_in, PULL_IN_OFFSET,
737                           buf, sizeof(buf));
738
739         return err;
740 }
741
742 static int idtcm_set_phase_pull_in_slope_limit(struct idtcm_channel *channel,
743                                                u32 max_ffo_ppb)
744 {
745         int err;
746         u8 i;
747         struct idtcm *idtcm = channel->idtcm;
748
749         u8 buf[3];
750
751         if (max_ffo_ppb & 0xff000000)
752                 max_ffo_ppb = 0;
753
754         for (i = 0; i < 3; i++) {
755                 buf[i] = 0xff & (max_ffo_ppb);
756                 max_ffo_ppb >>= 8;
757         }
758
759         err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
760                           PULL_IN_SLOPE_LIMIT, buf, sizeof(buf));
761
762         return err;
763 }
764
765 static int idtcm_start_phase_pull_in(struct idtcm_channel *channel)
766 {
767         int err;
768         struct idtcm *idtcm = channel->idtcm;
769
770         u8 buf;
771
772         err = idtcm_read(idtcm, channel->dpll_phase_pull_in, PULL_IN_CTRL,
773                          &buf, sizeof(buf));
774
775         if (err)
776                 return err;
777
778         if (buf == 0) {
779                 buf = 0x01;
780                 err = idtcm_write(idtcm, channel->dpll_phase_pull_in,
781                                   PULL_IN_CTRL, &buf, sizeof(buf));
782         } else {
783                 err = -EBUSY;
784         }
785
786         return err;
787 }
788
789 static int idtcm_do_phase_pull_in(struct idtcm_channel *channel,
790                                   s32 offset_ns,
791                                   u32 max_ffo_ppb)
792 {
793         int err;
794
795         err = idtcm_set_phase_pull_in_offset(channel, -offset_ns);
796
797         if (err)
798                 return err;
799
800         err = idtcm_set_phase_pull_in_slope_limit(channel, max_ffo_ppb);
801
802         if (err)
803                 return err;
804
805         err = idtcm_start_phase_pull_in(channel);
806
807         return err;
808 }
809
810 static int set_tod_write_overhead(struct idtcm_channel *channel)
811 {
812         struct idtcm *idtcm = channel->idtcm;
813         s64 current_ns = 0;
814         s64 lowest_ns = 0;
815         int err;
816         u8 i;
817
818         ktime_t start;
819         ktime_t stop;
820
821         char buf[TOD_BYTE_COUNT] = {0};
822
823         /* Set page offset */
824         idtcm_write(idtcm, channel->hw_dpll_n, HW_DPLL_TOD_OVR__0,
825                     buf, sizeof(buf));
826
827         for (i = 0; i < TOD_WRITE_OVERHEAD_COUNT_MAX; i++) {
828
829                 start = ktime_get_raw();
830
831                 err = idtcm_write(idtcm, channel->hw_dpll_n,
832                                   HW_DPLL_TOD_OVR__0, buf, sizeof(buf));
833
834                 if (err)
835                         return err;
836
837                 stop = ktime_get_raw();
838
839                 current_ns = ktime_to_ns(stop - start);
840
841                 if (i == 0) {
842                         lowest_ns = current_ns;
843                 } else {
844                         if (current_ns < lowest_ns)
845                                 lowest_ns = current_ns;
846                 }
847         }
848
849         idtcm->tod_write_overhead_ns = lowest_ns;
850
851         return err;
852 }
853
854 static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta)
855 {
856         int err;
857         struct idtcm *idtcm = channel->idtcm;
858         struct timespec64 ts;
859         s64 now;
860
861         if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) {
862                 err = idtcm_do_phase_pull_in(channel, delta, 0);
863         } else {
864                 idtcm->calculate_overhead_flag = 1;
865
866                 err = set_tod_write_overhead(channel);
867
868                 if (err)
869                         return err;
870
871                 err = _idtcm_gettime(channel, &ts);
872
873                 if (err)
874                         return err;
875
876                 now = timespec64_to_ns(&ts);
877                 now += delta;
878
879                 ts = ns_to_timespec64(now);
880
881                 err = _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
882         }
883
884         return err;
885 }
886
887 static int idtcm_state_machine_reset(struct idtcm *idtcm)
888 {
889         int err;
890         u8 byte = SM_RESET_CMD;
891
892         err = idtcm_write(idtcm, RESET_CTRL, SM_RESET, &byte, sizeof(byte));
893
894         if (!err)
895                 msleep_interruptible(POST_SM_RESET_DELAY_MS);
896
897         return err;
898 }
899
900 static int idtcm_read_hw_rev_id(struct idtcm *idtcm, u8 *hw_rev_id)
901 {
902         return idtcm_read(idtcm, HW_REVISION, REV_ID, hw_rev_id, sizeof(u8));
903 }
904
905 static int idtcm_read_product_id(struct idtcm *idtcm, u16 *product_id)
906 {
907         int err;
908         u8 buf[2] = {0};
909
910         err = idtcm_read(idtcm, GENERAL_STATUS, PRODUCT_ID, buf, sizeof(buf));
911
912         *product_id = (buf[1] << 8) | buf[0];
913
914         return err;
915 }
916
917 static int idtcm_read_major_release(struct idtcm *idtcm, u8 *major)
918 {
919         int err;
920         u8 buf = 0;
921
922         err = idtcm_read(idtcm, GENERAL_STATUS, MAJ_REL, &buf, sizeof(buf));
923
924         *major = buf >> 1;
925
926         return err;
927 }
928
929 static int idtcm_read_minor_release(struct idtcm *idtcm, u8 *minor)
930 {
931         return idtcm_read(idtcm, GENERAL_STATUS, MIN_REL, minor, sizeof(u8));
932 }
933
934 static int idtcm_read_hotfix_release(struct idtcm *idtcm, u8 *hotfix)
935 {
936         return idtcm_read(idtcm,
937                           GENERAL_STATUS,
938                           HOTFIX_REL,
939                           hotfix,
940                           sizeof(u8));
941 }
942
943 static int idtcm_read_otp_scsr_config_select(struct idtcm *idtcm,
944                                              u8 *config_select)
945 {
946         return idtcm_read(idtcm, GENERAL_STATUS, OTP_SCSR_CONFIG_SELECT,
947                           config_select, sizeof(u8));
948 }
949
950 static int set_pll_output_mask(struct idtcm *idtcm, u16 addr, u8 val)
951 {
952         int err = 0;
953
954         switch (addr) {
955         case TOD0_OUT_ALIGN_MASK_ADDR:
956                 SET_U16_LSB(idtcm->channel[0].output_mask, val);
957                 break;
958         case TOD0_OUT_ALIGN_MASK_ADDR + 1:
959                 SET_U16_MSB(idtcm->channel[0].output_mask, val);
960                 break;
961         case TOD1_OUT_ALIGN_MASK_ADDR:
962                 SET_U16_LSB(idtcm->channel[1].output_mask, val);
963                 break;
964         case TOD1_OUT_ALIGN_MASK_ADDR + 1:
965                 SET_U16_MSB(idtcm->channel[1].output_mask, val);
966                 break;
967         case TOD2_OUT_ALIGN_MASK_ADDR:
968                 SET_U16_LSB(idtcm->channel[2].output_mask, val);
969                 break;
970         case TOD2_OUT_ALIGN_MASK_ADDR + 1:
971                 SET_U16_MSB(idtcm->channel[2].output_mask, val);
972                 break;
973         case TOD3_OUT_ALIGN_MASK_ADDR:
974                 SET_U16_LSB(idtcm->channel[3].output_mask, val);
975                 break;
976         case TOD3_OUT_ALIGN_MASK_ADDR + 1:
977                 SET_U16_MSB(idtcm->channel[3].output_mask, val);
978                 break;
979         default:
980                 err = -EFAULT; /* Bad address */;
981                 break;
982         }
983
984         return err;
985 }
986
987 static int set_tod_ptp_pll(struct idtcm *idtcm, u8 index, u8 pll)
988 {
989         if (index >= MAX_TOD) {
990                 dev_err(&idtcm->client->dev, "ToD%d not supported\n", index);
991                 return -EINVAL;
992         }
993
994         if (pll >= MAX_PLL) {
995                 dev_err(&idtcm->client->dev, "Pll%d not supported\n", pll);
996                 return -EINVAL;
997         }
998
999         idtcm->channel[index].pll = pll;
1000
1001         return 0;
1002 }
1003
1004 static int check_and_set_masks(struct idtcm *idtcm,
1005                                u16 regaddr,
1006                                u8 val)
1007 {
1008         int err = 0;
1009
1010         switch (regaddr) {
1011         case TOD_MASK_ADDR:
1012                 if ((val & 0xf0) || !(val & 0x0f)) {
1013                         dev_err(&idtcm->client->dev,
1014                                 "Invalid TOD mask 0x%hhx\n", val);
1015                         err = -EINVAL;
1016                 } else {
1017                         idtcm->tod_mask = val;
1018                 }
1019                 break;
1020         case TOD0_PTP_PLL_ADDR:
1021                 err = set_tod_ptp_pll(idtcm, 0, val);
1022                 break;
1023         case TOD1_PTP_PLL_ADDR:
1024                 err = set_tod_ptp_pll(idtcm, 1, val);
1025                 break;
1026         case TOD2_PTP_PLL_ADDR:
1027                 err = set_tod_ptp_pll(idtcm, 2, val);
1028                 break;
1029         case TOD3_PTP_PLL_ADDR:
1030                 err = set_tod_ptp_pll(idtcm, 3, val);
1031                 break;
1032         default:
1033                 err = set_pll_output_mask(idtcm, regaddr, val);
1034                 break;
1035         }
1036
1037         return err;
1038 }
1039
1040 static void display_pll_and_masks(struct idtcm *idtcm)
1041 {
1042         u8 i;
1043         u8 mask;
1044
1045         dev_dbg(&idtcm->client->dev, "tod_mask = 0x%02x\n", idtcm->tod_mask);
1046
1047         for (i = 0; i < MAX_TOD; i++) {
1048                 mask = 1 << i;
1049
1050                 if (mask & idtcm->tod_mask)
1051                         dev_dbg(&idtcm->client->dev,
1052                                 "TOD%d pll = %d    output_mask = 0x%04x\n",
1053                                 i, idtcm->channel[i].pll,
1054                                 idtcm->channel[i].output_mask);
1055         }
1056 }
1057
1058 static int idtcm_load_firmware(struct idtcm *idtcm,
1059                                struct device *dev)
1060 {
1061         char fname[128] = FW_FILENAME;
1062         const struct firmware *fw;
1063         struct idtcm_fwrc *rec;
1064         u32 regaddr;
1065         int err;
1066         s32 len;
1067         u8 val;
1068         u8 loaddr;
1069
1070         if (firmware) /* module parameter */
1071                 snprintf(fname, sizeof(fname), "%s", firmware);
1072
1073         dev_dbg(&idtcm->client->dev, "requesting firmware '%s'\n", fname);
1074
1075         err = request_firmware(&fw, fname, dev);
1076
1077         if (err) {
1078                 dev_err(&idtcm->client->dev,
1079                         "Failed at line %d in func %s!\n",
1080                         __LINE__,
1081                         __func__);
1082                 return err;
1083         }
1084
1085         dev_dbg(&idtcm->client->dev, "firmware size %zu bytes\n", fw->size);
1086
1087         rec = (struct idtcm_fwrc *) fw->data;
1088
1089         if (fw->size > 0)
1090                 idtcm_state_machine_reset(idtcm);
1091
1092         for (len = fw->size; len > 0; len -= sizeof(*rec)) {
1093
1094                 if (rec->reserved) {
1095                         dev_err(&idtcm->client->dev,
1096                                 "bad firmware, reserved field non-zero\n");
1097                         err = -EINVAL;
1098                 } else {
1099                         regaddr = rec->hiaddr << 8;
1100                         regaddr |= rec->loaddr;
1101
1102                         val = rec->value;
1103                         loaddr = rec->loaddr;
1104
1105                         rec++;
1106
1107                         err = check_and_set_masks(idtcm, regaddr, val);
1108                 }
1109
1110                 if (err != -EINVAL) {
1111                         err = 0;
1112
1113                         /* Top (status registers) and bottom are read-only */
1114                         if ((regaddr < GPIO_USER_CONTROL)
1115                             || (regaddr >= SCRATCH))
1116                                 continue;
1117
1118                         /* Page size 128, last 4 bytes of page skipped */
1119                         if (((loaddr > 0x7b) && (loaddr <= 0x7f))
1120                              || loaddr > 0xfb)
1121                                 continue;
1122
1123                         err = idtcm_write(idtcm, regaddr, 0, &val, sizeof(val));
1124                 }
1125
1126                 if (err)
1127                         goto out;
1128         }
1129
1130         display_pll_and_masks(idtcm);
1131
1132 out:
1133         release_firmware(fw);
1134         return err;
1135 }
1136
1137 static int idtcm_output_enable(struct idtcm_channel *channel,
1138                                bool enable, unsigned int outn)
1139 {
1140         struct idtcm *idtcm = channel->idtcm;
1141         int err;
1142         u8 val;
1143
1144         err = idtcm_read(idtcm, OUTPUT_MODULE_FROM_INDEX(outn),
1145                          OUT_CTRL_1, &val, sizeof(val));
1146
1147         if (err)
1148                 return err;
1149
1150         if (enable)
1151                 val |= SQUELCH_DISABLE;
1152         else
1153                 val &= ~SQUELCH_DISABLE;
1154
1155         return idtcm_write(idtcm, OUTPUT_MODULE_FROM_INDEX(outn),
1156                            OUT_CTRL_1, &val, sizeof(val));
1157 }
1158
1159 static int idtcm_output_mask_enable(struct idtcm_channel *channel,
1160                                     bool enable)
1161 {
1162         u16 mask;
1163         int err;
1164         u8 outn;
1165
1166         mask = channel->output_mask;
1167         outn = 0;
1168
1169         while (mask) {
1170
1171                 if (mask & 0x1) {
1172
1173                         err = idtcm_output_enable(channel, enable, outn);
1174
1175                         if (err)
1176                                 return err;
1177                 }
1178
1179                 mask >>= 0x1;
1180                 outn++;
1181         }
1182
1183         return 0;
1184 }
1185
1186 static int idtcm_perout_enable(struct idtcm_channel *channel,
1187                                bool enable,
1188                                struct ptp_perout_request *perout)
1189 {
1190         unsigned int flags = perout->flags;
1191
1192         if (flags == PEROUT_ENABLE_OUTPUT_MASK)
1193                 return idtcm_output_mask_enable(channel, enable);
1194
1195         /* Enable/disable individual output instead */
1196         return idtcm_output_enable(channel, enable, perout->index);
1197 }
1198
1199 static int idtcm_set_pll_mode(struct idtcm_channel *channel,
1200                               enum pll_mode pll_mode)
1201 {
1202         struct idtcm *idtcm = channel->idtcm;
1203         int err;
1204         u8 dpll_mode;
1205
1206         err = idtcm_read(idtcm, channel->dpll_n, DPLL_MODE,
1207                          &dpll_mode, sizeof(dpll_mode));
1208         if (err)
1209                 return err;
1210
1211         dpll_mode &= ~(PLL_MODE_MASK << PLL_MODE_SHIFT);
1212
1213         dpll_mode |= (pll_mode << PLL_MODE_SHIFT);
1214
1215         channel->pll_mode = pll_mode;
1216
1217         err = idtcm_write(idtcm, channel->dpll_n, DPLL_MODE,
1218                           &dpll_mode, sizeof(dpll_mode));
1219         if (err)
1220                 return err;
1221
1222         return 0;
1223 }
1224
1225 /* PTP Hardware Clock interface */
1226
1227 /**
1228  * @brief Maximum absolute value for write phase offset in picoseconds
1229  *
1230  * Destination signed register is 32-bit register in resolution of 50ps
1231  *
1232  * 0x7fffffff * 50 =  2147483647 * 50 = 107374182350
1233  */
1234 static int _idtcm_adjphase(struct idtcm_channel *channel, s32 delta_ns)
1235 {
1236         struct idtcm *idtcm = channel->idtcm;
1237
1238         int err;
1239         u8 i;
1240         u8 buf[4] = {0};
1241         s32 phase_50ps;
1242         s64 offset_ps;
1243
1244         if (channel->pll_mode != PLL_MODE_WRITE_PHASE) {
1245
1246                 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_PHASE);
1247
1248                 if (err)
1249                         return err;
1250
1251                 channel->write_phase_ready = 0;
1252
1253                 ptp_schedule_worker(channel->ptp_clock,
1254                                     msecs_to_jiffies(WR_PHASE_SETUP_MS));
1255         }
1256
1257         if (!channel->write_phase_ready)
1258                 delta_ns = 0;
1259
1260         offset_ps = (s64)delta_ns * 1000;
1261
1262         /*
1263          * Check for 32-bit signed max * 50:
1264          *
1265          * 0x7fffffff * 50 =  2147483647 * 50 = 107374182350
1266          */
1267         if (offset_ps > MAX_ABS_WRITE_PHASE_PICOSECONDS)
1268                 offset_ps = MAX_ABS_WRITE_PHASE_PICOSECONDS;
1269         else if (offset_ps < -MAX_ABS_WRITE_PHASE_PICOSECONDS)
1270                 offset_ps = -MAX_ABS_WRITE_PHASE_PICOSECONDS;
1271
1272         phase_50ps = DIV_ROUND_CLOSEST(div64_s64(offset_ps, 50), 1);
1273
1274         for (i = 0; i < 4; i++) {
1275                 buf[i] = phase_50ps & 0xff;
1276                 phase_50ps >>= 8;
1277         }
1278
1279         err = idtcm_write(idtcm, channel->dpll_phase, DPLL_WR_PHASE,
1280                           buf, sizeof(buf));
1281
1282         return err;
1283 }
1284
1285 static int _idtcm_adjfine(struct idtcm_channel *channel, long scaled_ppm)
1286 {
1287         struct idtcm *idtcm = channel->idtcm;
1288         u8 i;
1289         bool neg_adj = 0;
1290         int err;
1291         u8 buf[6] = {0};
1292         s64 fcw;
1293
1294         if (channel->pll_mode  != PLL_MODE_WRITE_FREQUENCY) {
1295                 err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
1296                 if (err)
1297                         return err;
1298         }
1299
1300         /*
1301          * Frequency Control Word unit is: 1.11 * 10^-10 ppm
1302          *
1303          * adjfreq:
1304          *       ppb * 10^9
1305          * FCW = ----------
1306          *          111
1307          *
1308          * adjfine:
1309          *       ppm_16 * 5^12
1310          * FCW = -------------
1311          *         111 * 2^4
1312          */
1313         if (scaled_ppm < 0) {
1314                 neg_adj = 1;
1315                 scaled_ppm = -scaled_ppm;
1316         }
1317
1318         /* 2 ^ -53 = 1.1102230246251565404236316680908e-16 */
1319         fcw = scaled_ppm * 244140625ULL;
1320
1321         fcw = div_u64(fcw, 1776);
1322
1323         if (neg_adj)
1324                 fcw = -fcw;
1325
1326         for (i = 0; i < 6; i++) {
1327                 buf[i] = fcw & 0xff;
1328                 fcw >>= 8;
1329         }
1330
1331         err = idtcm_write(idtcm, channel->dpll_freq, DPLL_WR_FREQ,
1332                           buf, sizeof(buf));
1333
1334         return err;
1335 }
1336
1337 static int idtcm_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
1338 {
1339         struct idtcm_channel *channel =
1340                 container_of(ptp, struct idtcm_channel, caps);
1341         struct idtcm *idtcm = channel->idtcm;
1342         int err;
1343
1344         mutex_lock(&idtcm->reg_lock);
1345
1346         err = _idtcm_gettime(channel, ts);
1347
1348         if (err)
1349                 dev_err(&idtcm->client->dev,
1350                         "Failed at line %d in func %s!\n",
1351                         __LINE__,
1352                         __func__);
1353
1354         mutex_unlock(&idtcm->reg_lock);
1355
1356         return err;
1357 }
1358
1359 static int idtcm_settime(struct ptp_clock_info *ptp,
1360                          const struct timespec64 *ts)
1361 {
1362         struct idtcm_channel *channel =
1363                 container_of(ptp, struct idtcm_channel, caps);
1364         struct idtcm *idtcm = channel->idtcm;
1365         int err;
1366
1367         mutex_lock(&idtcm->reg_lock);
1368
1369         err = _idtcm_settime(channel, ts, HW_TOD_WR_TRIG_SEL_MSB);
1370
1371         if (err)
1372                 dev_err(&idtcm->client->dev,
1373                         "Failed at line %d in func %s!\n",
1374                         __LINE__,
1375                         __func__);
1376
1377         mutex_unlock(&idtcm->reg_lock);
1378
1379         return err;
1380 }
1381
1382 static int idtcm_settime_v487(struct ptp_clock_info *ptp,
1383                          const struct timespec64 *ts)
1384 {
1385         struct idtcm_channel *channel =
1386                 container_of(ptp, struct idtcm_channel, caps);
1387         struct idtcm *idtcm = channel->idtcm;
1388         int err;
1389
1390         mutex_lock(&idtcm->reg_lock);
1391
1392         err = _idtcm_settime_v487(channel, ts, SCSR_TOD_WR_TYPE_SEL_ABSOLUTE);
1393
1394         if (err)
1395                 dev_err(&idtcm->client->dev,
1396                         "Failed at line %d in func %s!\n",
1397                         __LINE__,
1398                         __func__);
1399
1400         mutex_unlock(&idtcm->reg_lock);
1401
1402         return err;
1403 }
1404
1405 static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta)
1406 {
1407         struct idtcm_channel *channel =
1408                 container_of(ptp, struct idtcm_channel, caps);
1409         struct idtcm *idtcm = channel->idtcm;
1410         int err;
1411
1412         mutex_lock(&idtcm->reg_lock);
1413
1414         err = _idtcm_adjtime(channel, delta);
1415
1416         if (err)
1417                 dev_err(&idtcm->client->dev,
1418                         "Failed at line %d in func %s!\n",
1419                         __LINE__,
1420                         __func__);
1421
1422         mutex_unlock(&idtcm->reg_lock);
1423
1424         return err;
1425 }
1426
1427 static int idtcm_adjtime_v487(struct ptp_clock_info *ptp, s64 delta)
1428 {
1429         struct idtcm_channel *channel =
1430                 container_of(ptp, struct idtcm_channel, caps);
1431         struct idtcm *idtcm = channel->idtcm;
1432         struct timespec64 ts;
1433         enum scsr_tod_write_type_sel type;
1434         int err;
1435
1436         if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS_V487) {
1437                 err = idtcm_do_phase_pull_in(channel, delta, 0);
1438                 if (err)
1439                         dev_err(&idtcm->client->dev,
1440                                 "Failed at line %d in func %s!\n",
1441                                 __LINE__,
1442                                 __func__);
1443                 return err;
1444         }
1445
1446         if (delta >= 0) {
1447                 ts = ns_to_timespec64(delta);
1448                 type = SCSR_TOD_WR_TYPE_SEL_DELTA_PLUS;
1449         } else {
1450                 ts = ns_to_timespec64(-delta);
1451                 type = SCSR_TOD_WR_TYPE_SEL_DELTA_MINUS;
1452         }
1453
1454         mutex_lock(&idtcm->reg_lock);
1455
1456         err = _idtcm_settime_v487(channel, &ts, type);
1457
1458         if (err)
1459                 dev_err(&idtcm->client->dev,
1460                         "Failed at line %d in func %s!\n",
1461                         __LINE__,
1462                         __func__);
1463
1464         mutex_unlock(&idtcm->reg_lock);
1465
1466         return err;
1467 }
1468
1469 static int idtcm_adjphase(struct ptp_clock_info *ptp, s32 delta)
1470 {
1471         struct idtcm_channel *channel =
1472                 container_of(ptp, struct idtcm_channel, caps);
1473
1474         struct idtcm *idtcm = channel->idtcm;
1475
1476         int err;
1477
1478         mutex_lock(&idtcm->reg_lock);
1479
1480         err = _idtcm_adjphase(channel, delta);
1481
1482         if (err)
1483                 dev_err(&idtcm->client->dev,
1484                         "Failed at line %d in func %s!\n",
1485                         __LINE__,
1486                         __func__);
1487
1488         mutex_unlock(&idtcm->reg_lock);
1489
1490         return err;
1491 }
1492
1493 static int idtcm_adjfine(struct ptp_clock_info *ptp,  long scaled_ppm)
1494 {
1495         struct idtcm_channel *channel =
1496                 container_of(ptp, struct idtcm_channel, caps);
1497
1498         struct idtcm *idtcm = channel->idtcm;
1499
1500         int err;
1501
1502         mutex_lock(&idtcm->reg_lock);
1503
1504         err = _idtcm_adjfine(channel, scaled_ppm);
1505
1506         if (err)
1507                 dev_err(&idtcm->client->dev,
1508                         "Failed at line %d in func %s!\n",
1509                         __LINE__,
1510                         __func__);
1511
1512         mutex_unlock(&idtcm->reg_lock);
1513
1514         return err;
1515 }
1516
1517 static int idtcm_enable(struct ptp_clock_info *ptp,
1518                         struct ptp_clock_request *rq, int on)
1519 {
1520         int err;
1521
1522         struct idtcm_channel *channel =
1523                 container_of(ptp, struct idtcm_channel, caps);
1524
1525         switch (rq->type) {
1526         case PTP_CLK_REQ_PEROUT:
1527                 if (!on) {
1528                         err = idtcm_perout_enable(channel, false, &rq->perout);
1529                         if (err)
1530                                 dev_err(&channel->idtcm->client->dev,
1531                                         "Failed at line %d in func %s!\n",
1532                                         __LINE__,
1533                                         __func__);
1534                         return err;
1535                 }
1536
1537                 /* Only accept a 1-PPS aligned to the second. */
1538                 if (rq->perout.start.nsec || rq->perout.period.sec != 1 ||
1539                     rq->perout.period.nsec)
1540                         return -ERANGE;
1541
1542                 err = idtcm_perout_enable(channel, true, &rq->perout);
1543                 if (err)
1544                         dev_err(&channel->idtcm->client->dev,
1545                                 "Failed at line %d in func %s!\n",
1546                                 __LINE__,
1547                                 __func__);
1548                 return err;
1549         default:
1550                 break;
1551         }
1552
1553         return -EOPNOTSUPP;
1554 }
1555
1556 static int _enable_pll_tod_sync(struct idtcm *idtcm,
1557                                 u8 pll,
1558                                 u8 sync_src,
1559                                 u8 qn,
1560                                 u8 qn_plus_1)
1561 {
1562         int err;
1563         u8 val;
1564         u16 dpll;
1565         u16 out0 = 0, out1 = 0;
1566
1567         if ((qn == 0) && (qn_plus_1 == 0))
1568                 return 0;
1569
1570         switch (pll) {
1571         case 0:
1572                 dpll = DPLL_0;
1573                 if (qn)
1574                         out0 = OUTPUT_0;
1575                 if (qn_plus_1)
1576                         out1 = OUTPUT_1;
1577                 break;
1578         case 1:
1579                 dpll = DPLL_1;
1580                 if (qn)
1581                         out0 = OUTPUT_2;
1582                 if (qn_plus_1)
1583                         out1 = OUTPUT_3;
1584                 break;
1585         case 2:
1586                 dpll = DPLL_2;
1587                 if (qn)
1588                         out0 = OUTPUT_4;
1589                 if (qn_plus_1)
1590                         out1 = OUTPUT_5;
1591                 break;
1592         case 3:
1593                 dpll = DPLL_3;
1594                 if (qn)
1595                         out0 = OUTPUT_6;
1596                 if (qn_plus_1)
1597                         out1 = OUTPUT_7;
1598                 break;
1599         case 4:
1600                 dpll = DPLL_4;
1601                 if (qn)
1602                         out0 = OUTPUT_8;
1603                 break;
1604         case 5:
1605                 dpll = DPLL_5;
1606                 if (qn)
1607                         out0 = OUTPUT_9;
1608                 if (qn_plus_1)
1609                         out1 = OUTPUT_8;
1610                 break;
1611         case 6:
1612                 dpll = DPLL_6;
1613                 if (qn)
1614                         out0 = OUTPUT_10;
1615                 if (qn_plus_1)
1616                         out1 = OUTPUT_11;
1617                 break;
1618         case 7:
1619                 dpll = DPLL_7;
1620                 if (qn)
1621                         out0 = OUTPUT_11;
1622                 break;
1623         default:
1624                 return -EINVAL;
1625         }
1626
1627         /*
1628          * Enable OUTPUT OUT_SYNC.
1629          */
1630         if (out0) {
1631                 err = idtcm_read(idtcm, out0, OUT_CTRL_1, &val, sizeof(val));
1632
1633                 if (err)
1634                         return err;
1635
1636                 val &= ~OUT_SYNC_DISABLE;
1637
1638                 err = idtcm_write(idtcm, out0, OUT_CTRL_1, &val, sizeof(val));
1639
1640                 if (err)
1641                         return err;
1642         }
1643
1644         if (out1) {
1645                 err = idtcm_read(idtcm, out1, OUT_CTRL_1, &val, sizeof(val));
1646
1647                 if (err)
1648                         return err;
1649
1650                 val &= ~OUT_SYNC_DISABLE;
1651
1652                 err = idtcm_write(idtcm, out1, OUT_CTRL_1, &val, sizeof(val));
1653
1654                 if (err)
1655                         return err;
1656         }
1657
1658         /* enable dpll sync tod pps, must be set before dpll_mode */
1659         err = idtcm_read(idtcm, dpll, DPLL_TOD_SYNC_CFG, &val, sizeof(val));
1660         if (err)
1661                 return err;
1662
1663         val &= ~(TOD_SYNC_SOURCE_MASK << TOD_SYNC_SOURCE_SHIFT);
1664         val |= (sync_src << TOD_SYNC_SOURCE_SHIFT);
1665         val |= TOD_SYNC_EN;
1666
1667         return idtcm_write(idtcm, dpll, DPLL_TOD_SYNC_CFG, &val, sizeof(val));
1668 }
1669
1670 static int idtcm_enable_tod_sync(struct idtcm_channel *channel)
1671 {
1672         struct idtcm *idtcm = channel->idtcm;
1673
1674         u8 pll;
1675         u8 sync_src;
1676         u8 qn;
1677         u8 qn_plus_1;
1678         u8 cfg;
1679         int err = 0;
1680         u16 output_mask = channel->output_mask;
1681         u8 out8_mux = 0;
1682         u8 out11_mux = 0;
1683         u8 temp;
1684
1685         /*
1686          * set tod_out_sync_enable to 0.
1687          */
1688         err = idtcm_read(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1689         if (err)
1690                 return err;
1691
1692         cfg &= ~TOD_OUT_SYNC_ENABLE;
1693
1694         err = idtcm_write(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1695         if (err)
1696                 return err;
1697
1698         switch (channel->tod_n) {
1699         case TOD_0:
1700                 sync_src = 0;
1701                 break;
1702         case TOD_1:
1703                 sync_src = 1;
1704                 break;
1705         case TOD_2:
1706                 sync_src = 2;
1707                 break;
1708         case TOD_3:
1709                 sync_src = 3;
1710                 break;
1711         default:
1712                 return -EINVAL;
1713         }
1714
1715         err = idtcm_read(idtcm, 0, HW_Q8_CTRL_SPARE,
1716                          &temp, sizeof(temp));
1717         if (err)
1718                 return err;
1719
1720         if ((temp & Q9_TO_Q8_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK) ==
1721             Q9_TO_Q8_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK)
1722                 out8_mux = 1;
1723
1724         err = idtcm_read(idtcm, 0, HW_Q11_CTRL_SPARE,
1725                          &temp, sizeof(temp));
1726         if (err)
1727                 return err;
1728
1729         if ((temp & Q10_TO_Q11_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK) ==
1730             Q10_TO_Q11_FANOUT_AND_CLOCK_SYNC_ENABLE_MASK)
1731                 out11_mux = 1;
1732
1733         for (pll = 0; pll < 8; pll++) {
1734                 qn = 0;
1735                 qn_plus_1 = 0;
1736
1737                 if (pll < 4) {
1738                         /* First 4 pll has 2 outputs */
1739                         qn = output_mask & 0x1;
1740                         output_mask = output_mask >> 1;
1741                         qn_plus_1 = output_mask & 0x1;
1742                         output_mask = output_mask >> 1;
1743                 } else if (pll == 4) {
1744                         if (out8_mux == 0) {
1745                                 qn = output_mask & 0x1;
1746                                 output_mask = output_mask >> 1;
1747                         }
1748                 } else if (pll == 5) {
1749                         if (out8_mux) {
1750                                 qn_plus_1 = output_mask & 0x1;
1751                                 output_mask = output_mask >> 1;
1752                         }
1753                         qn = output_mask & 0x1;
1754                         output_mask = output_mask >> 1;
1755                 } else if (pll == 6) {
1756                         qn = output_mask & 0x1;
1757                         output_mask = output_mask >> 1;
1758                         if (out11_mux) {
1759                                 qn_plus_1 = output_mask & 0x1;
1760                                 output_mask = output_mask >> 1;
1761                         }
1762                 } else if (pll == 7) {
1763                         if (out11_mux == 0) {
1764                                 qn = output_mask & 0x1;
1765                                 output_mask = output_mask >> 1;
1766                         }
1767                 }
1768
1769                 if ((qn != 0) || (qn_plus_1 != 0))
1770                         err = _enable_pll_tod_sync(idtcm, pll, sync_src, qn,
1771                                                qn_plus_1);
1772
1773                 if (err)
1774                         return err;
1775         }
1776
1777         return err;
1778 }
1779
1780 static int idtcm_enable_tod(struct idtcm_channel *channel)
1781 {
1782         struct idtcm *idtcm = channel->idtcm;
1783         struct timespec64 ts = {0, 0};
1784         u8 cfg;
1785         int err;
1786
1787         /*
1788          * Start the TOD clock ticking.
1789          */
1790         err = idtcm_read(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1791         if (err)
1792                 return err;
1793
1794         cfg |= TOD_ENABLE;
1795
1796         err = idtcm_write(idtcm, channel->tod_n, TOD_CFG, &cfg, sizeof(cfg));
1797         if (err)
1798                 return err;
1799
1800         return _idtcm_settime(channel, &ts, HW_TOD_WR_TRIG_SEL_MSB);
1801 }
1802
1803 static void idtcm_display_version_info(struct idtcm *idtcm)
1804 {
1805         u8 major;
1806         u8 minor;
1807         u8 hotfix;
1808         u16 product_id;
1809         u8 hw_rev_id;
1810         u8 config_select;
1811         char *fmt = "%d.%d.%d, Id: 0x%04x  HW Rev: %d  OTP Config Select: %d\n";
1812
1813         idtcm_read_major_release(idtcm, &major);
1814         idtcm_read_minor_release(idtcm, &minor);
1815         idtcm_read_hotfix_release(idtcm, &hotfix);
1816
1817         idtcm_read_product_id(idtcm, &product_id);
1818         idtcm_read_hw_rev_id(idtcm, &hw_rev_id);
1819
1820         idtcm_read_otp_scsr_config_select(idtcm, &config_select);
1821
1822         snprintf(idtcm->version, sizeof(idtcm->version), "%u.%u.%u",
1823                  major, minor, hotfix);
1824
1825         dev_info(&idtcm->client->dev, fmt, major, minor, hotfix,
1826                  product_id, hw_rev_id, config_select);
1827 }
1828
1829 static const struct ptp_clock_info idtcm_caps_v487 = {
1830         .owner          = THIS_MODULE,
1831         .max_adj        = 244000,
1832         .n_per_out      = 12,
1833         .adjphase       = &idtcm_adjphase,
1834         .adjfine        = &idtcm_adjfine,
1835         .adjtime        = &idtcm_adjtime_v487,
1836         .gettime64      = &idtcm_gettime,
1837         .settime64      = &idtcm_settime_v487,
1838         .enable         = &idtcm_enable,
1839         .do_aux_work    = &set_write_phase_ready,
1840 };
1841
1842 static const struct ptp_clock_info idtcm_caps = {
1843         .owner          = THIS_MODULE,
1844         .max_adj        = 244000,
1845         .n_per_out      = 12,
1846         .adjphase       = &idtcm_adjphase,
1847         .adjfine        = &idtcm_adjfine,
1848         .adjtime        = &idtcm_adjtime,
1849         .gettime64      = &idtcm_gettime,
1850         .settime64      = &idtcm_settime,
1851         .enable         = &idtcm_enable,
1852         .do_aux_work    = &set_write_phase_ready,
1853 };
1854
1855 static int configure_channel_pll(struct idtcm_channel *channel)
1856 {
1857         int err = 0;
1858
1859         switch (channel->pll) {
1860         case 0:
1861                 channel->dpll_freq = DPLL_FREQ_0;
1862                 channel->dpll_n = DPLL_0;
1863                 channel->hw_dpll_n = HW_DPLL_0;
1864                 channel->dpll_phase = DPLL_PHASE_0;
1865                 channel->dpll_ctrl_n = DPLL_CTRL_0;
1866                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_0;
1867                 break;
1868         case 1:
1869                 channel->dpll_freq = DPLL_FREQ_1;
1870                 channel->dpll_n = DPLL_1;
1871                 channel->hw_dpll_n = HW_DPLL_1;
1872                 channel->dpll_phase = DPLL_PHASE_1;
1873                 channel->dpll_ctrl_n = DPLL_CTRL_1;
1874                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_1;
1875                 break;
1876         case 2:
1877                 channel->dpll_freq = DPLL_FREQ_2;
1878                 channel->dpll_n = DPLL_2;
1879                 channel->hw_dpll_n = HW_DPLL_2;
1880                 channel->dpll_phase = DPLL_PHASE_2;
1881                 channel->dpll_ctrl_n = DPLL_CTRL_2;
1882                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_2;
1883                 break;
1884         case 3:
1885                 channel->dpll_freq = DPLL_FREQ_3;
1886                 channel->dpll_n = DPLL_3;
1887                 channel->hw_dpll_n = HW_DPLL_3;
1888                 channel->dpll_phase = DPLL_PHASE_3;
1889                 channel->dpll_ctrl_n = DPLL_CTRL_3;
1890                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_3;
1891                 break;
1892         case 4:
1893                 channel->dpll_freq = DPLL_FREQ_4;
1894                 channel->dpll_n = DPLL_4;
1895                 channel->hw_dpll_n = HW_DPLL_4;
1896                 channel->dpll_phase = DPLL_PHASE_4;
1897                 channel->dpll_ctrl_n = DPLL_CTRL_4;
1898                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_4;
1899                 break;
1900         case 5:
1901                 channel->dpll_freq = DPLL_FREQ_5;
1902                 channel->dpll_n = DPLL_5;
1903                 channel->hw_dpll_n = HW_DPLL_5;
1904                 channel->dpll_phase = DPLL_PHASE_5;
1905                 channel->dpll_ctrl_n = DPLL_CTRL_5;
1906                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_5;
1907                 break;
1908         case 6:
1909                 channel->dpll_freq = DPLL_FREQ_6;
1910                 channel->dpll_n = DPLL_6;
1911                 channel->hw_dpll_n = HW_DPLL_6;
1912                 channel->dpll_phase = DPLL_PHASE_6;
1913                 channel->dpll_ctrl_n = DPLL_CTRL_6;
1914                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_6;
1915                 break;
1916         case 7:
1917                 channel->dpll_freq = DPLL_FREQ_7;
1918                 channel->dpll_n = DPLL_7;
1919                 channel->hw_dpll_n = HW_DPLL_7;
1920                 channel->dpll_phase = DPLL_PHASE_7;
1921                 channel->dpll_ctrl_n = DPLL_CTRL_7;
1922                 channel->dpll_phase_pull_in = DPLL_PHASE_PULL_IN_7;
1923                 break;
1924         default:
1925                 err = -EINVAL;
1926         }
1927
1928         return err;
1929 }
1930
1931 static int idtcm_enable_channel(struct idtcm *idtcm, u32 index)
1932 {
1933         struct idtcm_channel *channel;
1934         int err;
1935
1936         if (!(index < MAX_TOD))
1937                 return -EINVAL;
1938
1939         channel = &idtcm->channel[index];
1940
1941         /* Set pll addresses */
1942         err = configure_channel_pll(channel);
1943         if (err)
1944                 return err;
1945
1946         /* Set tod addresses */
1947         switch (index) {
1948         case 0:
1949                 channel->tod_read_primary = TOD_READ_PRIMARY_0;
1950                 channel->tod_write = TOD_WRITE_0;
1951                 channel->tod_n = TOD_0;
1952                 break;
1953         case 1:
1954                 channel->tod_read_primary = TOD_READ_PRIMARY_1;
1955                 channel->tod_write = TOD_WRITE_1;
1956                 channel->tod_n = TOD_1;
1957                 break;
1958         case 2:
1959                 channel->tod_read_primary = TOD_READ_PRIMARY_2;
1960                 channel->tod_write = TOD_WRITE_2;
1961                 channel->tod_n = TOD_2;
1962                 break;
1963         case 3:
1964                 channel->tod_read_primary = TOD_READ_PRIMARY_3;
1965                 channel->tod_write = TOD_WRITE_3;
1966                 channel->tod_n = TOD_3;
1967                 break;
1968         default:
1969                 return -EINVAL;
1970         }
1971
1972         channel->idtcm = idtcm;
1973
1974         if (idtcm_strverscmp(idtcm->version, "4.8.7") >= 0)
1975                 channel->caps = idtcm_caps_v487;
1976         else
1977                 channel->caps = idtcm_caps;
1978
1979         snprintf(channel->caps.name, sizeof(channel->caps.name),
1980                  "IDT CM TOD%u", index);
1981
1982         if (idtcm_strverscmp(idtcm->version, "4.8.7") >= 0) {
1983                 err = idtcm_enable_tod_sync(channel);
1984                 if (err) {
1985                         dev_err(&idtcm->client->dev,
1986                                 "Failed at line %d in func %s!\n",
1987                                 __LINE__,
1988                                 __func__);
1989                         return err;
1990                 }
1991         }
1992
1993         err = idtcm_set_pll_mode(channel, PLL_MODE_WRITE_FREQUENCY);
1994         if (err) {
1995                 dev_err(&idtcm->client->dev,
1996                         "Failed at line %d in func %s!\n",
1997                         __LINE__,
1998                         __func__);
1999                 return err;
2000         }
2001
2002         err = idtcm_enable_tod(channel);
2003         if (err) {
2004                 dev_err(&idtcm->client->dev,
2005                         "Failed at line %d in func %s!\n",
2006                         __LINE__,
2007                         __func__);
2008                 return err;
2009         }
2010
2011         channel->ptp_clock = ptp_clock_register(&channel->caps, NULL);
2012
2013         if (IS_ERR(channel->ptp_clock)) {
2014                 err = PTR_ERR(channel->ptp_clock);
2015                 channel->ptp_clock = NULL;
2016                 return err;
2017         }
2018
2019         if (!channel->ptp_clock)
2020                 return -ENOTSUPP;
2021
2022         channel->write_phase_ready = 0;
2023
2024         dev_info(&idtcm->client->dev, "PLL%d registered as ptp%d\n",
2025                  index, channel->ptp_clock->index);
2026
2027         return 0;
2028 }
2029
2030 static void ptp_clock_unregister_all(struct idtcm *idtcm)
2031 {
2032         u8 i;
2033         struct idtcm_channel *channel;
2034
2035         for (i = 0; i < MAX_TOD; i++) {
2036
2037                 channel = &idtcm->channel[i];
2038
2039                 if (channel->ptp_clock)
2040                         ptp_clock_unregister(channel->ptp_clock);
2041         }
2042 }
2043
2044 static void set_default_masks(struct idtcm *idtcm)
2045 {
2046         idtcm->tod_mask = DEFAULT_TOD_MASK;
2047
2048         idtcm->channel[0].pll = DEFAULT_TOD0_PTP_PLL;
2049         idtcm->channel[1].pll = DEFAULT_TOD1_PTP_PLL;
2050         idtcm->channel[2].pll = DEFAULT_TOD2_PTP_PLL;
2051         idtcm->channel[3].pll = DEFAULT_TOD3_PTP_PLL;
2052
2053         idtcm->channel[0].output_mask = DEFAULT_OUTPUT_MASK_PLL0;
2054         idtcm->channel[1].output_mask = DEFAULT_OUTPUT_MASK_PLL1;
2055         idtcm->channel[2].output_mask = DEFAULT_OUTPUT_MASK_PLL2;
2056         idtcm->channel[3].output_mask = DEFAULT_OUTPUT_MASK_PLL3;
2057 }
2058
2059 static int idtcm_probe(struct i2c_client *client,
2060                        const struct i2c_device_id *id)
2061 {
2062         struct idtcm *idtcm;
2063         int err;
2064         u8 i;
2065         char *fmt = "Failed at %d in line %s with channel output %d!\n";
2066
2067         /* Unused for now */
2068         (void)id;
2069
2070         idtcm = devm_kzalloc(&client->dev, sizeof(struct idtcm), GFP_KERNEL);
2071
2072         if (!idtcm)
2073                 return -ENOMEM;
2074
2075         idtcm->client = client;
2076         idtcm->page_offset = 0xff;
2077         idtcm->calculate_overhead_flag = 0;
2078
2079         set_default_masks(idtcm);
2080
2081         mutex_init(&idtcm->reg_lock);
2082         mutex_lock(&idtcm->reg_lock);
2083
2084         idtcm_display_version_info(idtcm);
2085
2086         err = idtcm_load_firmware(idtcm, &client->dev);
2087
2088         if (err)
2089                 dev_warn(&idtcm->client->dev,
2090                          "loading firmware failed with %d\n", err);
2091
2092         if (idtcm->tod_mask) {
2093                 for (i = 0; i < MAX_TOD; i++) {
2094                         if (idtcm->tod_mask & (1 << i)) {
2095                                 err = idtcm_enable_channel(idtcm, i);
2096                                 if (err) {
2097                                         dev_err(&idtcm->client->dev,
2098                                                 fmt,
2099                                                 __LINE__,
2100                                                 __func__,
2101                                                 i);
2102                                         break;
2103                                 }
2104                         }
2105                 }
2106         } else {
2107                 dev_err(&idtcm->client->dev,
2108                         "no PLLs flagged as PHCs, nothing to do\n");
2109                 err = -ENODEV;
2110         }
2111
2112         mutex_unlock(&idtcm->reg_lock);
2113
2114         if (err) {
2115                 ptp_clock_unregister_all(idtcm);
2116                 return err;
2117         }
2118
2119         i2c_set_clientdata(client, idtcm);
2120
2121         return 0;
2122 }
2123
2124 static int idtcm_remove(struct i2c_client *client)
2125 {
2126         struct idtcm *idtcm = i2c_get_clientdata(client);
2127
2128         ptp_clock_unregister_all(idtcm);
2129
2130         mutex_destroy(&idtcm->reg_lock);
2131
2132         return 0;
2133 }
2134
2135 #ifdef CONFIG_OF
2136 static const struct of_device_id idtcm_dt_id[] = {
2137         { .compatible = "idt,8a34000" },
2138         { .compatible = "idt,8a34001" },
2139         { .compatible = "idt,8a34002" },
2140         { .compatible = "idt,8a34003" },
2141         { .compatible = "idt,8a34004" },
2142         { .compatible = "idt,8a34005" },
2143         { .compatible = "idt,8a34006" },
2144         { .compatible = "idt,8a34007" },
2145         { .compatible = "idt,8a34008" },
2146         { .compatible = "idt,8a34009" },
2147         { .compatible = "idt,8a34010" },
2148         { .compatible = "idt,8a34011" },
2149         { .compatible = "idt,8a34012" },
2150         { .compatible = "idt,8a34013" },
2151         { .compatible = "idt,8a34014" },
2152         { .compatible = "idt,8a34015" },
2153         { .compatible = "idt,8a34016" },
2154         { .compatible = "idt,8a34017" },
2155         { .compatible = "idt,8a34018" },
2156         { .compatible = "idt,8a34019" },
2157         { .compatible = "idt,8a34040" },
2158         { .compatible = "idt,8a34041" },
2159         { .compatible = "idt,8a34042" },
2160         { .compatible = "idt,8a34043" },
2161         { .compatible = "idt,8a34044" },
2162         { .compatible = "idt,8a34045" },
2163         { .compatible = "idt,8a34046" },
2164         { .compatible = "idt,8a34047" },
2165         { .compatible = "idt,8a34048" },
2166         { .compatible = "idt,8a34049" },
2167         {},
2168 };
2169 MODULE_DEVICE_TABLE(of, idtcm_dt_id);
2170 #endif
2171
2172 static const struct i2c_device_id idtcm_i2c_id[] = {
2173         { "8a34000" },
2174         { "8a34001" },
2175         { "8a34002" },
2176         { "8a34003" },
2177         { "8a34004" },
2178         { "8a34005" },
2179         { "8a34006" },
2180         { "8a34007" },
2181         { "8a34008" },
2182         { "8a34009" },
2183         { "8a34010" },
2184         { "8a34011" },
2185         { "8a34012" },
2186         { "8a34013" },
2187         { "8a34014" },
2188         { "8a34015" },
2189         { "8a34016" },
2190         { "8a34017" },
2191         { "8a34018" },
2192         { "8a34019" },
2193         { "8a34040" },
2194         { "8a34041" },
2195         { "8a34042" },
2196         { "8a34043" },
2197         { "8a34044" },
2198         { "8a34045" },
2199         { "8a34046" },
2200         { "8a34047" },
2201         { "8a34048" },
2202         { "8a34049" },
2203         {},
2204 };
2205 MODULE_DEVICE_TABLE(i2c, idtcm_i2c_id);
2206
2207 static struct i2c_driver idtcm_driver = {
2208         .driver = {
2209                 .of_match_table = of_match_ptr(idtcm_dt_id),
2210                 .name           = "idtcm",
2211         },
2212         .probe          = idtcm_probe,
2213         .remove         = idtcm_remove,
2214         .id_table       = idtcm_i2c_id,
2215 };
2216
2217 module_i2c_driver(idtcm_driver);