103b705cfSriastradhint p2 = 14; 203b705cfSriastradhint min_p, max_p; 303b705cfSriastradh 403b705cfSriastradhif (p2 == 7 || p2 == 14) { 503b705cfSriastradh /* LVDS */ 603b705cfSriastradh min_p = 7; 703b705cfSriastradh max_p = 98; 803b705cfSriastradh} else { 903b705cfSriastradh /* SDVO/DAC */ 1003b705cfSriastradh min_p = 5; 1103b705cfSriastradh max_p = 80; 1203b705cfSriastradh} 1303b705cfSriastradh 1403b705cfSriastradhfor (int m1 = 10; m1 <= 22; m1++) { 1503b705cfSriastradh for (int m2 = 5; m2 <= 9; m2++) { 1603b705cfSriastradh for (int n = 1; n <= 6; n++) { 1703b705cfSriastradh for (int p1 = 1; p1 <= 8; p1++) { 1803b705cfSriastradh int ref = 96000000; 1903b705cfSriastradh int m = 5 * (m1 + 2) + (m2 + 2); 2003b705cfSriastradh int p = p1 * p2; 2103b705cfSriastradh int vco = floor(ref * m / (n + 2)); 2203b705cfSriastradh int clock = floor(vco / p); 2303b705cfSriastradh 2403b705cfSriastradh if (p < min_p || p > max_p) 2503b705cfSriastradh continue; 2603b705cfSriastradh if (m < 70 || m > 120) 2703b705cfSriastradh continue; 2803b705cfSriastradh if (m2 > m1) 2903b705cfSriastradh continue; /* won't happen */ 3003b705cfSriastradh if (vco < 1400000000 || 3103b705cfSriastradh vco > 2800000000) 3203b705cfSriastradh continue; 3303b705cfSriastradh 3403b705cfSriastradh printf("clock: %d (%d,%d),%d,(%d,%d)\n", 3503b705cfSriastradh floor(clock / 1000), 3603b705cfSriastradh m1, m2, n, p1, p2); 3703b705cfSriastradh } 3803b705cfSriastradh } 3903b705cfSriastradh } 4003b705cfSriastradh} 41