aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_crtc.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2010-08-06 13:13:54 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-08-06 13:13:54 -0400
commit11e4afb49b7fa1fc8e1ffd850c1806dd86a08204 (patch)
tree9e57efcb106ae912f7bec718feb3f8ec607559bb /drivers/gpu/drm/drm_crtc.c
parent162500b3a3ff39d941d29db49b41a16667ae44f0 (diff)
parent9b2a606d3898fcb2eedb6faded3bb37549590ac4 (diff)
Merge branches 'gemini' and 'misc' into devel
Diffstat (limited to 'drivers/gpu/drm/drm_crtc.c')
-rw-r--r--drivers/gpu/drm/drm_crtc.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index d91fb8c0b7b3..57cea01c4ffb 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -30,9 +30,11 @@
30 * Jesse Barnes <jesse.barnes@intel.com> 30 * Jesse Barnes <jesse.barnes@intel.com>
31 */ 31 */
32#include <linux/list.h> 32#include <linux/list.h>
33#include <linux/slab.h>
33#include "drm.h" 34#include "drm.h"
34#include "drmP.h" 35#include "drmP.h"
35#include "drm_crtc.h" 36#include "drm_crtc.h"
37#include "drm_edid.h"
36 38
37struct drm_prop_enum_list { 39struct drm_prop_enum_list {
38 int type; 40 int type;
@@ -493,7 +495,6 @@ void drm_connector_cleanup(struct drm_connector *connector)
493 list_for_each_entry_safe(mode, t, &connector->user_modes, head) 495 list_for_each_entry_safe(mode, t, &connector->user_modes, head)
494 drm_mode_remove(connector, mode); 496 drm_mode_remove(connector, mode);
495 497
496 kfree(connector->fb_helper_private);
497 mutex_lock(&dev->mode_config.mutex); 498 mutex_lock(&dev->mode_config.mutex);
498 drm_mode_object_put(dev, &connector->base); 499 drm_mode_object_put(dev, &connector->base);
499 list_del(&connector->head); 500 list_del(&connector->head);
@@ -857,7 +858,6 @@ void drm_mode_config_init(struct drm_device *dev)
857 mutex_init(&dev->mode_config.mutex); 858 mutex_init(&dev->mode_config.mutex);
858 mutex_init(&dev->mode_config.idr_mutex); 859 mutex_init(&dev->mode_config.idr_mutex);
859 INIT_LIST_HEAD(&dev->mode_config.fb_list); 860 INIT_LIST_HEAD(&dev->mode_config.fb_list);
860 INIT_LIST_HEAD(&dev->mode_config.fb_kernel_list);
861 INIT_LIST_HEAD(&dev->mode_config.crtc_list); 861 INIT_LIST_HEAD(&dev->mode_config.crtc_list);
862 INIT_LIST_HEAD(&dev->mode_config.connector_list); 862 INIT_LIST_HEAD(&dev->mode_config.connector_list);
863 INIT_LIST_HEAD(&dev->mode_config.encoder_list); 863 INIT_LIST_HEAD(&dev->mode_config.encoder_list);
@@ -1840,8 +1840,10 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
1840 1840
1841 ret = copy_from_user(clips, clips_ptr, 1841 ret = copy_from_user(clips, clips_ptr,
1842 num_clips * sizeof(*clips)); 1842 num_clips * sizeof(*clips));
1843 if (ret) 1843 if (ret) {
1844 ret = -EFAULT;
1844 goto out_err2; 1845 goto out_err2;
1846 }
1845 } 1847 }
1846 1848
1847 if (fb->funcs->dirty) { 1849 if (fb->funcs->dirty) {
@@ -2349,7 +2351,7 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector,
2349 struct edid *edid) 2351 struct edid *edid)
2350{ 2352{
2351 struct drm_device *dev = connector->dev; 2353 struct drm_device *dev = connector->dev;
2352 int ret = 0; 2354 int ret = 0, size;
2353 2355
2354 if (connector->edid_blob_ptr) 2356 if (connector->edid_blob_ptr)
2355 drm_property_destroy_blob(dev, connector->edid_blob_ptr); 2357 drm_property_destroy_blob(dev, connector->edid_blob_ptr);
@@ -2361,7 +2363,9 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector,
2361 return ret; 2363 return ret;
2362 } 2364 }
2363 2365
2364 connector->edid_blob_ptr = drm_property_create_blob(connector->dev, 128, edid); 2366 size = EDID_LENGTH * (1 + edid->extensions);
2367 connector->edid_blob_ptr = drm_property_create_blob(connector->dev,
2368 size, edid);
2365 2369
2366 ret = drm_connector_property_set_value(connector, 2370 ret = drm_connector_property_set_value(connector,
2367 dev->mode_config.edid_property, 2371 dev->mode_config.edid_property,