diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_combios.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index e208d730f51..257ce1774e4 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c | |||
@@ -443,6 +443,39 @@ static uint16_t combios_get_table_offset(struct drm_device *dev, | |||
443 | 443 | ||
444 | } | 444 | } |
445 | 445 | ||
446 | bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev) | ||
447 | { | ||
448 | int edid_info; | ||
449 | struct edid *edid; | ||
450 | edid_info = combios_get_table_offset(rdev->ddev, COMBIOS_HARDCODED_EDID_TABLE); | ||
451 | if (!edid_info) | ||
452 | return false; | ||
453 | |||
454 | edid = kmalloc(EDID_LENGTH * (DRM_MAX_EDID_EXT_NUM + 1), | ||
455 | GFP_KERNEL); | ||
456 | if (edid == NULL) | ||
457 | return false; | ||
458 | |||
459 | memcpy((unsigned char *)edid, | ||
460 | (unsigned char *)(rdev->bios + edid_info), EDID_LENGTH); | ||
461 | |||
462 | if (!drm_edid_is_valid(edid)) { | ||
463 | kfree(edid); | ||
464 | return false; | ||
465 | } | ||
466 | |||
467 | rdev->mode_info.bios_hardcoded_edid = edid; | ||
468 | return true; | ||
469 | } | ||
470 | |||
471 | struct edid * | ||
472 | radeon_combios_get_hardcoded_edid(struct radeon_device *rdev) | ||
473 | { | ||
474 | if (rdev->mode_info.bios_hardcoded_edid) | ||
475 | return rdev->mode_info.bios_hardcoded_edid; | ||
476 | return NULL; | ||
477 | } | ||
478 | |||
446 | static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rdev, | 479 | static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rdev, |
447 | int ddc_line) | 480 | int ddc_line) |
448 | { | 481 | { |