drm: Remove unnecessary drm_panel_attach and drm_panel_detach
[linux-2.6-microblaze.git] / drivers / gpu / drm / drm_connector.c
index 480b377..00e40a2 100644 (file)
@@ -269,6 +269,7 @@ int drm_connector_init(struct drm_device *dev,
        INIT_LIST_HEAD(&connector->modes);
        mutex_init(&connector->mutex);
        connector->edid_blob_ptr = NULL;
+       connector->epoch_counter = 0;
        connector->tile_blob_ptr = NULL;
        connector->status = connector_status_unknown;
        connector->display_info.panel_orientation =
@@ -1979,6 +1980,7 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
        struct drm_device *dev = connector->dev;
        size_t size = 0;
        int ret;
+       const struct edid *old_edid;
 
        /* ignore requests to set edid when overridden */
        if (connector->override_edid)
@@ -2002,6 +2004,20 @@ int drm_connector_update_edid_property(struct drm_connector *connector,
 
        drm_update_tile_info(connector, edid);
 
+       if (connector->edid_blob_ptr) {
+               old_edid = (const struct edid *)connector->edid_blob_ptr->data;
+               if (old_edid) {
+                       if (!drm_edid_are_equal(edid, old_edid)) {
+                               DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Edid was changed.\n",
+                                             connector->base.id, connector->name);
+
+                               connector->epoch_counter += 1;
+                               DRM_DEBUG_KMS("Updating change counter to %llu\n",
+                                             connector->epoch_counter);
+                       }
+               }
+       }
+
        drm_object_property_set_value(&connector->base,
                                      dev->mode_config.non_desktop_property,
                                      connector->display_info.non_desktop);
@@ -2393,6 +2409,7 @@ static void drm_tile_group_free(struct kref *kref)
 {
        struct drm_tile_group *tg = container_of(kref, struct drm_tile_group, refcount);
        struct drm_device *dev = tg->dev;
+
        mutex_lock(&dev->mode_config.idr_mutex);
        idr_remove(&dev->mode_config.tile_idr, tg->id);
        mutex_unlock(&dev->mode_config.idr_mutex);
@@ -2428,6 +2445,7 @@ struct drm_tile_group *drm_mode_get_tile_group(struct drm_device *dev,
 {
        struct drm_tile_group *tg;
        int id;
+
        mutex_lock(&dev->mode_config.idr_mutex);
        idr_for_each_entry(&dev->mode_config.tile_idr, tg, id) {
                if (!memcmp(tg->group_data, topology, 8)) {