aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/virtio/virtgpu_display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/virtio/virtgpu_display.c')
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_display.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 8f8fed471e34..b5580b11a063 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -169,6 +169,12 @@ static int virtio_gpu_conn_get_modes(struct drm_connector *connector)
169 struct drm_display_mode *mode = NULL; 169 struct drm_display_mode *mode = NULL;
170 int count, width, height; 170 int count, width, height;
171 171
172 if (output->edid) {
173 count = drm_add_edid_modes(connector, output->edid);
174 if (count)
175 return count;
176 }
177
172 width = le32_to_cpu(output->info.r.width); 178 width = le32_to_cpu(output->info.r.width);
173 height = le32_to_cpu(output->info.r.height); 179 height = le32_to_cpu(output->info.r.height);
174 count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX); 180 count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
@@ -287,6 +293,8 @@ static int vgdev_output_init(struct virtio_gpu_device *vgdev, int index)
287 drm_connector_init(dev, connector, &virtio_gpu_connector_funcs, 293 drm_connector_init(dev, connector, &virtio_gpu_connector_funcs,
288 DRM_MODE_CONNECTOR_VIRTUAL); 294 DRM_MODE_CONNECTOR_VIRTUAL);
289 drm_connector_helper_add(connector, &virtio_gpu_conn_helper_funcs); 295 drm_connector_helper_add(connector, &virtio_gpu_conn_helper_funcs);
296 if (vgdev->has_edid)
297 drm_connector_attach_edid_property(connector);
290 298
291 drm_encoder_init(dev, encoder, &virtio_gpu_enc_funcs, 299 drm_encoder_init(dev, encoder, &virtio_gpu_enc_funcs,
292 DRM_MODE_ENCODER_VIRTUAL, NULL); 300 DRM_MODE_ENCODER_VIRTUAL, NULL);
@@ -378,6 +386,10 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
378 386
379void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev) 387void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
380{ 388{
389 int i;
390
391 for (i = 0 ; i < vgdev->num_scanouts; ++i)
392 kfree(vgdev->outputs[i].edid);
381 virtio_gpu_fbdev_fini(vgdev); 393 virtio_gpu_fbdev_fini(vgdev);
382 drm_mode_config_cleanup(vgdev->ddev); 394 drm_mode_config_cleanup(vgdev->ddev);
383} 395}