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

Commit e5ae3cdf authored by Tony Breeds's avatar Tony Breeds Committed by Benjamin Herrenschmidt
Browse files

radeonfb: Add quirk for the graphics adapter in some JSxx

These devices are set to 640x480 by firmware, switch them to 800x600@60
so that the graphical installer can run on remote console.

Reported by IBM during SLES10 SP2 beta testing:

https://bugzilla.novell.com/show_bug.cgi?id=461002


LTC50817

Signed-off-by: default avatarOlaf Hering <olaf@aepfle.de>
Signed-off-by: default avatarTony Breeds <tony@bakeyournoodle.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 0e384983
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -730,6 +730,25 @@ static void radeon_videomode_to_var(struct fb_var_screeninfo *var,
	var->vmode = mode->vmode;
}

#ifdef CONFIG_PPC_PSERIES
static int is_powerblade(const char *model)
{
	struct device_node *root;
	const char* cp;
	int len, l, rc = 0;

	root = of_find_node_by_path("/");
	if (root && model) {
		l = strlen(model);
		cp = of_get_property(root, "model", &len);
		if (cp)
			rc = memcmp(model, cp, min(len, l)) == 0;
		of_node_put(root);
	}
	return rc;
}
#endif

/*
 * Build the modedb for head 1 (head 2 will come later), check panel infos
 * from either BIOS or EDID, and pick up the default mode
@@ -865,6 +884,22 @@ void __devinit radeon_check_modes(struct radeonfb_info *rinfo, const char *mode_
			has_default_mode = 1;
 	}

#ifdef CONFIG_PPC_PSERIES
	if (!has_default_mode && (
		is_powerblade("IBM,8842") || /* JS20 */
		is_powerblade("IBM,8844") || /* JS21 */
		is_powerblade("IBM,7998") || /* JS12/JS21/JS22 */
		is_powerblade("IBM,0792") || /* QS21 */
		is_powerblade("IBM,0793")    /* QS22 */
	    )) {
		printk("Falling back to 800x600 on JSxx hardware\n");
		if (fb_find_mode(&info->var, info, "800x600@60",
				 info->monspecs.modedb,
				 info->monspecs.modedb_len, NULL, 8) != 0)
			has_default_mode = 1;
	}
#endif

	/*
	 * Still no mode, let's pick up a default from the db
	 */