diff options
author | Luc Verhaegen <libv@skynet.be> | 2009-04-22 09:10:21 +0200 |
---|---|---|
committer | Luc Verhaegen <libv@skynet.be> | 2009-04-22 09:10:21 +0200 |
commit | a10502339ef1ace0881f668e8327be82b7acc0b2 (patch) | |
tree | 510b3c953ee0584f92080cf088e7a688c3e7a203 | |
parent | a294fbc5a68c7f20b9eee6eedb133609f7fa1733 (diff) |
PLL: VT3122: Further improve pll generation routine.
PostDivider was a useless detour variable, plus fix up the Diff message.
-rw-r--r-- | src/via_crtc.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/via_crtc.c b/src/via_crtc.c index 702f4b2..9f74301 100644 --- a/src/via_crtc.c +++ b/src/via_crtc.c @@ -52,20 +52,19 @@ static CARD32 VT3122PLLGenerate(struct ViaCrtc *Crtc, int Clock) { CARD32 PLL = 0; - CARD32 Divider, Shift, PostDivider, Multiplier; + CARD32 Divider, Shift, Multiplier; int RoundUp; - CARD32 Diff = 1 << 31, NewDiff; + CARD32 Diff = INT_MAX, NewDiff; VIAFUNC(Crtc); for (Shift = 0; Shift < 4; Shift++) { - PostDivider = 1 << Shift; for (Divider = 2; Divider < 26; Divider++) { for (RoundUp = 0; RoundUp < 2; RoundUp++) { if (RoundUp) - Multiplier = (Clock * PostDivider * Divider + 14317) / 14318; + Multiplier = (((Clock * Divider) << Shift) + 14317) / 14318; else - Multiplier = (Clock * PostDivider * Divider) / 14318; + Multiplier = ((Clock * Divider) << Shift) / 14318; if (Divider == 2) { if (Multiplier > 0x6C) @@ -80,7 +79,7 @@ VT3122PLLGenerate(struct ViaCrtc *Crtc, int Clock) if (Multiplier < (8 * (Divider - 9) - 1)) continue; - NewDiff = abs((14318000 * Multiplier) / (Divider * PostDivider) - + NewDiff = abs(((14318000 * Multiplier) / (Divider << Shift)) - (Clock * 1000)); if (NewDiff > Diff) continue; @@ -93,7 +92,7 @@ VT3122PLLGenerate(struct ViaCrtc *Crtc, int Clock) } ViaDebug(Crtc->scrnIndex, "%s: PLL: 0x%04X (%d off from %d)\n", - __func__, PLL, Diff, Clock); + __func__, PLL, Diff / 1000, Clock); return PLL; } |