]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/qxl/qxl_display.c
qxl: add a connector property to denote hotplug should rescan modes.
[~andy/linux] / drivers / gpu / drm / qxl / qxl_display.c
index 61974cb9d20515ce5f45e0c1262e5cc54de95343..5e827c29d1948a658cf61205b7607ff5a53263d7 100644 (file)
@@ -848,8 +848,21 @@ static const struct drm_encoder_funcs qxl_enc_funcs = {
        .destroy = qxl_enc_destroy,
 };
 
+static int qxl_mode_create_hotplug_mode_update_property(struct qxl_device *qdev)
+{
+       if (qdev->hotplug_mode_update_property)
+               return 0;
+
+       qdev->hotplug_mode_update_property =
+               drm_property_create_range(qdev->ddev, DRM_MODE_PROP_IMMUTABLE,
+                                         "hotplug_mode_update", 0, 1);
+
+       return 0;
+}
+
 static int qdev_output_init(struct drm_device *dev, int num_output)
 {
+       struct qxl_device *qdev = dev->dev_private;
        struct qxl_output *qxl_output;
        struct drm_connector *connector;
        struct drm_encoder *encoder;
@@ -876,6 +889,8 @@ static int qdev_output_init(struct drm_device *dev, int num_output)
        drm_encoder_helper_add(encoder, &qxl_enc_helper_funcs);
        drm_connector_helper_add(connector, &qxl_connector_helper_funcs);
 
+       drm_object_attach_property(&connector->base,
+                                  qdev->hotplug_mode_update_property, 0);
        drm_sysfs_connector_add(connector);
        return 0;
 }
@@ -988,6 +1003,9 @@ int qxl_modeset_init(struct qxl_device *qdev)
        qdev->ddev->mode_config.max_height = 8192;
 
        qdev->ddev->mode_config.fb_base = qdev->vram_base;
+
+       qxl_mode_create_hotplug_mode_update_property(qdev);
+
        for (i = 0 ; i < qxl_num_crtc; ++i) {
                qdev_crtc_init(qdev->ddev, i);
                qdev_output_init(qdev->ddev, i);