1int p2 = 14; 2int min_p, max_p; 3 4if (p2 == 7 || p2 == 14) { 5 /* LVDS */ 6 min_p = 7; 7 max_p = 98; 8} else { 9 /* SDVO/DAC */ 10 min_p = 5; 11 max_p = 80; 12} 13 14for (int m1 = 10; m1 <= 22; m1++) { 15 for (int m2 = 5; m2 <= 9; m2++) { 16 for (int n = 1; n <= 6; n++) { 17 for (int p1 = 1; p1 <= 8; p1++) { 18 int ref = 96000000; 19 int m = 5 * (m1 + 2) + (m2 + 2); 20 int p = p1 * p2; 21 int vco = floor(ref * m / (n + 2)); 22 int clock = floor(vco / p); 23 24 if (p < min_p || p > max_p) 25 continue; 26 if (m < 70 || m > 120) 27 continue; 28 if (m2 > m1) 29 continue; /* won't happen */ 30 if (vco < 1400000000 || 31 vco > 2800000000) 32 continue; 33 34 printf("clock: %d (%d,%d),%d,(%d,%d)\n", 35 floor(clock / 1000), 36 m1, m2, n, p1, p2); 37 } 38 } 39 } 40} 41