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

[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
...@@ -274,10 +274,13 @@ int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid) ...@@ -274,10 +274,13 @@ int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid)
if (!edid) { if (!edid) {
/* try to get from firmware */ /* try to get from firmware */
edid = kmalloc(EDID_LENGTH, GFP_KERNEL); const u8 *e = fb_firmware_edid(info->device);
if (edid)
memcpy(edid, fb_firmware_edid(info->device), if (e) {
EDID_LENGTH); edid = kmalloc(EDID_LENGTH, GFP_KERNEL);
if (edid)
memcpy(edid, e, EDID_LENGTH);
}
} }
if (out_edid) if (out_edid)
......
...@@ -60,8 +60,6 @@ ...@@ -60,8 +60,6 @@
#define S3_SAVAGE_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000)) #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 /* Chip tags. These are used to group the adapters into
* related families. * related families.
*/ */
...@@ -74,8 +72,6 @@ typedef enum { ...@@ -74,8 +72,6 @@ typedef enum {
S3_PROSAVAGE, S3_PROSAVAGE,
S3_SUPERSAVAGE, S3_SUPERSAVAGE,
S3_SAVAGE2000, S3_SAVAGE2000,
S3_PROSAVAGEDDR,
S3_TWISTER,
S3_LAST S3_LAST
} savage_chipset; } savage_chipset;
......
...@@ -1773,8 +1773,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par) ...@@ -1773,8 +1773,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par)
} }
} }
if (S3_SAVAGE_MOBILE_SERIES(par->chip) || if (S3_SAVAGE_MOBILE_SERIES(par->chip) && !par->crtonly)
(S3_MOBILE_TWISTER_SERIES(par->chip) && !par->crtonly))
par->display_type = DISP_LCD; par->display_type = DISP_LCD;
else if (dvi || (par->chip == S3_SAVAGE4 && par->dvi)) else if (dvi || (par->chip == S3_SAVAGE4 && par->dvi))
par->display_type = DISP_DFP; par->display_type = DISP_DFP;
...@@ -1783,7 +1782,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par) ...@@ -1783,7 +1782,7 @@ static int __devinit savage_init_hw (struct savagefb_par *par)
/* Check LCD panel parrmation */ /* Check LCD panel parrmation */
if (par->chip == S3_SAVAGE_MX) { if (par->display_type == DISP_LCD) {
unsigned char cr6b = VGArCR( 0x6b ); unsigned char cr6b = VGArCR( 0x6b );
int panelX = (VGArSEQ (0x61) + int panelX = (VGArSEQ (0x61) +
...@@ -1922,15 +1921,15 @@ static int __devinit savage_init_fb_info (struct fb_info *info, ...@@ -1922,15 +1921,15 @@ static int __devinit savage_init_fb_info (struct fb_info *info,
snprintf (info->fix.id, 16, "ProSavageKM"); snprintf (info->fix.id, 16, "ProSavageKM");
break; break;
case FB_ACCEL_S3TWISTER_P: case FB_ACCEL_S3TWISTER_P:
par->chip = S3_TWISTER; par->chip = S3_PROSAVAGE;
snprintf (info->fix.id, 16, "TwisterP"); snprintf (info->fix.id, 16, "TwisterP");
break; break;
case FB_ACCEL_S3TWISTER_K: case FB_ACCEL_S3TWISTER_K:
par->chip = S3_TWISTER; par->chip = S3_PROSAVAGE;
snprintf (info->fix.id, 16, "TwisterK"); snprintf (info->fix.id, 16, "TwisterK");
break; break;
case FB_ACCEL_PROSAVAGE_DDR: case FB_ACCEL_PROSAVAGE_DDR:
par->chip = S3_PROSAVAGEDDR; par->chip = S3_PROSAVAGE;
snprintf (info->fix.id, 16, "ProSavageDDR"); snprintf (info->fix.id, 16, "ProSavageDDR");
break; break;
case FB_ACCEL_PROSAVAGE_DDRK: case FB_ACCEL_PROSAVAGE_DDRK:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment