mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 14:50:19 +00:00
drm/kms: add a function that can add the mode for the output device without EDID
Add a function that can be used to add the default mode for the output device without EDID. It will add the default mode that meets with the requirements of given hdisplay/vdisplay limit. Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
559ee21d26
commit
f0fda0a47b
@ -1215,3 +1215,49 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
|
|||||||
return num_modes;
|
return num_modes;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_add_edid_modes);
|
EXPORT_SYMBOL(drm_add_edid_modes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_add_modes_noedid - add modes for the connectors without EDID
|
||||||
|
* @connector: connector we're probing
|
||||||
|
* @hdisplay: the horizontal display limit
|
||||||
|
* @vdisplay: the vertical display limit
|
||||||
|
*
|
||||||
|
* Add the specified modes to the connector's mode list. Only when the
|
||||||
|
* hdisplay/vdisplay is not beyond the given limit, it will be added.
|
||||||
|
*
|
||||||
|
* Return number of modes added or 0 if we couldn't find any.
|
||||||
|
*/
|
||||||
|
int drm_add_modes_noedid(struct drm_connector *connector,
|
||||||
|
int hdisplay, int vdisplay)
|
||||||
|
{
|
||||||
|
int i, count, num_modes = 0;
|
||||||
|
struct drm_display_mode *mode, *ptr;
|
||||||
|
struct drm_device *dev = connector->dev;
|
||||||
|
|
||||||
|
count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
|
||||||
|
if (hdisplay < 0)
|
||||||
|
hdisplay = 0;
|
||||||
|
if (vdisplay < 0)
|
||||||
|
vdisplay = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
ptr = &drm_dmt_modes[i];
|
||||||
|
if (hdisplay && vdisplay) {
|
||||||
|
/*
|
||||||
|
* Only when two are valid, they will be used to check
|
||||||
|
* whether the mode should be added to the mode list of
|
||||||
|
* the connector.
|
||||||
|
*/
|
||||||
|
if (ptr->hdisplay > hdisplay ||
|
||||||
|
ptr->vdisplay > vdisplay)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
mode = drm_mode_duplicate(dev, ptr);
|
||||||
|
if (mode) {
|
||||||
|
drm_mode_probed_add(connector, mode);
|
||||||
|
num_modes++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return num_modes;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_add_modes_noedid);
|
||||||
|
@ -750,4 +750,6 @@ extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
|
|||||||
extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
|
extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
|
||||||
int hdisplay, int vdisplay, int vrefresh,
|
int hdisplay, int vdisplay, int vrefresh,
|
||||||
bool interlaced, int margins);
|
bool interlaced, int margins);
|
||||||
|
extern int drm_add_modes_noedid(struct drm_connector *connector,
|
||||||
|
int hdisplay, int vdisplay);
|
||||||
#endif /* __DRM_CRTC_H__ */
|
#endif /* __DRM_CRTC_H__ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user