summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2009-04-22 09:10:21 +0200
committerLuc Verhaegen <libv@skynet.be>2009-04-22 09:10:21 +0200
commita10502339ef1ace0881f668e8327be82b7acc0b2 (patch)
tree510b3c953ee0584f92080cf088e7a688c3e7a203
parenta294fbc5a68c7f20b9eee6eedb133609f7fa1733 (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.c13
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;
}