Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1548060f authored by Patrik Jakobsson's avatar Patrik Jakobsson
Browse files

drm/gma500: Calculate clock in one function instead of three identical



i9xx_clock() and i8xx_clock() did the same calc and psb_intel_clock() just
called i9xx_clock() so just move it all into psb_intel_clock().

The same calculation is duplicated in cdv_intel_display.c as well so maybe we
can share it later on.

Signed-off-by: default avatarPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
parent 4e6bb70d
Loading
Loading
Loading
Loading
+5 −23
Original line number Original line Diff line number Diff line
@@ -127,9 +127,7 @@ static const struct psb_intel_limit_t *psb_intel_limit(struct drm_crtc *crtc)
	return limit;
	return limit;
}
}


/** Derive the pixel clock for the given refclk and divisors for 8xx chips. */
static void psb_intel_clock(int refclk, struct psb_intel_clock_t *clock)

static void i8xx_clock(int refclk, struct psb_intel_clock_t *clock)
{
{
	clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
	clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
	clock->p = clock->p1 * clock->p2;
	clock->p = clock->p1 * clock->p2;
@@ -137,22 +135,6 @@ static void i8xx_clock(int refclk, struct psb_intel_clock_t *clock)
	clock->dot = clock->vco / clock->p;
	clock->dot = clock->vco / clock->p;
}
}


/** Derive the pixel clock for the given refclk and divisors for 9xx chips. */

static void i9xx_clock(int refclk, struct psb_intel_clock_t *clock)
{
	clock->m = 5 * (clock->m1 + 2) + (clock->m2 + 2);
	clock->p = clock->p1 * clock->p2;
	clock->vco = refclk * clock->m / (clock->n + 2);
	clock->dot = clock->vco / clock->p;
}

static void psb_intel_clock(struct drm_device *dev, int refclk,
			struct psb_intel_clock_t *clock)
{
	return i9xx_clock(refclk, clock);
}

/**
/**
 * Returns whether any output on the specified pipe is of the specified type
 * Returns whether any output on the specified pipe is of the specified type
 */
 */
@@ -258,7 +240,7 @@ static bool psb_intel_find_best_PLL(struct drm_crtc *crtc, int target,
				     clock.p1++) {
				     clock.p1++) {
					int this_err;
					int this_err;


					psb_intel_clock(dev, refclk, &clock);
					psb_intel_clock(refclk, &clock);


					if (!psb_intel_PLL_is_valid
					if (!psb_intel_PLL_is_valid
					    (crtc, &clock))
					    (crtc, &clock))
@@ -1099,9 +1081,9 @@ static int psb_intel_crtc_clock_get(struct drm_device *dev,
		if ((dpll & PLL_REF_INPUT_MASK) ==
		if ((dpll & PLL_REF_INPUT_MASK) ==
		    PLLB_REF_INPUT_SPREADSPECTRUMIN) {
		    PLLB_REF_INPUT_SPREADSPECTRUMIN) {
			/* XXX: might not be 66MHz */
			/* XXX: might not be 66MHz */
			i8xx_clock(66000, &clock);
			psb_intel_clock(66000, &clock);
		} else
		} else
			i8xx_clock(48000, &clock);
			psb_intel_clock(48000, &clock);
	} else {
	} else {
		if (dpll & PLL_P1_DIVIDE_BY_TWO)
		if (dpll & PLL_P1_DIVIDE_BY_TWO)
			clock.p1 = 2;
			clock.p1 = 2;
@@ -1116,7 +1098,7 @@ static int psb_intel_crtc_clock_get(struct drm_device *dev,
		else
		else
			clock.p2 = 2;
			clock.p2 = 2;


		i8xx_clock(48000, &clock);
		psb_intel_clock(48000, &clock);
	}
	}


	/* XXX: It would be nice to validate the clocks, but we can't reuse
	/* XXX: It would be nice to validate the clocks, but we can't reuse