clock.5c revision 03b705cf
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