|
@@ -544,41 +544,42 @@ static u8 XGIfb_search_refresh_rate(struct xgifb_video_info *xgifb_info,
|
|
yres = XGIbios_mode[xgifb_info->mode_idx].yres;
|
|
yres = XGIbios_mode[xgifb_info->mode_idx].yres;
|
|
|
|
|
|
xgifb_info->rate_idx = 0;
|
|
xgifb_info->rate_idx = 0;
|
|
- while ((XGIfb_vrate[i].idx != 0) && (XGIfb_vrate[i].xres <= xres)) {
|
|
|
|
- if ((XGIfb_vrate[i].xres == xres) &&
|
|
|
|
- (XGIfb_vrate[i].yres == yres)) {
|
|
|
|
- if (XGIfb_vrate[i].refresh == rate) {
|
|
|
|
|
|
+
|
|
|
|
+ while (XGIfb_vrate[i].idx != 0 && XGIfb_vrate[i].xres <= xres) {
|
|
|
|
+ /* Skip values with xres or yres less than specified */
|
|
|
|
+ if ((XGIfb_vrate[i].yres != yres) ||
|
|
|
|
+ (XGIfb_vrate[i].xres != xres)) {
|
|
|
|
+ i++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ if (XGIfb_vrate[i].refresh == rate) {
|
|
|
|
+ xgifb_info->rate_idx = XGIfb_vrate[i].idx;
|
|
|
|
+ break;
|
|
|
|
+ } else if (XGIfb_vrate[i].refresh > rate) {
|
|
|
|
+ if (XGIfb_vrate[i].refresh - rate <= 3) {
|
|
|
|
+ pr_debug("Adjusting rate from %d up to %d\n",
|
|
|
|
+ rate, XGIfb_vrate[i].refresh);
|
|
xgifb_info->rate_idx = XGIfb_vrate[i].idx;
|
|
xgifb_info->rate_idx = XGIfb_vrate[i].idx;
|
|
- break;
|
|
|
|
- } else if (XGIfb_vrate[i].refresh > rate) {
|
|
|
|
- if ((XGIfb_vrate[i].refresh - rate) <= 3) {
|
|
|
|
- pr_debug("Adjusting rate from %d up to %d\n",
|
|
|
|
- rate, XGIfb_vrate[i].refresh);
|
|
|
|
- xgifb_info->rate_idx =
|
|
|
|
- XGIfb_vrate[i].idx;
|
|
|
|
- xgifb_info->refresh_rate =
|
|
|
|
- XGIfb_vrate[i].refresh;
|
|
|
|
- } else if (((rate - XGIfb_vrate[i - 1].refresh)
|
|
|
|
- <= 2) && (XGIfb_vrate[i].idx
|
|
|
|
- != 1)) {
|
|
|
|
- pr_debug("Adjusting rate from %d down to %d\n",
|
|
|
|
- rate,
|
|
|
|
- XGIfb_vrate[i - 1].refresh);
|
|
|
|
- xgifb_info->rate_idx =
|
|
|
|
- XGIfb_vrate[i - 1].idx;
|
|
|
|
- xgifb_info->refresh_rate =
|
|
|
|
- XGIfb_vrate[i - 1].refresh;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- } else if ((rate - XGIfb_vrate[i].refresh) <= 2) {
|
|
|
|
|
|
+ xgifb_info->refresh_rate =
|
|
|
|
+ XGIfb_vrate[i].refresh;
|
|
|
|
+ } else if ((XGIfb_vrate[i].idx != 1) &&
|
|
|
|
+ (rate - XGIfb_vrate[i - 1].refresh <= 2)) {
|
|
pr_debug("Adjusting rate from %d down to %d\n",
|
|
pr_debug("Adjusting rate from %d down to %d\n",
|
|
- rate, XGIfb_vrate[i].refresh);
|
|
|
|
- xgifb_info->rate_idx = XGIfb_vrate[i].idx;
|
|
|
|
- break;
|
|
|
|
|
|
+ rate, XGIfb_vrate[i - 1].refresh);
|
|
|
|
+ xgifb_info->rate_idx = XGIfb_vrate[i - 1].idx;
|
|
|
|
+ xgifb_info->refresh_rate =
|
|
|
|
+ XGIfb_vrate[i - 1].refresh;
|
|
}
|
|
}
|
|
|
|
+ break;
|
|
|
|
+ } else if (rate - XGIfb_vrate[i].refresh <= 2) {
|
|
|
|
+ pr_debug("Adjusting rate from %d down to %d\n",
|
|
|
|
+ rate, XGIfb_vrate[i].refresh);
|
|
|
|
+ xgifb_info->rate_idx = XGIfb_vrate[i].idx;
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
i++;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
+
|
|
if (xgifb_info->rate_idx > 0)
|
|
if (xgifb_info->rate_idx > 0)
|
|
return xgifb_info->rate_idx;
|
|
return xgifb_info->rate_idx;
|
|
pr_info("Unsupported rate %d for %dx%d\n",
|
|
pr_info("Unsupported rate %d for %dx%d\n",
|