diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/ps3fb.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/video/ps3fb.c b/drivers/video/ps3fb.c index 044a423a72cb..1f982bd6cc17 100644 --- a/drivers/video/ps3fb.c +++ b/drivers/video/ps3fb.c | |||
@@ -338,7 +338,7 @@ static int ps3fb_get_res_table(u32 xres, u32 yres, int mode) | |||
338 | static unsigned int ps3fb_find_mode(const struct fb_var_screeninfo *var, | 338 | static unsigned int ps3fb_find_mode(const struct fb_var_screeninfo *var, |
339 | u32 *ddr_line_length, u32 *xdr_line_length) | 339 | u32 *ddr_line_length, u32 *xdr_line_length) |
340 | { | 340 | { |
341 | unsigned int i, mode; | 341 | unsigned int i, fi, mode; |
342 | 342 | ||
343 | for (i = 0; i < ARRAY_SIZE(ps3fb_modedb); i++) | 343 | for (i = 0; i < ARRAY_SIZE(ps3fb_modedb); i++) |
344 | if (var->xres == ps3fb_modedb[i].xres && | 344 | if (var->xres == ps3fb_modedb[i].xres && |
@@ -359,7 +359,8 @@ static unsigned int ps3fb_find_mode(const struct fb_var_screeninfo *var, | |||
359 | 359 | ||
360 | found: | 360 | found: |
361 | /* Cropped broadcast modes use the full line length */ | 361 | /* Cropped broadcast modes use the full line length */ |
362 | *ddr_line_length = ps3fb_modedb[i < 10 ? i + 13 : i].xres * BPP; | 362 | fi = i < PS3AV_MODE_1080P50 ? i + PS3AV_MODE_WUXGA : i; |
363 | *ddr_line_length = ps3fb_modedb[fi].xres * BPP; | ||
363 | 364 | ||
364 | if (ps3_compare_firmware_version(1, 9, 0) >= 0) { | 365 | if (ps3_compare_firmware_version(1, 9, 0) >= 0) { |
365 | *xdr_line_length = GPU_ALIGN_UP(max(var->xres, | 366 | *xdr_line_length = GPU_ALIGN_UP(max(var->xres, |
@@ -370,7 +371,9 @@ found: | |||
370 | *xdr_line_length = *ddr_line_length; | 371 | *xdr_line_length = *ddr_line_length; |
371 | 372 | ||
372 | /* Full broadcast modes have the full mode bit set */ | 373 | /* Full broadcast modes have the full mode bit set */ |
373 | mode = i > 12 ? (i - 12) | PS3FB_FULL_MODE_BIT : i + 1; | 374 | mode = i+1; |
375 | if (mode > PS3AV_MODE_WUXGA) | ||
376 | mode = (mode - PS3AV_MODE_WUXGA) | PS3FB_FULL_MODE_BIT; | ||
374 | 377 | ||
375 | pr_debug("ps3fb_find_mode: mode %u\n", mode); | 378 | pr_debug("ps3fb_find_mode: mode %u\n", mode); |
376 | 379 | ||
@@ -382,14 +385,14 @@ static const struct fb_videomode *ps3fb_default_mode(int id) | |||
382 | u32 mode = id & PS3AV_MODE_MASK; | 385 | u32 mode = id & PS3AV_MODE_MASK; |
383 | u32 flags; | 386 | u32 flags; |
384 | 387 | ||
385 | if (mode < 1 || mode > 13) | 388 | if (mode < PS3AV_MODE_480I || mode > PS3AV_MODE_WUXGA) |
386 | return NULL; | 389 | return NULL; |
387 | 390 | ||
388 | flags = id & ~PS3AV_MODE_MASK; | 391 | flags = id & ~PS3AV_MODE_MASK; |
389 | 392 | ||
390 | if (mode <= 10 && flags & PS3FB_FULL_MODE_BIT) { | 393 | if (mode <= PS3AV_MODE_1080P50 && flags & PS3FB_FULL_MODE_BIT) { |
391 | /* Full broadcast mode */ | 394 | /* Full broadcast mode */ |
392 | return &ps3fb_modedb[mode + 12]; | 395 | return &ps3fb_modedb[mode + PS3AV_MODE_WUXGA - 1]; |
393 | } | 396 | } |
394 | 397 | ||
395 | return &ps3fb_modedb[mode - 1]; | 398 | return &ps3fb_modedb[mode - 1]; |
@@ -1080,7 +1083,7 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev) | |||
1080 | 1083 | ||
1081 | if (!ps3fb_mode) | 1084 | if (!ps3fb_mode) |
1082 | ps3fb_mode = ps3av_get_mode(); | 1085 | ps3fb_mode = ps3av_get_mode(); |
1083 | dev_dbg(&dev->core, "ps3av_mode:%d\n", ps3fb_mode); | 1086 | dev_dbg(&dev->core, "ps3fb_mode: %d\n", ps3fb_mode); |
1084 | 1087 | ||
1085 | if (ps3fb_mode > 0 && | 1088 | if (ps3fb_mode > 0 && |
1086 | !ps3av_video_mode2res(ps3fb_mode, &xres, &yres)) { | 1089 | !ps3av_video_mode2res(ps3fb_mode, &xres, &yres)) { |