[PATCH 1/5] fbdevhw: iterate over all modes that match a mode. (v2)

Jeremy Huddleston jeremyhu at apple.com
Wed Oct 19 10:33:49 PDT 2011


Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

Looks good, but style-wise, I liked the mode = pScrn->monitor->Modes where it was before ... meh


On Oct 19, 2011, at 9:01 AM, Dave Airlie wrote:

> From: Adam Jackson <ajax at redhat.com>
> 
> So on RHEL5 anaconda sets an xorg.conf with a fixed 800x600 mode in it,
> we run radeonfb and fbdev since ati won't work in userspace due to domain
> issues in the older codebase.
> 
> On certain pseries blades the built-in KVM can't accept an 800x600-43 mode,
> it requires the 800x600-60 mode, so we have to have the kernel radeonfb
> driver reject the 800x600-43 mode when it sees it. However then fbdev
> doesn't try any of the other 800x600 modes in the modelist, and we end up
> getting a default 640x480 mode we don't want.
> 
> This patch changes the mode validation loop to continue on with the other modes
> that match to find one that works.
> 
> v2: move code around to avoid extra loop, after comment from Jamey.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> hw/xfree86/fbdevhw/fbdevhw.c |   21 +++++++++++++--------
> 1 files changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
> index dee731b..7bd409e 100644
> --- a/hw/xfree86/fbdevhw/fbdevhw.c
> +++ b/hw/xfree86/fbdevhw/fbdevhw.c
> @@ -509,20 +509,25 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
> 	pScrn->virtualY = pScrn->display->virtualY;
> 
> 	for (modename = pScrn->display->modes; *modename != NULL; modename++) {
> -		for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next)
> -			if (0 == strcmp(mode->name,*modename))
> -				break;
> +
> +		mode = pScrn->monitor->Modes;
> +
> +		for (; mode != NULL; mode = mode->next) {
> +			if (0 == strcmp(mode->name,*modename)) {
> +				if (fbdevHWSetMode(pScrn, mode, TRUE))
> +					break;
> +
> +				xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> +					   "\tmode \"%s\" test failed\n", *modename);
> +			}
> +		}
> +
> 		if (NULL == mode) {
> 			xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> 				   "\tmode \"%s\" not found\n", *modename);
> 			continue;
> 		}
> 
> -		if (!fbdevHWSetMode(pScrn, mode, TRUE)) {
> -			xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> -				   "\tmode \"%s\" test failed\n", *modename);
> -			continue;
> -		}
> 		xf86DrvMsg(pScrn->scrnIndex, X_INFO,
> 			   "\tmode \"%s\" ok\n", *modename);
> 
> -- 
> 1.7.6.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 



More information about the xorg-devel mailing list