diff options
author | Ian Armstrong <ian@iarmst.demon.co.uk> | 2007-10-12 07:15:41 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-10-22 10:01:45 -0400 |
commit | 6659e3ed559db2e730947268f9d57869b7a9016c (patch) | |
tree | 8fe61b0d3639a15f0cece170a124379440460aed /drivers/media | |
parent | 4339ab93657cce9ca0e4678053ddcb68149d48fd (diff) |
V4L/DVB (6340): ivtvfb: screen mode change sometimes goes wrong
This patch partially reverts a previous change that caused the
CX2341X_OSD_SET_PIXEL_FORMAT firmware calls to be skipped when the pixel
format of the framebuffer wasn't altered by FBIOPUT_VSCREENINFO.
Unfortunately, another firmware call on the PVR350 sometimes scrambles the
display when trying to adjust the framebuffer settings. This patch re-enables
the CX2341X_OSD_SET_PIXEL_FORMAT calls to try and prevent this from
occurring.
Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/ivtv/ivtvfb.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/media/video/ivtv/ivtvfb.c b/drivers/media/video/ivtv/ivtvfb.c index 9684048fe56c..0abca6bec7d4 100644 --- a/drivers/media/video/ivtv/ivtvfb.c +++ b/drivers/media/video/ivtv/ivtvfb.c | |||
@@ -166,9 +166,6 @@ struct osd_info { | |||
166 | unsigned long fb_end_aligned_physaddr; | 166 | unsigned long fb_end_aligned_physaddr; |
167 | #endif | 167 | #endif |
168 | 168 | ||
169 | /* Current osd mode */ | ||
170 | int osd_mode; | ||
171 | |||
172 | /* Store the buffer offset */ | 169 | /* Store the buffer offset */ |
173 | int set_osd_coords_x; | 170 | int set_osd_coords_x; |
174 | int set_osd_coords_y; | 171 | int set_osd_coords_y; |
@@ -470,13 +467,11 @@ static int ivtvfb_set_var(struct ivtv *itv, struct fb_var_screeninfo *var) | |||
470 | IVTVFB_DEBUG_WARN("ivtvfb_set_var - Invalid bpp\n"); | 467 | IVTVFB_DEBUG_WARN("ivtvfb_set_var - Invalid bpp\n"); |
471 | } | 468 | } |
472 | 469 | ||
473 | /* Change osd mode if needed. | 470 | /* Set video mode. Although rare, the display can become scrambled even |
474 | Although rare, things can go wrong. The extra mode | 471 | if we don't change mode. Always 'bounce' to osd_mode via mode 0 */ |
475 | change seems to help... */ | 472 | if (osd_mode != -1) { |
476 | if (osd_mode != -1 && osd_mode != oi->osd_mode) { | ||
477 | ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, 0); | 473 | ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, 0); |
478 | ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, osd_mode); | 474 | ivtv_vapi(itv, CX2341X_OSD_SET_PIXEL_FORMAT, 1, osd_mode); |
479 | oi->osd_mode = osd_mode; | ||
480 | } | 475 | } |
481 | 476 | ||
482 | oi->bits_per_pixel = var->bits_per_pixel; | 477 | oi->bits_per_pixel = var->bits_per_pixel; |
@@ -882,9 +877,6 @@ static int ivtvfb_init_vidmode(struct ivtv *itv) | |||
882 | oi->bits_per_pixel = osd_depth; | 877 | oi->bits_per_pixel = osd_depth; |
883 | oi->bytes_per_pixel = oi->bits_per_pixel / 8; | 878 | oi->bytes_per_pixel = oi->bits_per_pixel / 8; |
884 | 879 | ||
885 | /* Invalidate current osd mode to force a mode switch later */ | ||
886 | oi->osd_mode = -1; | ||
887 | |||
888 | /* Horizontal size & position */ | 880 | /* Horizontal size & position */ |
889 | 881 | ||
890 | if (osd_xres > 720) osd_xres = 720; | 882 | if (osd_xres > 720) osd_xres = 720; |