aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_edid.c3
-rw-r--r--drivers/gpu/drm/drm_edid_load.c23
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_connector.c4
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_vidi.c13
-rw-r--r--drivers/gpu/drm/gma500/cdv_intel_hdmi.c2
-rw-r--r--drivers/gpu/drm/gma500/oaktrail_hdmi.c1
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_sdvo.c3
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c4
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c3
-rw-r--r--drivers/gpu/drm/i915/intel_modes.c1
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c3
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_mode.c1
-rw-r--r--drivers/gpu/drm/udl/udl_connector.c3
-rw-r--r--drivers/staging/omapdrm/omap_connector.c5
-rw-r--r--include/drm/drm_crtc.h2
15 files changed, 15 insertions, 56 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index a8743c399e83..bcc472572cd0 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -399,10 +399,7 @@ struct edid *drm_get_edid(struct drm_connector *connector,
399 if (drm_probe_ddc(adapter)) 399 if (drm_probe_ddc(adapter))
400 edid = (struct edid *)drm_do_get_edid(connector, adapter); 400 edid = (struct edid *)drm_do_get_edid(connector, adapter);
401 401
402 connector->display_info.raw_edid = (char *)edid;
403
404 return edid; 402 return edid;
405
406} 403}
407EXPORT_SYMBOL(drm_get_edid); 404EXPORT_SYMBOL(drm_get_edid);
408 405
diff --git a/drivers/gpu/drm/drm_edid_load.c b/drivers/gpu/drm/drm_edid_load.c
index 0303935d10e2..186832e1874e 100644
--- a/drivers/gpu/drm/drm_edid_load.c
+++ b/drivers/gpu/drm/drm_edid_load.c
@@ -114,8 +114,8 @@ static u8 generic_edid[GENERIC_EDIDS][128] = {
114 }, 114 },
115}; 115};
116 116
117static int edid_load(struct drm_connector *connector, char *name, 117static u8 *edid_load(struct drm_connector *connector, char *name,
118 char *connector_name) 118 char *connector_name)
119{ 119{
120 const struct firmware *fw; 120 const struct firmware *fw;
121 struct platform_device *pdev; 121 struct platform_device *pdev;
@@ -205,7 +205,6 @@ static int edid_load(struct drm_connector *connector, char *name,
205 edid = new_edid; 205 edid = new_edid;
206 } 206 }
207 207
208 connector->display_info.raw_edid = edid;
209 DRM_INFO("Got %s EDID base block and %d extension%s from " 208 DRM_INFO("Got %s EDID base block and %d extension%s from "
210 "\"%s\" for connector \"%s\"\n", builtin ? "built-in" : 209 "\"%s\" for connector \"%s\"\n", builtin ? "built-in" :
211 "external", valid_extensions, valid_extensions == 1 ? "" : "s", 210 "external", valid_extensions, valid_extensions == 1 ? "" : "s",
@@ -215,7 +214,10 @@ relfw_out:
215 release_firmware(fw); 214 release_firmware(fw);
216 215
217out: 216out:
218 return err; 217 if (err)
218 return ERR_PTR(err);
219
220 return edid;
219} 221}
220 222
221int drm_load_edid_firmware(struct drm_connector *connector) 223int drm_load_edid_firmware(struct drm_connector *connector)
@@ -223,6 +225,7 @@ int drm_load_edid_firmware(struct drm_connector *connector)
223 char *connector_name = drm_get_connector_name(connector); 225 char *connector_name = drm_get_connector_name(connector);
224 char *edidname = edid_firmware, *last, *colon; 226 char *edidname = edid_firmware, *last, *colon;
225 int ret; 227 int ret;
228 struct edid *edid;
226 229
227 if (*edidname == '\0') 230 if (*edidname == '\0')
228 return 0; 231 return 0;
@@ -240,13 +243,13 @@ int drm_load_edid_firmware(struct drm_connector *connector)
240 if (*last == '\n') 243 if (*last == '\n')
241 *last = '\0'; 244 *last = '\0';
242 245
243 ret = edid_load(connector, edidname, connector_name); 246 edid = (struct edid *) edid_load(connector, edidname, connector_name);
244 if (ret) 247 if (IS_ERR_OR_NULL(edid))
245 return 0; 248 return 0;
246 249
247 drm_mode_connector_update_edid_property(connector, 250 drm_mode_connector_update_edid_property(connector, edid);
248 (struct edid *) connector->display_info.raw_edid); 251 ret = drm_add_edid_modes(connector, edid);
252 kfree(edid);
249 253
250 return drm_add_edid_modes(connector, (struct edid *) 254 return ret;
251 connector->display_info.raw_edid);
252} 255}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c b/drivers/gpu/drm/exynos/exynos_drm_connector.c
index d9568198c300..9dce3b9c3896 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
@@ -147,9 +147,7 @@ static int exynos_drm_connector_get_modes(struct drm_connector *connector)
147 147
148 drm_mode_connector_update_edid_property(connector, edid); 148 drm_mode_connector_update_edid_property(connector, edid);
149 count = drm_add_edid_modes(connector, edid); 149 count = drm_add_edid_modes(connector, edid);
150 150 kfree(edid);
151 kfree(connector->display_info.raw_edid);
152 connector->display_info.raw_edid = edid;
153 } else { 151 } else {
154 struct drm_display_mode *mode = drm_mode_create(connector->dev); 152 struct drm_display_mode *mode = drm_mode_create(connector->dev);
155 struct exynos_drm_panel_info *panel; 153 struct exynos_drm_panel_info *panel;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index bb1550c4dd57..92395258d641 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -102,7 +102,6 @@ static int vidi_get_edid(struct device *dev, struct drm_connector *connector,
102 u8 *edid, int len) 102 u8 *edid, int len)
103{ 103{
104 struct vidi_context *ctx = get_vidi_context(dev); 104 struct vidi_context *ctx = get_vidi_context(dev);
105 struct edid *raw_edid;
106 105
107 DRM_DEBUG_KMS("%s\n", __FILE__); 106 DRM_DEBUG_KMS("%s\n", __FILE__);
108 107
@@ -115,18 +114,6 @@ static int vidi_get_edid(struct device *dev, struct drm_connector *connector,
115 return -EFAULT; 114 return -EFAULT;
116 } 115 }
117 116
118 raw_edid = kzalloc(len, GFP_KERNEL);
119 if (!raw_edid) {
120 DRM_DEBUG_KMS("failed to allocate raw_edid.\n");
121 return -ENOMEM;
122 }
123
124 memcpy(raw_edid, ctx->raw_edid, min((1 + ctx->raw_edid->extensions)
125 * EDID_LENGTH, len));
126
127 /* attach the edid data to connector. */
128 connector->display_info.raw_edid = (char *)raw_edid;
129
130 memcpy(edid, ctx->raw_edid, min((1 + ctx->raw_edid->extensions) 117 memcpy(edid, ctx->raw_edid, min((1 + ctx->raw_edid->extensions)
131 * EDID_LENGTH, len)); 118 * EDID_LENGTH, len));
132 119
diff --git a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
index 0c90f0316db1..b1b77bb92a85 100644
--- a/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
+++ b/drivers/gpu/drm/gma500/cdv_intel_hdmi.c
@@ -157,8 +157,6 @@ static enum drm_connector_status cdv_hdmi_detect(
157 hdmi_priv->has_hdmi_audio = 157 hdmi_priv->has_hdmi_audio =
158 drm_detect_monitor_audio(edid); 158 drm_detect_monitor_audio(edid);
159 } 159 }
160
161 psb_intel_connector->base.display_info.raw_edid = NULL;
162 kfree(edid); 160 kfree(edid);
163 } 161 }
164 return status; 162 return status;
diff --git a/drivers/gpu/drm/gma500/oaktrail_hdmi.c b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
index 2eb3dc4e9c9b..69e51e903f35 100644
--- a/drivers/gpu/drm/gma500/oaktrail_hdmi.c
+++ b/drivers/gpu/drm/gma500/oaktrail_hdmi.c
@@ -252,7 +252,6 @@ static int oaktrail_hdmi_get_modes(struct drm_connector *connector)
252 if (edid) { 252 if (edid) {
253 drm_mode_connector_update_edid_property(connector, edid); 253 drm_mode_connector_update_edid_property(connector, edid);
254 ret = drm_add_edid_modes(connector, edid); 254 ret = drm_add_edid_modes(connector, edid);
255 connector->display_info.raw_edid = NULL;
256 } 255 }
257 256
258 /* 257 /*
diff --git a/drivers/gpu/drm/gma500/psb_intel_sdvo.c b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
index 0466c7b985f8..a453d94f115c 100644
--- a/drivers/gpu/drm/gma500/psb_intel_sdvo.c
+++ b/drivers/gpu/drm/gma500/psb_intel_sdvo.c
@@ -1343,7 +1343,6 @@ psb_intel_sdvo_hdmi_sink_detect(struct drm_connector *connector)
1343 } 1343 }
1344 } else 1344 } else
1345 status = connector_status_disconnected; 1345 status = connector_status_disconnected;
1346 connector->display_info.raw_edid = NULL;
1347 kfree(edid); 1346 kfree(edid);
1348 } 1347 }
1349 1348
@@ -1404,7 +1403,6 @@ psb_intel_sdvo_detect(struct drm_connector *connector, bool force)
1404 ret = connector_status_disconnected; 1403 ret = connector_status_disconnected;
1405 else 1404 else
1406 ret = connector_status_connected; 1405 ret = connector_status_connected;
1407 connector->display_info.raw_edid = NULL;
1408 kfree(edid); 1406 kfree(edid);
1409 } else 1407 } else
1410 ret = connector_status_connected; 1408 ret = connector_status_connected;
@@ -1453,7 +1451,6 @@ static void psb_intel_sdvo_get_ddc_modes(struct drm_connector *connector)
1453 drm_add_edid_modes(connector, edid); 1451 drm_add_edid_modes(connector, edid);
1454 } 1452 }
1455 1453
1456 connector->display_info.raw_edid = NULL;
1457 kfree(edid); 1454 kfree(edid);
1458 } 1455 }
1459} 1456}
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 977d9d216c73..d14b1e39244c 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2145,7 +2145,6 @@ intel_dp_get_edid_modes(struct drm_connector *connector, struct i2c_adapter *ada
2145 ret = drm_add_edid_modes(connector, intel_dp->edid); 2145 ret = drm_add_edid_modes(connector, intel_dp->edid);
2146 drm_edid_to_eld(connector, 2146 drm_edid_to_eld(connector,
2147 intel_dp->edid); 2147 intel_dp->edid);
2148 connector->display_info.raw_edid = NULL;
2149 return intel_dp->edid_mode_count; 2148 return intel_dp->edid_mode_count;
2150 } 2149 }
2151 2150
@@ -2191,7 +2190,6 @@ intel_dp_detect(struct drm_connector *connector, bool force)
2191 edid = intel_dp_get_edid(connector, &intel_dp->adapter); 2190 edid = intel_dp_get_edid(connector, &intel_dp->adapter);
2192 if (edid) { 2191 if (edid) {
2193 intel_dp->has_audio = drm_detect_monitor_audio(edid); 2192 intel_dp->has_audio = drm_detect_monitor_audio(edid);
2194 connector->display_info.raw_edid = NULL;
2195 kfree(edid); 2193 kfree(edid);
2196 } 2194 }
2197 } 2195 }
@@ -2256,8 +2254,6 @@ intel_dp_detect_audio(struct drm_connector *connector)
2256 edid = intel_dp_get_edid(connector, &intel_dp->adapter); 2254 edid = intel_dp_get_edid(connector, &intel_dp->adapter);
2257 if (edid) { 2255 if (edid) {
2258 has_audio = drm_detect_monitor_audio(edid); 2256 has_audio = drm_detect_monitor_audio(edid);
2259
2260 connector->display_info.raw_edid = NULL;
2261 kfree(edid); 2257 kfree(edid);
2262 } 2258 }
2263 2259
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index e4c37bb572e8..35a6ee7a8cca 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -737,7 +737,6 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
737 drm_detect_hdmi_monitor(edid); 737 drm_detect_hdmi_monitor(edid);
738 intel_hdmi->has_audio = drm_detect_monitor_audio(edid); 738 intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
739 } 739 }
740 connector->display_info.raw_edid = NULL;
741 kfree(edid); 740 kfree(edid);
742 } 741 }
743 742
@@ -778,8 +777,6 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
778 if (edid) { 777 if (edid) {
779 if (edid->input & DRM_EDID_INPUT_DIGITAL) 778 if (edid->input & DRM_EDID_INPUT_DIGITAL)
780 has_audio = drm_detect_monitor_audio(edid); 779 has_audio = drm_detect_monitor_audio(edid);
781
782 connector->display_info.raw_edid = NULL;
783 kfree(edid); 780 kfree(edid);
784 } 781 }
785 782
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c
index 45848b9b670b..7a5238fc1a02 100644
--- a/drivers/gpu/drm/i915/intel_modes.c
+++ b/drivers/gpu/drm/i915/intel_modes.c
@@ -50,7 +50,6 @@ int intel_ddc_get_modes(struct drm_connector *connector,
50 drm_mode_connector_update_edid_property(connector, edid); 50 drm_mode_connector_update_edid_property(connector, edid);
51 ret = drm_add_edid_modes(connector, edid); 51 ret = drm_add_edid_modes(connector, edid);
52 drm_edid_to_eld(connector, edid); 52 drm_edid_to_eld(connector, edid);
53 connector->display_info.raw_edid = NULL;
54 kfree(edid); 53 kfree(edid);
55 } 54 }
56 55
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 5fb425bf4d03..434b1d1d3c84 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -1345,7 +1345,6 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
1345 } 1345 }
1346 } else 1346 } else
1347 status = connector_status_disconnected; 1347 status = connector_status_disconnected;
1348 connector->display_info.raw_edid = NULL;
1349 kfree(edid); 1348 kfree(edid);
1350 } 1349 }
1351 1350
@@ -1419,7 +1418,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
1419 else 1418 else
1420 ret = connector_status_disconnected; 1419 ret = connector_status_disconnected;
1421 1420
1422 connector->display_info.raw_edid = NULL;
1423 kfree(edid); 1421 kfree(edid);
1424 } else 1422 } else
1425 ret = connector_status_connected; 1423 ret = connector_status_connected;
@@ -1465,7 +1463,6 @@ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)
1465 drm_add_edid_modes(connector, edid); 1463 drm_add_edid_modes(connector, edid);
1466 } 1464 }
1467 1465
1468 connector->display_info.raw_edid = NULL;
1469 kfree(edid); 1466 kfree(edid);
1470 } 1467 }
1471} 1468}
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index b69642d5d850..c7420e83c0b9 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1399,7 +1399,6 @@ static int mga_vga_get_modes(struct drm_connector *connector)
1399 if (edid) { 1399 if (edid) {
1400 drm_mode_connector_update_edid_property(connector, edid); 1400 drm_mode_connector_update_edid_property(connector, edid);
1401 ret = drm_add_edid_modes(connector, edid); 1401 ret = drm_add_edid_modes(connector, edid);
1402 connector->display_info.raw_edid = NULL;
1403 kfree(edid); 1402 kfree(edid);
1404 } 1403 }
1405 return ret; 1404 return ret;
diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
index ba055e9ca007..2d98ff92f3ba 100644
--- a/drivers/gpu/drm/udl/udl_connector.c
+++ b/drivers/gpu/drm/udl/udl_connector.c
@@ -57,11 +57,8 @@ static int udl_get_modes(struct drm_connector *connector)
57 57
58 edid = (struct edid *)udl_get_edid(udl); 58 edid = (struct edid *)udl_get_edid(udl);
59 59
60 connector->display_info.raw_edid = (char *)edid;
61
62 drm_mode_connector_update_edid_property(connector, edid); 60 drm_mode_connector_update_edid_property(connector, edid);
63 ret = drm_add_edid_modes(connector, edid); 61 ret = drm_add_edid_modes(connector, edid);
64 connector->display_info.raw_edid = NULL;
65 kfree(edid); 62 kfree(edid);
66 return ret; 63 return ret;
67} 64}
diff --git a/drivers/staging/omapdrm/omap_connector.c b/drivers/staging/omapdrm/omap_connector.c
index 5e2856c0e0bb..9c2287b71d29 100644
--- a/drivers/staging/omapdrm/omap_connector.c
+++ b/drivers/staging/omapdrm/omap_connector.c
@@ -177,14 +177,11 @@ static int omap_connector_get_modes(struct drm_connector *connector)
177 drm_mode_connector_update_edid_property( 177 drm_mode_connector_update_edid_property(
178 connector, edid); 178 connector, edid);
179 n = drm_add_edid_modes(connector, edid); 179 n = drm_add_edid_modes(connector, edid);
180 kfree(connector->display_info.raw_edid);
181 connector->display_info.raw_edid = edid;
182 } else { 180 } else {
183 drm_mode_connector_update_edid_property( 181 drm_mode_connector_update_edid_property(
184 connector, NULL); 182 connector, NULL);
185 connector->display_info.raw_edid = NULL;
186 kfree(edid);
187 } 183 }
184 kfree(edid);
188 } else { 185 } else {
189 struct drm_display_mode *mode = drm_mode_create(dev); 186 struct drm_display_mode *mode = drm_mode_create(dev);
190 struct omap_video_timings timings; 187 struct omap_video_timings timings;
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index a1a0386e0160..0522044b7498 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -216,8 +216,6 @@ struct drm_display_info {
216 u32 color_formats; 216 u32 color_formats;
217 217
218 u8 cea_rev; 218 u8 cea_rev;
219
220 char *raw_edid; /* if any */
221}; 219};
222 220
223struct drm_framebuffer_funcs { 221struct drm_framebuffer_funcs {