When no valid EDID modes are available, we bail.
This snippet adds a standard 640x480 @ 60Hz mode when that occurs, so we can continue with a basic mode. Should we do this here though ???main
parent
ef2bce3a16
commit
191594ebd5
|
@ -134,6 +134,15 @@ bool drm_crtc_in_use(struct drm_crtc *crtc)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_crtc_in_use);
|
EXPORT_SYMBOL(drm_crtc_in_use);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Detailed mode info for a standard 640x480@60Hz monitor
|
||||||
|
*/
|
||||||
|
static struct drm_display_mode std_mode[] = {
|
||||||
|
{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25200, 640, 656,
|
||||||
|
752, 800, 0, 480, 490, 492, 525, 0,
|
||||||
|
V_NHSYNC | V_NVSYNC) }, /* 640x480@60Hz */
|
||||||
|
};
|
||||||
|
|
||||||
void drm_crtc_probe_output_modes(struct drm_device *dev, int maxX, int maxY)
|
void drm_crtc_probe_output_modes(struct drm_device *dev, int maxX, int maxY)
|
||||||
{
|
{
|
||||||
struct drm_output *output;
|
struct drm_output *output;
|
||||||
|
@ -175,8 +184,22 @@ void drm_crtc_probe_output_modes(struct drm_device *dev, int maxX, int maxY)
|
||||||
drm_mode_prune_invalid(dev, &output->modes, TRUE);
|
drm_mode_prune_invalid(dev, &output->modes, TRUE);
|
||||||
|
|
||||||
if (list_empty(&output->modes)) {
|
if (list_empty(&output->modes)) {
|
||||||
|
struct drm_display_mode *newmode;
|
||||||
|
|
||||||
DRM_DEBUG("No valid modes found on %s\n", output->name);
|
DRM_DEBUG("No valid modes found on %s\n", output->name);
|
||||||
continue;
|
|
||||||
|
/* Should we do this here ???
|
||||||
|
* When no valid EDID modes are available we end up
|
||||||
|
* here and bailed in the past, now we add a standard
|
||||||
|
* 640x480@60Hz mode and carry on.
|
||||||
|
*/
|
||||||
|
newmode = drm_mode_duplicate(dev, &std_mode[0]);
|
||||||
|
drm_mode_probed_add(output, newmode);
|
||||||
|
drm_mode_list_concat(&output->probed_modes,
|
||||||
|
&output->modes);
|
||||||
|
|
||||||
|
DRM_DEBUG("Adding standard 640x480 @ 60Hz to %s\n",
|
||||||
|
output->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
drm_mode_sort(&output->modes);
|
drm_mode_sort(&output->modes);
|
||||||
|
@ -310,13 +333,11 @@ bool drm_set_desired_modes(struct drm_device *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Skip disabled crtcs */
|
/* Skip disabled crtcs */
|
||||||
if (!output)
|
if (!output) {
|
||||||
|
DRM_DEBUG("skipping disabled crtc\n");
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
memset(&crtc->mode, 0, sizeof(crtc->mode));
|
|
||||||
if (!crtc->desired_mode->crtc_hdisplay) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drm_crtc_set_mode(crtc, crtc->desired_mode,
|
if (!drm_crtc_set_mode(crtc, crtc->desired_mode,
|
||||||
crtc->desired_x, crtc->desired_y))
|
crtc->desired_x, crtc->desired_y))
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue