I'm using a vertical gradient as my background. Using intel driver 2.6.1 it started displaying horizontal steps, as if the resolution of the DAC has lowered from 6 to 4 or 5 bits.
Taking a snapshot confirms that the picture is intact. It's only a DAC problem
Sounds like the LVDS dithering bit didn't get set correctly... a register dump comparing a working driver to the broken one would make that easy to spot.
Created attachment 22357 [details]
register dump with 2.6.1
Created attachment 22358 [details]
register dump with 2.4.3 (working correctly)
I guess your VBIOS doesn't have dithering info (or we're not getting at it), does this make it work for you?
diff --git a/src/i830_bios.c b/src/i830_bios.c
index 6baacd4..5fe5796 100644
@@ -91,7 +91,7 @@ parse_panel_data(I830Ptr pI830, struct bdb_header *bdb)
unsigned char *timing_ptr;
/* Defaults if we can't find VBT info */
- pI830->lvds_dither = 0;
+ pI830->lvds_dither = 1;
lvds_options = find_section(bdb, BDB_LVDS_OPTIONS);
(In reply to comment #4)
> I guess your VBIOS doesn't have dithering info (or we're not getting at it),
> does this make it work for you?
> diff --git a/src/i830_bios.c b/src/i830_bios.c
> index 6baacd4..5fe5796 100644
> --- a/src/i830_bios.c
> +++ b/src/i830_bios.c
> @@ -91,7 +91,7 @@ parse_panel_data(I830Ptr pI830, struct bdb_header *bdb)
> unsigned char *timing_ptr;
> /* Defaults if we can't find VBT info */
> - pI830->lvds_dither = 0;
> + pI830->lvds_dither = 1;
> lvds_options = find_section(bdb, BDB_LVDS_OPTIONS);
> if (!lvds_options)
Sorry ,but no. No visible change. with this patch.
Well maybe your VBIOS is just wrong... this should force dithering on regardless.
diff --git a/src/i830_lvds.c b/src/i830_lvds.c
index 027bb5d..250d986 100644
@@ -663,8 +663,7 @@ i830_lvds_mode_fixup(xf86OutputPtr output, DisplayModePtr mo
/* Make sure pre-965s set dither correctly */
- if (!IS_I965G(pI830) && pI830->lvds_dither)
- pfit_control |= PANEL_8TO6_DITHER_ENABLE;
+ pfit_control |= PANEL_8TO6_DITHER_ENABLE;
/* Native modes don't need fitting */
if (adjusted_mode->HDisplay == mode->HDisplay &&
(In reply to comment #6)
> Well maybe your VBIOS is just wrong... this should force dithering on
Yes that works.
Is there any way to capture a copy of your VBIOS on this machine? There's a tool in src/bios_reader to do it, but I'm not sure if it'll work on BSD.
While porting the tools to read the BIOS, it was found the OpenBSD code in libpciaccess to do that was wrong. Now with this fixed, the intel driver works ok.
Thanks for your patience. Closing the bug.