aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonino A. Daplas <adaplas@gmail.com>2005-12-19 02:11:49 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-20 12:27:15 -0500
commit33c37c06f8066342764bd1568c9f3524efe889a5 (patch)
treeba308b43facb9fc39f412dc82ee79e96cd022df8
parent4b3760ce3d448d4af3036cd6c650d651a16ee02d (diff)
[PATCH] intelfb: Fix oops when changing video mode
Reported by: janis huang (Bugzilla Bug 5747) Fix on oops in intelfb. Not sure what's happening, looks like dinfo->name pointer is invalidated after initialization. Remove intelfb_get_fix, it's not needed and move the majority of the code to the initialization routine. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/video/intelfb/intelfbdrv.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c
index ac8d6617095e..0090544842f5 100644
--- a/drivers/video/intelfb/intelfbdrv.c
+++ b/drivers/video/intelfb/intelfbdrv.c
@@ -135,9 +135,6 @@
135static void __devinit get_initial_mode(struct intelfb_info *dinfo); 135static void __devinit get_initial_mode(struct intelfb_info *dinfo);
136static void update_dinfo(struct intelfb_info *dinfo, 136static void update_dinfo(struct intelfb_info *dinfo,
137 struct fb_var_screeninfo *var); 137 struct fb_var_screeninfo *var);
138static int intelfb_get_fix(struct fb_fix_screeninfo *fix,
139 struct fb_info *info);
140
141static int intelfb_check_var(struct fb_var_screeninfo *var, 138static int intelfb_check_var(struct fb_var_screeninfo *var,
142 struct fb_info *info); 139 struct fb_info *info);
143static int intelfb_set_par(struct fb_info *info); 140static int intelfb_set_par(struct fb_info *info);
@@ -1096,7 +1093,17 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
1096 return 1; 1093 return 1;
1097 1094
1098 info->pixmap.scan_align = 1; 1095 info->pixmap.scan_align = 1;
1099 1096 strcpy(info->fix.id, dinfo->name);
1097 info->fix.smem_start = dinfo->fb.physical;
1098 info->fix.smem_len = dinfo->fb.size;
1099 info->fix.type = FB_TYPE_PACKED_PIXELS;
1100 info->fix.type_aux = 0;
1101 info->fix.xpanstep = 8;
1102 info->fix.ypanstep = 1;
1103 info->fix.ywrapstep = 0;
1104 info->fix.mmio_start = dinfo->mmio_base_phys;
1105 info->fix.mmio_len = INTEL_REG_SIZE;
1106 info->fix.accel = FB_ACCEL_I830;
1100 update_dinfo(dinfo, &info->var); 1107 update_dinfo(dinfo, &info->var);
1101 1108
1102 return 0; 1109 return 0;
@@ -1114,7 +1121,8 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
1114 dinfo->yres = var->xres; 1121 dinfo->yres = var->xres;
1115 dinfo->pixclock = var->pixclock; 1122 dinfo->pixclock = var->pixclock;
1116 1123
1117 intelfb_get_fix(&dinfo->info->fix, dinfo->info); 1124 dinfo->info->fix.visual = dinfo->visual;
1125 dinfo->info->fix.line_length = dinfo->pitch;
1118 1126
1119 switch (dinfo->bpp) { 1127 switch (dinfo->bpp) {
1120 case 8: 1128 case 8:
@@ -1144,30 +1152,6 @@ update_dinfo(struct intelfb_info *dinfo, struct fb_var_screeninfo *var)
1144 1152
1145/* fbops functions */ 1153/* fbops functions */
1146 1154
1147static int
1148intelfb_get_fix(struct fb_fix_screeninfo *fix, struct fb_info *info)
1149{
1150 struct intelfb_info *dinfo = GET_DINFO(info);
1151
1152 DBG_MSG("intelfb_get_fix\n");
1153
1154 memset(fix, 0, sizeof(*fix));
1155 strcpy(fix->id, dinfo->name);
1156 fix->smem_start = dinfo->fb.physical;
1157 fix->smem_len = dinfo->fb.size;
1158 fix->type = FB_TYPE_PACKED_PIXELS;
1159 fix->type_aux = 0;
1160 fix->visual = dinfo->visual;
1161 fix->xpanstep = 8;
1162 fix->ypanstep = 1;
1163 fix->ywrapstep = 0;
1164 fix->line_length = dinfo->pitch;
1165 fix->mmio_start = dinfo->mmio_base_phys;
1166 fix->mmio_len = INTEL_REG_SIZE;
1167 fix->accel = FB_ACCEL_I830;
1168 return 0;
1169}
1170
1171/*************************************************************** 1155/***************************************************************
1172 * fbdev interface * 1156 * fbdev interface *
1173 ***************************************************************/ 1157 ***************************************************************/