* redo 42874 in the right direction

* fix a order of operations bug
* fix a few long lines
* pll computation should now be correct


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42876 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexander von Gluck IV 2011-10-17 22:18:53 +00:00
parent 8a66cb4c63
commit 86a5585b2d
1 changed files with 12 additions and 9 deletions

View File

@ -237,18 +237,21 @@ pll_compute(pll_info *pll)
|| pll->postDiv == 0
|| targetClock == 0) {
TRACE("%s: Caught division by zero!\n", __func__);
TRACE("%s: referenceDiv %" B_PRIu32 "\n", __func__, pll->referenceDiv);
TRACE("%s: postDiv %" B_PRIu32 "\n", __func__, pll->postDiv);
TRACE("%s: targetClock %" B_PRIu32 "\n", __func__, targetClock);
TRACE("%s: referenceDiv %" B_PRIu32 "\n",
__func__, pll->referenceDiv);
TRACE("%s: postDiv %" B_PRIu32 "\n",
__func__, pll->postDiv);
TRACE("%s: targetClock %" B_PRIu32 "\n",
__func__, targetClock);
return B_ERROR;
}
uint32 tmp = (referenceFrequency * pll->feedbackDiv)
/ (pll->postDiv * pll->referenceDiv);
tmp = (tmp * 100000) / targetClock;
tmp = (tmp * 1000) / targetClock;
if (tmp > (100000 + (MAX_TOLERANCE * 10)))
if (tmp > (1000 + (MAX_TOLERANCE / 10)))
pll->referenceDiv++;
else if (tmp >= (100000 - (MAX_TOLERANCE * 10)))
else if (tmp >= (1000 - (MAX_TOLERANCE / 10)))
break;
else
pll->referenceDiv++;
@ -262,9 +265,9 @@ pll_compute(pll_info *pll)
}
uint32 calculatedClock
= (referenceFrequency * pll->feedbackDiv)
+ (referenceFrequency * pll->feedbackDivFrac)
/ (pll->referenceDiv * pll->postDiv);
= ((referenceFrequency * pll->feedbackDiv * 10)
+ (referenceFrequency * pll->feedbackDivFrac))
/ (pll->referenceDiv * pll->postDiv * 10);
TRACE("%s: pixel clock: %" B_PRIu32 " gives:"
" feedbackDivider = %" B_PRIu32 ".%" B_PRIu32