Lines Matching full:edid
2 drm_edid_load.c: use a built-in EDID data set or load it via the firmware
31 MODULE_PARM_DESC(edid_firmware, "Do not probe monitor, use specified EDID blob "
52 "edid/800x600.bin",
53 "edid/1024x768.bin",
54 "edid/1280x1024.bin",
55 "edid/1600x1200.bin",
56 "edid/1680x1050.bin",
57 "edid/1920x1080.bin",
171 static int edid_size(const u8 *edid, int data_size) in edid_size() argument
176 return (edid[0x7e] + 1) * EDID_LENGTH; in edid_size()
184 u8 *edid; in edid_load() local
199 DRM_ERROR("Failed to register EDID firmware platform device " in edid_load()
207 DRM_ERROR("Requesting EDID firmware \"%s\" failed (err=%d)\n", in edid_load()
217 DRM_ERROR("Size of EDID firmware \"%s\" is invalid " in edid_load()
220 edid = ERR_PTR(-EINVAL); in edid_load()
224 edid = kmemdup(fwdata, fwsize, GFP_KERNEL); in edid_load()
225 if (edid == NULL) { in edid_load()
226 edid = ERR_PTR(-ENOMEM); in edid_load()
230 if (!drm_edid_block_valid(edid, 0, print_bad_edid, in edid_load()
233 DRM_ERROR("Base block of EDID firmware \"%s\" is invalid ", in edid_load()
235 kfree(edid); in edid_load()
236 edid = ERR_PTR(-EINVAL); in edid_load()
240 for (i = 1; i <= edid[0x7e]; i++) { in edid_load()
242 memcpy(edid + (valid_extensions + 1) * EDID_LENGTH, in edid_load()
243 edid + i * EDID_LENGTH, EDID_LENGTH); in edid_load()
244 if (drm_edid_block_valid(edid + i * EDID_LENGTH, i, in edid_load()
250 if (valid_extensions != edid[0x7e]) { in edid_load()
253 edid[EDID_LENGTH-1] += edid[0x7e] - valid_extensions; in edid_load()
254 DRM_INFO("Found %d valid extensions instead of %d in EDID data " in edid_load()
256 edid[0x7e], name, connector_name); in edid_load()
257 edid[0x7e] = valid_extensions; in edid_load()
259 new_edid = krealloc(edid, (valid_extensions + 1) * EDID_LENGTH, in edid_load()
262 edid = new_edid; in edid_load()
265 DRM_INFO("Got %s EDID base block and %d extension%s from " in edid_load()
272 return edid; in edid_load()
275 struct edid *drm_load_edid_firmware(struct drm_connector *connector) in drm_load_edid_firmware()
279 struct edid *edid; in drm_load_edid_firmware() local
285 * If there are multiple edid files specified and separated in drm_load_edid_firmware()
322 edid = edid_load(connector, edidname, connector_name); in drm_load_edid_firmware()
325 return edid; in drm_load_edid_firmware()