Lines Matching +full:24 +full:- +full:21
1 // SPDX-License-Identifier: GPL-2.0+
5 * Guochun Huang <hero.huang@rock-chips.com>
8 #include <dt-bindings/phy/phy.h>
73 * The selection between the 400-based or 200-based values for REG_400M
337 {6500, 32, 117, 31, 28, 30, 56, 27, 24, 44, 37},
338 {6490, 32, 116, 31, 28, 30, 56, 27, 24, 44, 37},
339 {6480, 32, 116, 31, 28, 30, 56, 27, 24, 44, 37},
340 {6470, 32, 116, 31, 28, 30, 56, 27, 24, 44, 37},
341 {6460, 32, 116, 31, 28, 30, 56, 27, 24, 44, 37},
342 {6450, 32, 115, 31, 28, 30, 56, 27, 24, 44, 37},
343 {6440, 32, 115, 31, 28, 30, 56, 27, 24, 44, 37},
344 {6430, 31, 116, 31, 28, 30, 55, 27, 24, 44, 37},
345 {6420, 31, 116, 31, 28, 30, 55, 27, 24, 44, 37},
346 {6410, 31, 116, 31, 27, 30, 55, 27, 24, 44, 37},
397 {5900, 29, 106, 28, 25, 28, 50, 24, 22, 40, 33},
398 {5890, 29, 105, 28, 25, 28, 50, 24, 22, 40, 33},
399 {5880, 29, 105, 28, 25, 28, 50, 24, 22, 40, 33},
400 {5870, 29, 105, 28, 25, 27, 51, 24, 22, 40, 33},
401 {5860, 29, 105, 28, 25, 27, 51, 24, 21, 40, 33},
402 {5850, 29, 104, 28, 25, 27, 50, 24, 21, 40, 33},
403 {5840, 28, 105, 28, 25, 27, 50, 24, 21, 40, 33},
404 {5830, 28, 105, 28, 25, 27, 50, 24, 21, 40, 33},
405 {5820, 28, 105, 28, 25, 27, 50, 24, 21, 40, 33},
406 {5810, 28, 104, 28, 25, 27, 50, 24, 21, 39, 33},
407 {5800, 28, 104, 27, 25, 27, 50, 24, 21, 39, 33},
408 {5790, 28, 104, 27, 25, 27, 50, 24, 21, 39, 33},
409 {5780, 28, 104, 27, 25, 27, 49, 24, 21, 39, 33},
410 {5770, 28, 104, 27, 25, 27, 49, 24, 21, 39, 33},
411 {5760, 28, 103, 27, 25, 27, 49, 24, 21, 39, 33},
412 {5750, 28, 103, 27, 25, 27, 49, 24, 21, 39, 33},
413 {5740, 28, 103, 27, 25, 27, 49, 24, 21, 39, 33},
414 {5730, 28, 103, 27, 25, 27, 49, 24, 21, 39, 32},
415 {5720, 28, 102, 27, 25, 27, 49, 24, 21, 39, 32},
416 {5710, 28, 102, 27, 25, 27, 48, 24, 21, 39, 32},
417 {5700, 28, 102, 27, 24, 27, 48, 24, 21, 39, 32},
418 {5690, 28, 102, 27, 24, 27, 48, 24, 21, 39, 32},
419 {5680, 28, 101, 27, 24, 27, 48, 24, 21, 39, 32},
420 {5670, 28, 101, 27, 24, 27, 48, 23, 21, 38, 32},
421 {5660, 28, 101, 27, 24, 26, 49, 23, 21, 38, 32},
422 {5650, 28, 101, 27, 24, 26, 49, 23, 21, 38, 32},
423 {5640, 27, 101, 27, 24, 26, 48, 23, 21, 38, 32},
424 {5630, 27, 101, 27, 24, 26, 48, 23, 21, 38, 32},
425 {5620, 27, 101, 27, 24, 26, 48, 23, 21, 38, 32},
426 {5610, 27, 101, 27, 24, 26, 48, 23, 21, 38, 32},
427 {5600, 27, 101, 26, 24, 26, 48, 23, 20, 38, 32},
428 {5590, 27, 100, 26, 24, 26, 48, 23, 20, 38, 32},
429 {5580, 27, 100, 26, 24, 26, 48, 23, 20, 38, 32},
430 {5570, 27, 100, 26, 24, 26, 48, 23, 20, 38, 31},
431 {5560, 27, 100, 26, 24, 26, 47, 23, 20, 38, 31},
432 {5550, 27, 99, 26, 24, 26, 47, 23, 20, 38, 31},
433 {5540, 27, 99, 26, 24, 26, 47, 23, 20, 38, 31},
434 {5530, 27, 99, 26, 24, 26, 47, 23, 20, 38, 31},
435 {5520, 27, 99, 26, 24, 26, 47, 23, 20, 37, 31},
436 {5510, 27, 98, 26, 24, 26, 47, 23, 20, 37, 31},
437 {5500, 27, 98, 26, 24, 26, 47, 23, 20, 37, 31},
438 {5490, 27, 98, 26, 24, 26, 46, 23, 20, 37, 31},
439 {5480, 27, 98, 26, 24, 26, 46, 23, 20, 37, 31},
462 {5250, 25, 94, 25, 23, 24, 45, 22, 19, 36, 30},
463 {5240, 25, 94, 25, 23, 24, 45, 22, 19, 36, 29},
464 {5230, 25, 94, 25, 22, 24, 45, 22, 19, 35, 29},
465 {5220, 25, 94, 25, 22, 24, 45, 22, 19, 35, 29},
466 {5210, 25, 93, 25, 22, 24, 45, 22, 19, 35, 29},
467 {5200, 25, 93, 24, 22, 24, 44, 21, 19, 35, 29},
468 {5190, 25, 93, 24, 22, 24, 44, 21, 19, 35, 29},
469 {5180, 25, 93, 24, 22, 24, 44, 21, 19, 35, 29},
470 {5170, 25, 92, 24, 22, 24, 44, 21, 19, 35, 29},
471 {5160, 25, 92, 24, 22, 24, 44, 21, 19, 35, 29},
472 {5150, 25, 92, 24, 22, 24, 44, 21, 19, 35, 29},
473 {5140, 25, 92, 24, 22, 24, 44, 21, 19, 35, 29},
474 {5130, 25, 92, 24, 22, 24, 43, 21, 19, 35, 29},
475 {5120, 25, 91, 24, 22, 24, 43, 21, 19, 35, 29},
476 {5110, 25, 91, 24, 22, 24, 43, 21, 19, 35, 29},
477 {5100, 25, 91, 24, 22, 24, 43, 21, 19, 35, 29},
478 {5090, 25, 91, 24, 22, 24, 43, 21, 19, 34, 29},
479 {5080, 25, 90, 24, 22, 24, 43, 21, 19, 34, 29},
480 {5070, 25, 90, 24, 22, 24, 43, 21, 19, 34, 28},
481 {5060, 25, 90, 24, 22, 24, 43, 21, 18, 34, 28},
482 {5050, 24, 91, 24, 22, 24, 42, 21, 18, 34, 28},
483 {5040, 24, 90, 24, 22, 23, 43, 21, 18, 34, 28},
484 {5030, 24, 90, 24, 22, 23, 43, 21, 18, 34, 28},
485 {5020, 24, 90, 24, 22, 23, 43, 21, 18, 34, 28},
486 {5010, 24, 90, 24, 22, 23, 43, 21, 18, 34, 28},
487 {5000, 24, 89, 23, 21, 23, 43, 21, 18, 34, 28},
488 {4990, 24, 89, 23, 21, 23, 43, 21, 18, 34, 28},
489 {4980, 24, 89, 23, 21, 23, 42, 21, 18, 34, 28},
490 {4970, 24, 89, 23, 21, 23, 42, 21, 18, 34, 28},
491 {4960, 24, 89, 23, 21, 23, 42, 20, 18, 34, 28},
492 {4950, 24, 88, 23, 21, 23, 42, 20, 18, 34, 28},
493 {4940, 24, 88, 23, 21, 23, 42, 20, 18, 33, 28},
494 {4930, 24, 88, 23, 21, 23, 42, 20, 18, 33, 28},
495 {4920, 24, 88, 23, 21, 23, 42, 20, 18, 33, 28},
496 {4910, 24, 87, 23, 21, 23, 41, 20, 18, 33, 28},
497 {4900, 24, 87, 23, 21, 23, 41, 20, 18, 33, 27},
498 {4890, 24, 87, 23, 21, 23, 41, 20, 18, 33, 27},
499 {4880, 24, 87, 23, 21, 23, 41, 20, 18, 33, 27},
500 {4870, 24, 86, 23, 21, 23, 41, 20, 18, 33, 27},
501 {4860, 24, 86, 23, 21, 23, 41, 20, 18, 33, 27},
502 {4850, 23, 87, 23, 21, 23, 41, 20, 18, 33, 27},
503 {4840, 23, 87, 23, 21, 23, 40, 20, 18, 33, 27},
504 {4830, 23, 86, 23, 21, 22, 41, 20, 18, 33, 27},
505 {4820, 23, 86, 23, 21, 22, 41, 20, 18, 33, 27},
506 {4810, 23, 86, 23, 21, 22, 41, 20, 18, 33, 27},
507 {4800, 23, 86, 22, 21, 22, 41, 20, 17, 32, 27},
508 {4790, 23, 86, 22, 21, 22, 41, 20, 17, 32, 27},
509 {4780, 23, 85, 22, 21, 22, 41, 20, 17, 32, 27},
510 {4770, 23, 85, 22, 21, 22, 41, 20, 17, 32, 27},
525 {4620, 22, 83, 22, 20, 21, 39, 19, 17, 31, 26},
526 {4610, 22, 82, 22, 20, 21, 39, 19, 17, 31, 26},
527 {4600, 22, 82, 21, 20, 21, 39, 19, 17, 31, 26},
528 {4590, 22, 82, 21, 20, 21, 39, 19, 17, 31, 26},
529 {4580, 22, 82, 21, 20, 21, 39, 19, 17, 31, 26},
530 {4570, 22, 81, 21, 20, 21, 39, 19, 17, 31, 25},
531 {4560, 22, 81, 21, 20, 21, 39, 19, 17, 31, 25},
532 {4550, 22, 81, 21, 20, 21, 38, 19, 17, 31, 25},
533 {4540, 22, 81, 21, 20, 21, 38, 19, 17, 31, 25},
534 {4530, 22, 80, 21, 19, 21, 38, 19, 16, 31, 25},
535 {4520, 22, 80, 21, 19, 21, 38, 19, 16, 31, 25},
536 {4510, 22, 80, 21, 19, 21, 38, 19, 16, 31, 25},
537 {4500, 22, 80, 21, 19, 21, 38, 19, 16, 30, 25},
538 {4490, 22, 80, 21, 19, 21, 38, 18, 16, 30, 25},
539 {4480, 22, 79, 21, 19, 21, 38, 18, 16, 30, 25},
540 {4470, 22, 79, 21, 19, 21, 37, 18, 16, 30, 25},
541 {4460, 22, 79, 21, 19, 21, 37, 18, 16, 30, 25},
542 {4450, 21, 80, 21, 19, 21, 37, 18, 16, 30, 25},
543 {4440, 21, 79, 21, 19, 21, 37, 18, 16, 30, 25},
544 {4430, 21, 79, 21, 19, 21, 37, 18, 16, 30, 25},
545 {4420, 21, 79, 21, 19, 21, 37, 18, 16, 30, 25},
546 {4410, 21, 79, 21, 19, 20, 38, 18, 16, 30, 25},
547 {4400, 21, 78, 20, 19, 20, 37, 18, 16, 30, 24},
548 {4390, 21, 78, 20, 19, 20, 37, 18, 16, 30, 24},
549 {4380, 21, 78, 20, 19, 20, 37, 18, 16, 30, 24},
550 {4370, 21, 78, 20, 19, 20, 37, 18, 16, 30, 24},
551 {4360, 21, 77, 20, 19, 20, 37, 18, 16, 29, 24},
552 {4350, 21, 77, 20, 19, 20, 37, 18, 16, 29, 24},
553 {4340, 21, 77, 20, 19, 20, 37, 18, 16, 29, 24},
554 {4330, 21, 77, 20, 19, 20, 36, 18, 16, 29, 24},
555 {4320, 21, 77, 20, 19, 20, 36, 18, 16, 29, 24},
556 {4310, 21, 76, 20, 19, 20, 36, 18, 16, 29, 24},
557 {4300, 21, 76, 20, 18, 20, 36, 18, 16, 29, 24},
558 {4290, 21, 76, 20, 18, 20, 36, 18, 16, 29, 24},
559 {4280, 21, 76, 20, 18, 20, 36, 18, 16, 29, 24},
560 {4270, 21, 75, 20, 18, 20, 36, 18, 16, 29, 24},
561 {4260, 21, 75, 20, 18, 20, 35, 17, 15, 29, 24},
562 {4250, 20, 76, 20, 18, 20, 35, 17, 15, 29, 24},
597 {3900, 19, 69, 18, 17, 18, 33, 16, 14, 26, 21},
598 {3890, 19, 68, 18, 17, 18, 32, 16, 14, 26, 21},
599 {3880, 19, 68, 18, 17, 18, 32, 16, 14, 26, 21},
600 {3870, 19, 68, 18, 17, 18, 32, 16, 14, 26, 21},
601 {3860, 18, 69, 18, 17, 18, 32, 16, 14, 26, 21},
602 {3850, 18, 68, 18, 17, 18, 32, 16, 14, 26, 21},
603 {3840, 18, 68, 18, 17, 18, 32, 16, 14, 26, 21},
604 {3830, 18, 68, 18, 16, 18, 32, 16, 14, 26, 21},
605 {3820, 18, 68, 18, 16, 18, 31, 16, 14, 26, 21},
606 {3810, 18, 68, 18, 16, 18, 31, 16, 14, 26, 21},
607 {3800, 18, 67, 17, 16, 18, 31, 16, 14, 26, 21},
608 {3790, 18, 67, 17, 16, 17, 32, 15, 14, 26, 21},
609 {3780, 18, 67, 17, 16, 17, 32, 15, 14, 25, 21},
610 {3770, 18, 67, 17, 16, 17, 32, 15, 14, 25, 21},
611 {3760, 18, 66, 17, 16, 17, 32, 15, 14, 25, 21},
612 {3750, 18, 66, 17, 16, 17, 31, 15, 14, 25, 21},
624 {3630, 17, 64, 17, 16, 17, 30, 15, 13, 24, 20},
625 {3620, 17, 64, 17, 16, 17, 30, 15, 13, 24, 20},
626 {3610, 17, 64, 17, 16, 17, 30, 15, 13, 24, 20},
627 {3600, 17, 64, 16, 16, 17, 29, 15, 13, 24, 20},
628 {3590, 17, 63, 16, 15, 17, 29, 15, 13, 24, 20},
629 {3580, 17, 63, 16, 15, 16, 30, 15, 13, 24, 20},
630 {3570, 17, 63, 16, 15, 16, 30, 15, 13, 24, 19},
631 {3560, 17, 63, 16, 15, 16, 30, 14, 13, 24, 19},
632 {3550, 17, 62, 16, 15, 16, 30, 14, 13, 24, 19},
633 {3540, 17, 62, 16, 15, 16, 30, 14, 13, 24, 19},
634 {3530, 17, 62, 16, 15, 16, 29, 14, 13, 24, 19},
635 {3520, 17, 62, 16, 15, 16, 29, 14, 13, 24, 19},
636 {3510, 17, 62, 16, 15, 16, 29, 14, 13, 24, 19},
637 {3500, 17, 61, 16, 15, 16, 29, 14, 13, 24, 19},
667 {3200, 15, 56, 14, 14, 15, 26, 13, 11, 21, 17},
668 {3190, 15, 56, 14, 14, 15, 26, 13, 11, 21, 17},
669 {3180, 15, 56, 14, 14, 15, 26, 13, 11, 21, 17},
670 {3170, 15, 56, 14, 14, 15, 25, 13, 11, 21, 17},
671 {3160, 15, 55, 14, 14, 14, 26, 13, 11, 21, 17},
672 {3150, 15, 55, 14, 14, 14, 26, 13, 11, 21, 17},
673 {3140, 15, 55, 14, 14, 14, 26, 13, 11, 21, 17},
674 {3130, 15, 55, 14, 14, 14, 26, 13, 11, 21, 17},
675 {3120, 15, 54, 14, 13, 14, 26, 13, 11, 21, 17},
676 {3110, 15, 54, 14, 13, 14, 26, 13, 11, 21, 17},
677 {3100, 15, 54, 14, 13, 14, 26, 13, 11, 21, 17},
678 {3090, 15, 54, 14, 13, 14, 25, 12, 11, 21, 17},
679 {3080, 15, 53, 14, 13, 14, 25, 12, 11, 21, 17},
680 {3070, 14, 54, 14, 13, 14, 25, 12, 11, 21, 16},
681 {3060, 14, 54, 14, 13, 14, 25, 12, 11, 21, 16},
685 {3020, 14, 53, 14, 13, 14, 24, 12, 11, 20, 16},
686 {3010, 14, 53, 14, 13, 14, 24, 12, 11, 20, 16},
687 {3000, 14, 53, 13, 13, 14, 24, 12, 11, 20, 16},
688 {2990, 14, 52, 13, 13, 14, 24, 12, 11, 20, 16},
689 {2980, 14, 52, 13, 13, 14, 24, 12, 11, 20, 16},
690 {2970, 14, 52, 13, 13, 14, 24, 12, 11, 20, 16},
691 {2960, 14, 52, 13, 13, 14, 24, 12, 11, 20, 16},
692 {2950, 14, 51, 13, 13, 13, 24, 12, 11, 20, 16},
693 {2940, 14, 51, 13, 13, 13, 24, 12, 11, 20, 16},
694 {2930, 14, 51, 13, 13, 13, 24, 12, 10, 20, 16},
695 {2920, 14, 51, 13, 13, 13, 24, 12, 10, 20, 16},
696 {2910, 14, 50, 13, 13, 13, 24, 12, 10, 20, 15},
697 {2900, 14, 50, 13, 13, 13, 24, 12, 10, 19, 15},
698 {2890, 14, 50, 13, 12, 13, 24, 12, 10, 19, 15},
721 {2660, 12, 47, 12, 12, 12, 21, 11, 9, 18, 14},
722 {2650, 12, 46, 12, 11, 12, 21, 11, 9, 18, 14},
723 {2640, 12, 46, 12, 11, 12, 21, 11, 9, 18, 14},
724 {2630, 12, 46, 12, 11, 12, 21, 11, 9, 18, 14},
725 {2620, 12, 46, 12, 11, 12, 21, 10, 9, 18, 14},
726 {2610, 12, 45, 12, 11, 12, 21, 10, 9, 17, 14},
727 {2600, 12, 45, 11, 11, 12, 21, 10, 9, 17, 14},
733 {2540, 12, 44, 11, 11, 11, 21, 10, 9, 17, 13},
734 {2530, 12, 44, 11, 11, 11, 21, 10, 9, 17, 13},
735 {2520, 12, 43, 11, 11, 11, 21, 10, 9, 17, 13},
837 {1500, 7, 24, 6, 7, 7, 10, 6, 5, 10, 7},
839 {1480, 59, 24, 6, 76, 58, 10, 70, 44, 9, 73},
840 {1470, 58, 24, 6, 76, 58, 10, 69, 44, 9, 72},
841 {1460, 58, 24, 6, 76, 58, 10, 69, 43, 9, 72},
842 {1450, 58, 24, 6, 75, 57, 10, 68, 43, 9, 71},
843 {1440, 57, 24, 6, 75, 57, 10, 68, 43, 9, 71},
856 {1310, 52, 21, 5, 70, 53, 8, 64, 40, 8, 64},
857 {1300, 51, 21, 5, 70, 51, 8, 63, 38, 8, 64},
858 {1290, 51, 21, 5, 70, 51, 8, 63, 38, 7, 64},
859 {1280, 51, 21, 5, 69, 51, 8, 63, 38, 7, 63},
860 {1270, 50, 21, 5, 69, 50, 8, 62, 38, 7, 63},
904 { 830, 33, 12, 3, 54, 33, 4, 47, 24, 4, 41},
905 { 820, 32, 12, 3, 54, 33, 4, 47, 24, 4, 41},
906 { 810, 32, 12, 3, 53, 33, 4, 47, 24, 4, 40},
924 { 630, 24, 9, 2, 47, 26, 2, 40, 18, 3, 32},
925 { 620, 24, 9, 2, 47, 26, 2, 40, 19, 3, 31},
926 { 610, 24, 8, 2, 47, 26, 2, 40, 19, 3, 31},
928 { 590, 23, 8, 1, 46, 24, 2, 39, 17, 3, 30},
929 { 580, 22, 8, 1, 46, 24, 2, 39, 17, 3, 29},
932 { 550, 21, 7, 1, 45, 23, 2, 38, 16, 2, 28},
933 { 540, 21, 7, 1, 44, 22, 2, 37, 16, 2, 27},
935 { 520, 20, 7, 1, 43, 21, 1, 37, 15, 2, 27},
936 { 510, 20, 6, 1, 43, 21, 1, 36, 15, 2, 26},
938 { 490, 19, 6, 1, 42, 21, 1, 36, 15, 2, 25},
939 { 480, 18, 6, 1, 42, 21, 1, 35, 15, 2, 25},
940 { 470, 18, 6, 1, 42, 21, 1, 35, 15, 2, 24},
941 { 460, 18, 6, 1, 41, 19, 1, 35, 13, 2, 24},
946 { 410, 16, 5, 1, 40, 17, 0, 33, 12, 1, 21},
947 { 400, 15, 5, 0, 39, 17, 0, 33, 11, 1, 21},
971 { 160, 5, 0, 0, 31, 8, 0, 24, 4, 0, 9},
972 { 150, 5, 0, 0, 31, 8, 0, 24, 5, 0, 9},
973 { 140, 5, 0, 0, 31, 8, 0, 24, 5, 0, 8},
984 regmap_write(samsung->regmap, BIAS_CON0, I_DEV_DIV_6 | I_RES_100_2UA); in samsung_mipi_dcphy_bias_block_enable()
985 regmap_write(samsung->regmap, BIAS_CON1, I_VBG_SEL_820MV | I_BGR_VREF_820MV | in samsung_mipi_dcphy_bias_block_enable()
987 regmap_write(samsung->regmap, BIAS_CON2, REG_325M_325MV | REG_LP_400M_400MV | in samsung_mipi_dcphy_bias_block_enable()
994 regmap_update_bits(samsung->regmap, BIAS_CON4, in samsung_mipi_dcphy_bias_block_enable()
1000 regmap_write(samsung->regmap, DPHY_MC_GNR_CON1, T_PHY_READY(0x2000)); in samsung_mipi_dphy_lane_enable()
1001 regmap_update_bits(samsung->regmap, DPHY_MC_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1004 switch (samsung->lanes) { in samsung_mipi_dphy_lane_enable()
1006 regmap_write(samsung->regmap, DPHY_MD3_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1008 regmap_update_bits(samsung->regmap, DPHY_MD3_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1012 regmap_write(samsung->regmap, COMBO_MD2_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1014 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1018 regmap_write(samsung->regmap, COMBO_MD1_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1020 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1025 regmap_write(samsung->regmap, COMBO_MD0_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1027 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1035 switch (samsung->lanes) { in samsung_mipi_dphy_lane_disable()
1037 regmap_update_bits(samsung->regmap, DPHY_MD3_GNR_CON0, in samsung_mipi_dphy_lane_disable()
1041 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, in samsung_mipi_dphy_lane_disable()
1045 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, in samsung_mipi_dphy_lane_disable()
1050 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, in samsung_mipi_dphy_lane_disable()
1055 regmap_update_bits(samsung->regmap, DPHY_MC_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1060 regmap_update_bits(samsung->regmap, PLL_CON0, S_MASK | P_MASK, in samsung_mipi_dcphy_pll_configure()
1061 S(samsung->pll.scaler) | P(samsung->pll.prediv)); in samsung_mipi_dcphy_pll_configure()
1063 if (samsung->pll.dsm < 0) { in samsung_mipi_dcphy_pll_configure()
1067 dsm_tmp = abs(samsung->pll.dsm); in samsung_mipi_dcphy_pll_configure()
1068 dsm_tmp = dsm_tmp - 1; in samsung_mipi_dcphy_pll_configure()
1070 regmap_write(samsung->regmap, PLL_CON1, dsm_tmp); in samsung_mipi_dcphy_pll_configure()
1072 regmap_write(samsung->regmap, PLL_CON1, samsung->pll.dsm); in samsung_mipi_dcphy_pll_configure()
1075 regmap_update_bits(samsung->regmap, PLL_CON2, in samsung_mipi_dcphy_pll_configure()
1076 M_MASK, M(samsung->pll.fbdiv)); in samsung_mipi_dcphy_pll_configure()
1078 if (samsung->pll.ssc_en) { in samsung_mipi_dcphy_pll_configure()
1079 regmap_write(samsung->regmap, PLL_CON3, in samsung_mipi_dcphy_pll_configure()
1080 MRR(samsung->pll.mrr) | MFR(samsung->pll.mfr)); in samsung_mipi_dcphy_pll_configure()
1081 regmap_update_bits(samsung->regmap, PLL_CON4, SSCG_EN, SSCG_EN); in samsung_mipi_dcphy_pll_configure()
1084 regmap_write(samsung->regmap, PLL_CON5, RESET_N_SEL | PLL_ENABLE_SEL); in samsung_mipi_dcphy_pll_configure()
1085 regmap_write(samsung->regmap, PLL_CON7, PLL_LOCK_CNT(0xf000)); in samsung_mipi_dcphy_pll_configure()
1086 regmap_write(samsung->regmap, PLL_CON8, PLL_STB_CNT(0xf000)); in samsung_mipi_dcphy_pll_configure()
1094 regmap_update_bits(samsung->regmap, PLL_CON0, PLL_EN, PLL_EN); in samsung_mipi_dcphy_pll_enable()
1096 ret = regmap_read_poll_timeout(samsung->regmap, PLL_STAT0, in samsung_mipi_dcphy_pll_enable()
1099 dev_err(samsung->dev, "DC-PHY pll failed to lock\n"); in samsung_mipi_dcphy_pll_enable()
1106 regmap_update_bits(samsung->regmap, PLL_CON0, PLL_EN, 0); in samsung_mipi_dcphy_pll_disable()
1114 unsigned int lane_mbps = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_get_timing()
1120 for (i = num_timings; i > 1; i--) in samsung_mipi_dphy_get_timing()
1121 if (lane_mbps <= timings[i - 1].max_lane_mbps) in samsung_mipi_dphy_get_timing()
1124 return &timings[i - 1]; in samsung_mipi_dphy_get_timing()
1132 u32 max_fout = samsung->pdata->dphy_tx_max_lane_kbps; in samsung_mipi_dcphy_pll_round_rate()
1143 dev_err(samsung->dev, "parent rate of PLL can not be zero\n"); in samsung_mipi_dcphy_pll_round_rate()
1182 /* -32767 ≤ K[15:0] ≤ 32767 */ in samsung_mipi_dcphy_pll_round_rate()
1183 _dsm = ((_prediv * fvco) - (2 * _fbdiv * fin)); in samsung_mipi_dcphy_pll_round_rate()
1191 delta = abs(fvco * MSEC_PER_SEC - tmp); in samsung_mipi_dcphy_pll_round_rate()
1210 dev_dbg(samsung->dev, "p: %d, m: %d, dsm:%ld, scaler: %d\n", in samsung_mipi_dcphy_pll_round_rate()
1220 unsigned int lane_hs_rate = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_clk_lane_timing_init()
1224 regmap_write(samsung->regmap, DPHY_MC_GNR_CON0, 0xf000); in samsung_mipi_dphy_clk_lane_timing_init()
1227 * The Drive-Strength / Voltage-Amplitude is adjusted by setting in samsung_mipi_dphy_clk_lane_timing_init()
1228 * the Driver-Up Resistor and Driver-Down Resistor. in samsung_mipi_dphy_clk_lane_timing_init()
1230 res_up = samsung->pdata->dphy_hs_drv_res_cfg->clk_hs_drv_up_ohm; in samsung_mipi_dphy_clk_lane_timing_init()
1231 res_down = samsung->pdata->dphy_hs_drv_res_cfg->clk_hs_drv_down_ohm; in samsung_mipi_dphy_clk_lane_timing_init()
1234 regmap_write(samsung->regmap, DPHY_MC_ANA_CON0, val); in samsung_mipi_dphy_clk_lane_timing_init()
1237 regmap_write(samsung->regmap, DPHY_MC_ANA_CON1, 0x0001); in samsung_mipi_dphy_clk_lane_timing_init()
1241 * Divide-by-2 Clock from Serial Clock. Use this when data rate is under in samsung_mipi_dphy_clk_lane_timing_init()
1242 * 1500Mbps, otherwise divide-by-16 Clock from Serial Clock in samsung_mipi_dphy_clk_lane_timing_init()
1247 val |= T_LPX(timing->lpx); in samsung_mipi_dphy_clk_lane_timing_init()
1249 regmap_write(samsung->regmap, DPHY_MC_TIME_CON0, val); in samsung_mipi_dphy_clk_lane_timing_init()
1251 val = T_CLK_ZERO(timing->clk_zero) | T_CLK_PREPARE(timing->clk_prepare); in samsung_mipi_dphy_clk_lane_timing_init()
1252 regmap_write(samsung->regmap, DPHY_MC_TIME_CON1, val); in samsung_mipi_dphy_clk_lane_timing_init()
1254 val = T_HS_EXIT(timing->hs_exit) | T_CLK_TRAIL(timing->clk_trail_eot); in samsung_mipi_dphy_clk_lane_timing_init()
1255 regmap_write(samsung->regmap, DPHY_MC_TIME_CON2, val); in samsung_mipi_dphy_clk_lane_timing_init()
1257 val = T_CLK_POST(timing->clk_post); in samsung_mipi_dphy_clk_lane_timing_init()
1258 regmap_write(samsung->regmap, DPHY_MC_TIME_CON3, val); in samsung_mipi_dphy_clk_lane_timing_init()
1261 regmap_write(samsung->regmap, DPHY_MC_TIME_CON4, 0x1f4); in samsung_mipi_dphy_clk_lane_timing_init()
1268 regmap_write(samsung->regmap, DPHY_MC_DESKEW_CON0, 0x9cb1); in samsung_mipi_dphy_clk_lane_timing_init()
1275 unsigned int lane_hs_rate = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_data_lane_timing_init()
1281 * The Drive-Strength / Voltage-Amplitude is adjusted by adjusting the in samsung_mipi_dphy_data_lane_timing_init()
1282 * Driver-Up Resistor and Driver-Down Resistor. in samsung_mipi_dphy_data_lane_timing_init()
1284 res_up = samsung->pdata->dphy_hs_drv_res_cfg->data_hs_drv_up_ohm; in samsung_mipi_dphy_data_lane_timing_init()
1285 res_down = samsung->pdata->dphy_hs_drv_res_cfg->data_hs_drv_down_ohm; in samsung_mipi_dphy_data_lane_timing_init()
1288 regmap_write(samsung->regmap, COMBO_MD0_ANA_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1289 regmap_write(samsung->regmap, COMBO_MD1_ANA_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1290 regmap_write(samsung->regmap, COMBO_MD2_ANA_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1291 regmap_write(samsung->regmap, DPHY_MD3_ANA_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1294 regmap_write(samsung->regmap, COMBO_MD0_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1295 regmap_write(samsung->regmap, COMBO_MD1_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1296 regmap_write(samsung->regmap, COMBO_MD2_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1297 regmap_write(samsung->regmap, DPHY_MD3_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1302 * Divide-by-2 Clock from Serial Clock. Use this when data rate is under in samsung_mipi_dphy_data_lane_timing_init()
1303 * 1500Mbps, otherwise divide-by-16 Clock from Serial Clock in samsung_mipi_dphy_data_lane_timing_init()
1308 val |= T_LPX(timing->lpx); in samsung_mipi_dphy_data_lane_timing_init()
1310 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1311 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1312 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1313 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1315 val = T_HS_ZERO(timing->hs_zero) | T_HS_PREPARE(timing->hs_prepare); in samsung_mipi_dphy_data_lane_timing_init()
1316 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1317 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1318 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1319 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1321 val = T_HS_EXIT(timing->hs_exit) | T_HS_TRAIL(timing->hs_trail_eot); in samsung_mipi_dphy_data_lane_timing_init()
1322 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1323 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1324 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1325 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1327 /* TTA-GET/TTA-GO Timing Counter register use default value */ in samsung_mipi_dphy_data_lane_timing_init()
1329 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1330 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1331 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1332 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1335 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1336 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1337 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1338 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1345 reset_control_assert(samsung->m_phy_rst); in samsung_mipi_dphy_power_on()
1357 reset_control_deassert(samsung->m_phy_rst); in samsung_mipi_dphy_power_on()
1371 reset_control_assert(samsung->apb_rst); in samsung_mipi_dcphy_power_on()
1373 reset_control_deassert(samsung->apb_rst); in samsung_mipi_dcphy_power_on()
1375 switch (samsung->type) { in samsung_mipi_dcphy_power_on()
1380 return -EOPNOTSUPP; in samsung_mipi_dcphy_power_on()
1390 switch (samsung->type) { in samsung_mipi_dcphy_power_off()
1396 return -EOPNOTSUPP; in samsung_mipi_dcphy_power_off()
1408 unsigned long fin = div64_ul(clk_get_rate(samsung->ref_clk), MSEC_PER_SEC); in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1409 u16 prediv = samsung->pll.prediv; in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1410 u16 fbdiv = samsung->pll.fbdiv; in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1442 dev_err(samsung->dev, "failed to calc ssc parameter mfr and mrr\n"); in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1443 return -EINVAL; in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1453 unsigned long prate = clk_get_rate(samsung->ref_clk); in samsung_mipi_dcphy_pll_calc_rate()
1465 dev_dbg(samsung->dev, "%s: fin=%lu, req_rate=%llu\n", in samsung_mipi_dcphy_pll_calc_rate()
1467 dev_dbg(samsung->dev, "%s: fout=%lu, prediv=%u, fbdiv=%u\n", in samsung_mipi_dcphy_pll_calc_rate()
1470 samsung->pll.prediv = prediv; in samsung_mipi_dcphy_pll_calc_rate()
1471 samsung->pll.fbdiv = fbdiv; in samsung_mipi_dcphy_pll_calc_rate()
1472 samsung->pll.dsm = dsm; in samsung_mipi_dcphy_pll_calc_rate()
1473 samsung->pll.scaler = scaler; in samsung_mipi_dcphy_pll_calc_rate()
1474 samsung->pll.rate = fout; in samsung_mipi_dcphy_pll_calc_rate()
1484 samsung->pll.ssc_en = true; in samsung_mipi_dcphy_pll_calc_rate()
1485 samsung->pll.mfr = mfr; in samsung_mipi_dcphy_pll_calc_rate()
1486 samsung->pll.mrr = mrr; in samsung_mipi_dcphy_pll_calc_rate()
1495 unsigned long long target_rate = opts->mipi_dphy.hs_clk_rate; in samsung_mipi_dcphy_configure()
1497 samsung->lanes = opts->mipi_dphy.lanes > 4 ? 4 : opts->mipi_dphy.lanes; in samsung_mipi_dcphy_configure()
1500 opts->mipi_dphy.hs_clk_rate = samsung->pll.rate; in samsung_mipi_dcphy_configure()
1509 return pm_runtime_resume_and_get(samsung->dev); in samsung_mipi_dcphy_init()
1516 return pm_runtime_put(samsung->dev); in samsung_mipi_dcphy_exit()
1541 if (args->args_count != 1) { in samsung_mipi_dcphy_xlate()
1543 return ERR_PTR(-EINVAL); in samsung_mipi_dcphy_xlate()
1546 if (samsung->type != PHY_NONE && samsung->type != args->args[0]) in samsung_mipi_dcphy_xlate()
1548 args->args[0], samsung->type); in samsung_mipi_dcphy_xlate()
1550 samsung->type = args->args[0]; in samsung_mipi_dcphy_xlate()
1552 return samsung->phy; in samsung_mipi_dcphy_xlate()
1557 struct device *dev = &pdev->dev; in samsung_mipi_dcphy_probe()
1558 struct device_node *np = dev->of_node; in samsung_mipi_dcphy_probe()
1567 return -ENOMEM; in samsung_mipi_dcphy_probe()
1569 samsung->dev = dev; in samsung_mipi_dcphy_probe()
1570 samsung->pdata = device_get_match_data(dev); in samsung_mipi_dcphy_probe()
1578 samsung->regmap = devm_regmap_init_mmio(dev, regs, in samsung_mipi_dcphy_probe()
1580 if (IS_ERR(samsung->regmap)) in samsung_mipi_dcphy_probe()
1581 return dev_err_probe(dev, PTR_ERR(samsung->regmap), "Failed to init regmap\n"); in samsung_mipi_dcphy_probe()
1583 samsung->grf_regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); in samsung_mipi_dcphy_probe()
1584 if (IS_ERR(samsung->grf_regmap)) in samsung_mipi_dcphy_probe()
1585 return dev_err_probe(dev, PTR_ERR(samsung->grf_regmap), in samsung_mipi_dcphy_probe()
1588 samsung->ref_clk = devm_clk_get(dev, "ref"); in samsung_mipi_dcphy_probe()
1589 if (IS_ERR(samsung->ref_clk)) in samsung_mipi_dcphy_probe()
1590 return dev_err_probe(dev, PTR_ERR(samsung->ref_clk), in samsung_mipi_dcphy_probe()
1593 samsung->pclk = devm_clk_get(dev, "pclk"); in samsung_mipi_dcphy_probe()
1594 if (IS_ERR(samsung->pclk)) in samsung_mipi_dcphy_probe()
1595 return dev_err_probe(dev, PTR_ERR(samsung->pclk), "Failed to get pclk\n"); in samsung_mipi_dcphy_probe()
1597 samsung->m_phy_rst = devm_reset_control_get(dev, "m_phy"); in samsung_mipi_dcphy_probe()
1598 if (IS_ERR(samsung->m_phy_rst)) in samsung_mipi_dcphy_probe()
1599 return dev_err_probe(dev, PTR_ERR(samsung->m_phy_rst), in samsung_mipi_dcphy_probe()
1602 samsung->s_phy_rst = devm_reset_control_get(dev, "s_phy"); in samsung_mipi_dcphy_probe()
1603 if (IS_ERR(samsung->s_phy_rst)) in samsung_mipi_dcphy_probe()
1604 return dev_err_probe(dev, PTR_ERR(samsung->s_phy_rst), in samsung_mipi_dcphy_probe()
1607 samsung->apb_rst = devm_reset_control_get(dev, "apb"); in samsung_mipi_dcphy_probe()
1608 if (IS_ERR(samsung->apb_rst)) in samsung_mipi_dcphy_probe()
1609 return dev_err_probe(dev, PTR_ERR(samsung->apb_rst), in samsung_mipi_dcphy_probe()
1612 samsung->grf_apb_rst = devm_reset_control_get(dev, "grf"); in samsung_mipi_dcphy_probe()
1613 if (IS_ERR(samsung->grf_apb_rst)) in samsung_mipi_dcphy_probe()
1614 return dev_err_probe(dev, PTR_ERR(samsung->grf_apb_rst), in samsung_mipi_dcphy_probe()
1617 samsung->phy = devm_phy_create(dev, NULL, &samsung_mipi_dcphy_ops); in samsung_mipi_dcphy_probe()
1618 if (IS_ERR(samsung->phy)) in samsung_mipi_dcphy_probe()
1619 return dev_err_probe(dev, PTR_ERR(samsung->phy), "Failed to create MIPI DC-PHY\n"); in samsung_mipi_dcphy_probe()
1621 phy_set_drvdata(samsung->phy, samsung); in samsung_mipi_dcphy_probe()
1639 clk_disable_unprepare(samsung->ref_clk); in samsung_mipi_dcphy_runtime_suspend()
1640 clk_disable_unprepare(samsung->pclk); in samsung_mipi_dcphy_runtime_suspend()
1650 ret = clk_prepare_enable(samsung->pclk); in samsung_mipi_dcphy_runtime_resume()
1652 dev_err(samsung->dev, "Failed to enable pclk, %d\n", ret); in samsung_mipi_dcphy_runtime_resume()
1656 ret = clk_prepare_enable(samsung->ref_clk); in samsung_mipi_dcphy_runtime_resume()
1658 dev_err(samsung->dev, "Failed to enable reference clock, %d\n", ret); in samsung_mipi_dcphy_runtime_resume()
1659 clk_disable_unprepare(samsung->pclk); in samsung_mipi_dcphy_runtime_resume()
1697 .compatible = "rockchip,rk3576-mipi-dcphy",
1700 .compatible = "rockchip,rk3588-mipi-dcphy",
1709 .name = "samsung-mipi-dcphy",
1717 MODULE_AUTHOR("Guochun Huang <hero.huang@rock-chips.com>");