Commit dd14f71c authored by Krzysztof Helt's avatar Krzysztof Helt Committed by Linus Torvalds
Browse files

cirrusfb: fix clock doubling



Cirrus' Alpine and Picasso4 chips uses DAC clock doubling to achieve full
range of pixclock frequencies.

[akpm@linux-foundation.org: fix spelling, use usual comment layout]
Signed-off-by: default avatarKrzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7cade31c
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -470,9 +470,24 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
	/* If the frequency is greater than we can support, we might be able
	 * to use multiplexing for the video mode */
	if (freq > maxclock) {
		dev_err(info->device,
			"Frequency greater than maxclock (%ld kHz)\n",
			maxclock);
		return -EINVAL;
	}
	/*
	 * Additional constraint: 8bpp uses DAC clock doubling to allow maximum
	 * pixel clock
	 */
	if (var->bits_per_pixel == 8) {
		switch (cinfo->btype) {
		case BT_ALPINE:
		case BT_PICASSO4:
			if (freq > 85500)
				cinfo->multiplexing = 1;
			break;
		case BT_GD5480:
			if (freq > 135100)
				cinfo->multiplexing = 1;
			break;

@@ -815,6 +830,8 @@ static int cirrusfb_set_par_foo(struct fb_info *info)
	freq = PICOS2KHZ(var->pixclock);
	if (cinfo->btype == BT_ALPINE && var->bits_per_pixel == 24)
		freq *= 3;
	if (cinfo->multiplexing)
		freq /= 2;

	bestclock(freq, &nom, &den, &div);