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

Commit 7b6a186d authored by Antonino A. Daplas's avatar Antonino A. Daplas Committed by Linus Torvalds
Browse files

[PATCH] savagefb: Fix load failure of the Twister chipset



- The Twister chipsets are actually prosavages.  Reclassify them as
  such and remove the S3_SAVAGE_TWISTER id.
- Fix i2c code if fb_firmware_edid() returns NULL

Signed-off-by: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent be201f7f
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -274,10 +274,13 @@ int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid)

	if (!edid) {
		/* try to get from firmware */
		const u8 *e = fb_firmware_edid(info->device);

		if (e) {
			edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
			if (edid)
			memcpy(edid, fb_firmware_edid(info->device),
			       EDID_LENGTH);
				memcpy(edid, e, EDID_LENGTH);
		}
	}

	if (out_edid)
+0 −4
Original line number Diff line number Diff line
@@ -60,8 +60,6 @@

#define S3_SAVAGE_SERIES(chip)    ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000))

#define S3_MOBILE_TWISTER_SERIES(chip) ((chip==S3_TWISTER) || (chip == S3_PROSAVAGEDDR))

/* Chip tags.  These are used to group the adapters into
 * related families.
 */
@@ -74,8 +72,6 @@ typedef enum {
  S3_PROSAVAGE,
  S3_SUPERSAVAGE,
  S3_SAVAGE2000,
  S3_PROSAVAGEDDR,
  S3_TWISTER,
  S3_LAST
} savage_chipset;

+5 −6
Original line number Diff line number Diff line
@@ -1773,8 +1773,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par)
		}
	}

	if (S3_SAVAGE_MOBILE_SERIES(par->chip) ||
	    (S3_MOBILE_TWISTER_SERIES(par->chip) && !par->crtonly))
	if (S3_SAVAGE_MOBILE_SERIES(par->chip) && !par->crtonly)
		par->display_type = DISP_LCD;
	else if (dvi || (par->chip == S3_SAVAGE4 && par->dvi))
		par->display_type = DISP_DFP;
@@ -1783,7 +1782,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par)

	/* Check LCD panel parrmation */

	if (par->chip == S3_SAVAGE_MX) {
	if (par->display_type == DISP_LCD) {
		unsigned char cr6b = VGArCR( 0x6b );

		int panelX = (VGArSEQ (0x61) +
@@ -1922,15 +1921,15 @@ static int __devinit savage_init_fb_info (struct fb_info *info,
		snprintf (info->fix.id, 16, "ProSavageKM");
		break;
	case FB_ACCEL_S3TWISTER_P:
		par->chip = S3_TWISTER;
		par->chip = S3_PROSAVAGE;
		snprintf (info->fix.id, 16, "TwisterP");
		break;
	case FB_ACCEL_S3TWISTER_K:
		par->chip = S3_TWISTER;
		par->chip = S3_PROSAVAGE;
		snprintf (info->fix.id, 16, "TwisterK");
		break;
	case FB_ACCEL_PROSAVAGE_DDR:
		par->chip = S3_PROSAVAGEDDR;
		par->chip = S3_PROSAVAGE;
		snprintf (info->fix.id, 16, "ProSavageDDR");
		break;
	case FB_ACCEL_PROSAVAGE_DDRK: