drm/i915: Cache LVDS EDID
We assume that the panel is permenantly connected and that the EDID data is consistent from boot, so simply cache the whole EDID for the panel. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Родитель
e9e5f8e8d3
Коммит
219adae138
|
@ -44,7 +44,7 @@
|
||||||
struct intel_lvds {
|
struct intel_lvds {
|
||||||
struct intel_encoder base;
|
struct intel_encoder base;
|
||||||
|
|
||||||
bool edid_good;
|
struct edid *edid;
|
||||||
|
|
||||||
int fitting_mode;
|
int fitting_mode;
|
||||||
u32 pfit_control;
|
u32 pfit_control;
|
||||||
|
@ -475,14 +475,12 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
|
struct intel_lvds *intel_lvds = intel_attached_lvds(connector);
|
||||||
struct drm_device *dev = connector->dev;
|
struct drm_device *dev = connector->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
||||||
struct drm_display_mode *mode;
|
struct drm_display_mode *mode;
|
||||||
|
|
||||||
if (intel_lvds->edid_good) {
|
if (intel_lvds->edid) {
|
||||||
int ret = intel_ddc_get_modes(connector,
|
drm_mode_connector_update_edid_property(connector,
|
||||||
&dev_priv->gmbus[GMBUS_PORT_PANEL].adapter);
|
intel_lvds->edid);
|
||||||
if (ret)
|
return drm_add_edid_modes(connector, intel_lvds->edid);
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
|
mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode);
|
||||||
|
@ -906,11 +904,10 @@ void intel_lvds_init(struct drm_device *dev)
|
||||||
* Attempt to get the fixed panel mode from DDC. Assume that the
|
* Attempt to get the fixed panel mode from DDC. Assume that the
|
||||||
* preferred mode is the right one.
|
* preferred mode is the right one.
|
||||||
*/
|
*/
|
||||||
intel_lvds->edid_good = true;
|
intel_lvds->edid = drm_get_edid(connector,
|
||||||
if (!intel_ddc_get_modes(connector, &dev_priv->gmbus[GMBUS_PORT_PANEL].adapter))
|
&dev_priv->gmbus[GMBUS_PORT_PANEL].adapter);
|
||||||
intel_lvds->edid_good = false;
|
|
||||||
|
|
||||||
if (!intel_lvds->edid_good) {
|
if (!intel_lvds->edid) {
|
||||||
/* Didn't get an EDID, so
|
/* Didn't get an EDID, so
|
||||||
* Set wide sync ranges so we get all modes
|
* Set wide sync ranges so we get all modes
|
||||||
* handed to valid_mode for checking
|
* handed to valid_mode for checking
|
||||||
|
|
Загрузка…
Ссылка в новой задаче