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

Commit 56e004e5 authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Dave Airlie
Browse files

intelfb: use firmware EDID for mode database



Use firmware EDID for the driver's private mode database.

Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Cc: Sylvain Meyer <sylvain.meyer@worldonline.fr>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent 080a4168
Loading
Loading
Loading
Loading
+33 −3
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@

#include "intelfb.h"
#include "intelfbhw.h"
#include "../edid.h"

static void __devinit get_initial_mode(struct intelfb_info *dinfo);
static void update_dinfo(struct intelfb_info *dinfo,
@@ -1031,13 +1032,42 @@ intelfb_init_var(struct intelfb_info *dinfo)
		       sizeof(struct fb_var_screeninfo));
		msrc = 5;
	} else {
		const u8 *edid_s = fb_firmware_edid(&dinfo->pdev->dev);
		u8 *edid_d = NULL;

		if (edid_s) {
			edid_d = kmalloc(128, GFP_KERNEL);

			if (edid_d) {
				memcpy(edid_d, edid_s, 128);
				fb_edid_to_monspecs(edid_d,
						    &dinfo->info->monspecs);
				kfree(edid_d);
			}
		}

		if (mode) {
			printk("intelfb: Looking for mode in private "
			       "database\n");
			msrc = fb_find_mode(var, dinfo->info, mode,
					    vesa_modes, VESA_MODEDB_SIZE,
					    dinfo->info->monspecs.modedb,
					    dinfo->info->monspecs.modedb_len,
					    NULL, 0);

			if (msrc && msrc > 1) {
				printk("intelfb: No mode in private database, "
				       "intelfb: looking for mode in global "
				       "database ");
				msrc = fb_find_mode(var, dinfo->info, mode,
						    vesa_modes,
						    VESA_MODEDB_SIZE, NULL, 0);

				if (msrc)
					msrc |= 8;
			}

		}

		if (!msrc) {
			msrc = fb_find_mode(var, dinfo->info, PREFERRED_MODE,
					    vesa_modes, VESA_MODEDB_SIZE,