Lines Matching refs:edid

1606 	const struct edid *edid;  member
1609 static int edid_hfeeodb_extension_block_count(const struct edid *edid);
1611 static int edid_hfeeodb_block_count(const struct edid *edid) in edid_hfeeodb_block_count() argument
1613 int eeodb = edid_hfeeodb_extension_block_count(edid); in edid_hfeeodb_block_count()
1618 static int edid_extension_block_count(const struct edid *edid) in edid_extension_block_count() argument
1620 return edid->extensions; in edid_extension_block_count()
1623 static int edid_block_count(const struct edid *edid) in edid_block_count() argument
1625 return edid_extension_block_count(edid) + 1; in edid_block_count()
1633 static int edid_size(const struct edid *edid) in edid_size() argument
1635 return edid_size_by_blocks(edid_block_count(edid)); in edid_size()
1638 static const void *edid_block_data(const struct edid *edid, int index) in edid_block_data() argument
1640 BUILD_BUG_ON(sizeof(*edid) != EDID_LENGTH); in edid_block_data()
1642 return edid + index; in edid_block_data()
1645 static const void *edid_extension_block_data(const struct edid *edid, int index) in edid_extension_block_data() argument
1647 return edid_block_data(edid, index + 1); in edid_extension_block_data()
1656 num_blocks = edid_block_count(drm_edid->edid); in __drm_edid_block_count()
1666 eeodb = edid_hfeeodb_block_count(drm_edid->edid); in __drm_edid_block_count()
1690 return edid_block_data(drm_edid->edid, index); in drm_edid_block_data()
1696 return edid_extension_block_data(drm_edid->edid, index); in drm_edid_extension_block_data()
1704 const struct edid *edid) in drm_edid_legacy_init() argument
1706 if (!edid) in drm_edid_legacy_init()
1711 drm_edid->edid = edid; in drm_edid_legacy_init()
1712 drm_edid->size = edid_size(edid); in drm_edid_legacy_init()
1769 static void edid_header_fix(void *edid) in edid_header_fix() argument
1771 memcpy(edid, edid_header, sizeof(edid_header)); in edid_header_fix()
1784 const struct edid *edid = _edid; in drm_edid_header_is_valid() local
1788 if (edid->header[i] == edid_header[i]) in drm_edid_header_is_valid()
1817 const struct edid *block = _block; in edid_block_get_checksum()
1829 static bool edid_block_is_zero(const void *edid) in edid_block_is_zero() argument
1831 return mem_is_zero(edid, EDID_LENGTH); in edid_block_is_zero()
1837 bool edid1_present = drm_edid && drm_edid->edid && drm_edid->size; in drm_edid_eq()
1847 if (memcmp(drm_edid->edid, raw_edid, drm_edid->size)) in drm_edid_eq()
1869 const struct edid *block = _block; in edid_block_check()
1917 const struct edid *block, in edid_block_status_print()
1987 struct edid *block = _block; in drm_edid_block_valid()
2039 bool drm_edid_is_valid(struct edid *edid) in drm_edid_is_valid() argument
2043 if (!edid) in drm_edid_is_valid()
2046 for (i = 0; i < edid_block_count(edid); i++) { in drm_edid_is_valid()
2047 void *block = (void *)edid_block_data(edid, i); in drm_edid_is_valid()
2087 static struct edid *edid_filter_invalid_blocks(struct edid *edid, in edid_filter_invalid_blocks() argument
2090 struct edid *new; in edid_filter_invalid_blocks()
2098 for (i = 0; i < edid_block_count(edid); i++) { in edid_filter_invalid_blocks()
2099 const void *src_block = edid_block_data(edid, i); in edid_filter_invalid_blocks()
2102 void *dst_block = (void *)edid_block_data(edid, valid_blocks); in edid_filter_invalid_blocks()
2111 kfree(edid); in edid_filter_invalid_blocks()
2115 edid->extensions = valid_blocks - 1; in edid_filter_invalid_blocks()
2116 edid->checksum = edid_block_compute_checksum(edid); in edid_filter_invalid_blocks()
2120 new = krealloc(edid, *alloc_size, GFP_KERNEL); in edid_filter_invalid_blocks()
2122 kfree(edid); in edid_filter_invalid_blocks()
2192 const struct edid *edid, int num_blocks) in connector_bad_edid() argument
2203 last_block = edid->extensions; in connector_bad_edid()
2208 edid_block_compute_checksum(edid + last_block); in connector_bad_edid()
2216 edid_block_dump(KERN_DEBUG, edid + i, i); in connector_bad_edid()
2246 seq_write(m, drm_edid->edid, drm_edid->size); in drm_edid_override_show()
2254 int drm_edid_override_set(struct drm_connector *connector, const void *edid, in drm_edid_override_set() argument
2259 drm_edid = drm_edid_alloc(edid, size); in drm_edid_override_set()
2363 static struct edid *_drm_do_get_edid(struct drm_connector *connector, in _drm_do_get_edid()
2370 struct edid *edid, *new; in _drm_do_get_edid() local
2376 edid = kmemdup(override->edid, alloc_size, GFP_KERNEL); in _drm_do_get_edid()
2378 if (!edid) in _drm_do_get_edid()
2383 edid = kmalloc(alloc_size, GFP_KERNEL); in _drm_do_get_edid()
2384 if (!edid) in _drm_do_get_edid()
2387 status = edid_block_read(edid, 0, read_block, context); in _drm_do_get_edid()
2389 edid_block_status_print(status, edid, 0); in _drm_do_get_edid()
2400 if (!edid_block_status_valid(status, edid_block_tag(edid))) { in _drm_do_get_edid()
2404 connector_bad_edid(connector, edid, 1); in _drm_do_get_edid()
2408 if (!edid_extension_block_count(edid)) in _drm_do_get_edid()
2411 alloc_size = edid_size(edid); in _drm_do_get_edid()
2412 new = krealloc(edid, alloc_size, GFP_KERNEL); in _drm_do_get_edid()
2415 edid = new; in _drm_do_get_edid()
2417 num_blocks = edid_block_count(edid); in _drm_do_get_edid()
2419 void *block = (void *)edid_block_data(edid, i); in _drm_do_get_edid()
2439 int eeodb = edid_hfeeodb_block_count(edid); in _drm_do_get_edid()
2444 new = krealloc(edid, alloc_size, GFP_KERNEL); in _drm_do_get_edid()
2447 edid = new; in _drm_do_get_edid()
2453 connector_bad_edid(connector, edid, num_blocks); in _drm_do_get_edid()
2455 edid = edid_filter_invalid_blocks(edid, &alloc_size); in _drm_do_get_edid()
2462 return edid; in _drm_do_get_edid()
2465 kfree(edid); in _drm_do_get_edid()
2479 const struct edid *drm_edid_raw(const struct drm_edid *drm_edid) in drm_edid_raw()
2488 if (WARN_ON(edid_size(drm_edid->edid) > drm_edid->size)) in drm_edid_raw()
2491 return drm_edid->edid; in drm_edid_raw()
2496 static const struct drm_edid *_drm_edid_alloc(const void *edid, size_t size) in _drm_edid_alloc() argument
2500 if (!edid || !size || size < EDID_LENGTH) in _drm_edid_alloc()
2505 drm_edid->edid = edid; in _drm_edid_alloc()
2526 const struct drm_edid *drm_edid_alloc(const void *edid, size_t size) in drm_edid_alloc() argument
2530 if (!edid || !size || size < EDID_LENGTH) in drm_edid_alloc()
2533 edid = kmemdup(edid, size, GFP_KERNEL); in drm_edid_alloc()
2534 if (!edid) in drm_edid_alloc()
2537 drm_edid = _drm_edid_alloc(edid, size); in drm_edid_alloc()
2539 kfree(edid); in drm_edid_alloc()
2558 return drm_edid_alloc(drm_edid->edid, drm_edid->size); in drm_edid_dup()
2571 kfree(drm_edid->edid); in drm_edid_free()
2601 struct edid *drm_get_edid(struct drm_connector *connector, in drm_get_edid()
2604 struct edid *edid; in drm_get_edid() local
2612 edid = _drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter, NULL); in drm_get_edid()
2613 drm_connector_update_edid_property(connector, edid); in drm_get_edid()
2614 return edid; in drm_get_edid()
2646 struct edid *edid; in drm_edid_read_custom() local
2649 edid = _drm_do_get_edid(connector, read_block, context, &size); in drm_edid_read_custom()
2650 if (!edid) in drm_edid_read_custom()
2656 drm_edid = _drm_edid_alloc(edid, size); in drm_edid_read_custom()
2658 kfree(edid); in drm_edid_read_custom()
2732 if (drm_edid && drm_edid->edid && drm_edid->size >= EDID_LENGTH) in drm_edid_get_product_id()
2733 memcpy(id, &drm_edid->edid->product_id, sizeof(*id)); in drm_edid_get_product_id()
2797 const struct edid *edid = drm_edid->edid; in drm_edid_get_panel_id() local
2815 return (u32)edid->mfg_id[0] << 24 | in drm_edid_get_panel_id()
2816 (u32)edid->mfg_id[1] << 16 | in drm_edid_get_panel_id()
2817 (u32)EDID_PRODUCT_ID(edid); in drm_edid_get_panel_id()
2879 struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, in drm_get_edid_switcheroo()
2884 struct edid *edid; in drm_get_edid_switcheroo() local
2890 edid = drm_get_edid(connector, adapter); in drm_get_edid_switcheroo()
2893 return edid; in drm_get_edid_switcheroo()
2932 struct edid *drm_edid_duplicate(const struct edid *edid) in drm_edid_duplicate() argument
2934 if (!edid) in drm_edid_duplicate()
2937 return kmemdup(edid, edid_size(edid), GFP_KERNEL); in drm_edid_duplicate()
3129 cb(&drm_edid->edid->detailed_timings[i], closure); in drm_for_each_detailed_block()
3167 if (drm_edid->edid->revision >= 4) { in drm_monitor_supports_rb()
3280 const struct edid *edid = drm_edid->edid; in standard_timing_level() local
3282 if (edid->revision >= 4) { in standard_timing_level()
3292 } else if (edid->revision >= 3 && drm_gtf2_hbreak(drm_edid)) { in standard_timing_level()
3294 } else if (edid->revision >= 2) { in standard_timing_level()
3377 if (drm_edid->edid->revision < 3) in drm_mode_std()
3594 mode->width_mm = drm_edid->edid->width_cm * 10; in drm_mode_detailed()
3595 mode->height_mm = drm_edid->edid->height_cm * 10; in drm_mode_detailed()
3606 const struct edid *edid, const u8 *t) in mode_in_hsync_range() argument
3611 if (edid->revision >= 4) in mode_in_hsync_range()
3614 if (edid->revision >= 4) in mode_in_hsync_range()
3623 const struct edid *edid, const u8 *t) in mode_in_vsync_range() argument
3628 if (edid->revision >= 4) in mode_in_vsync_range()
3631 if (edid->revision >= 4) in mode_in_vsync_range()
3639 range_pixel_clock(const struct edid *edid, const u8 *t) in range_pixel_clock() argument
3646 if (edid->revision >= 4 && t[10] == DRM_EDID_CVT_SUPPORT_FLAG) in range_pixel_clock()
3657 const struct edid *edid = drm_edid->edid; in mode_in_range() local
3661 if (!mode_in_hsync_range(mode, edid, t)) in mode_in_range()
3664 if (!mode_in_vsync_range(mode, edid, t)) in mode_in_range()
3667 max_clock = range_pixel_clock(edid, t); in mode_in_range()
3673 if (edid->revision >= 4 && t[10] == DRM_EDID_CVT_SUPPORT_FLAG) in mode_in_range()
3838 if (closure->drm_edid->edid->revision < 2) in do_inferred_modes()
3853 if (closure->drm_edid->edid->revision < 4) in do_inferred_modes()
3874 if (drm_edid->edid->revision >= 1) in add_inferred_modes()
3929 const struct edid *edid = drm_edid->edid; in add_established_modes() local
3930 unsigned long est_bits = edid->established_timings.t1 | in add_established_modes()
3931 (edid->established_timings.t2 << 8) | in add_established_modes()
3932 ((edid->established_timings.mfg_rsvd & 0x80) << 9); in add_established_modes()
3951 if (edid->revision >= 1) in add_established_modes()
3999 &drm_edid->edid->standard_timings[i]); in add_standard_modes()
4006 if (drm_edid->edid->revision >= 1) in add_standard_modes()
4086 if (drm_edid->edid->revision >= 3) in add_cvt_modes()
4139 if (drm_edid->edid->revision >= 4) in add_detailed_modes()
4143 drm_edid->edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING; in add_detailed_modes()
5246 static int edid_hfeeodb_extension_block_count(const struct edid *edid) in edid_hfeeodb_extension_block_count() argument
5251 if (!edid_extension_block_count(edid)) in edid_hfeeodb_extension_block_count()
5255 cta = edid_extension_block_data(edid, 0); in edid_hfeeodb_extension_block_count()
5606 void drm_edid_get_monitor_name(const struct edid *edid, char *name, int bufsize) in drm_edid_get_monitor_name() argument
5613 if (edid) { in drm_edid_get_monitor_name()
5616 .edid = edid, in drm_edid_get_monitor_name()
5617 .size = edid_size(edid), in drm_edid_get_monitor_name()
5696 eld[DRM_ELD_MANUFACTURER_NAME0] = drm_edid->edid->mfg_id[0]; in drm_edid_to_eld()
5697 eld[DRM_ELD_MANUFACTURER_NAME1] = drm_edid->edid->mfg_id[1]; in drm_edid_to_eld()
5698 eld[DRM_ELD_PRODUCT_CODE0] = drm_edid->edid->prod_code[0]; in drm_edid_to_eld()
5699 eld[DRM_ELD_PRODUCT_CODE1] = drm_edid->edid->prod_code[1]; in drm_edid_to_eld()
5791 int drm_edid_to_sad(const struct edid *edid, struct cea_sad **sads) in drm_edid_to_sad() argument
5795 return _drm_edid_to_sad(drm_edid_legacy_init(&drm_edid, edid), sads); in drm_edid_to_sad()
5837 int drm_edid_to_speaker_allocation(const struct edid *edid, u8 **sadb) in drm_edid_to_speaker_allocation() argument
5841 return _drm_edid_to_speaker_allocation(drm_edid_legacy_init(&drm_edid, edid), in drm_edid_to_speaker_allocation()
5920 bool drm_detect_hdmi_monitor(const struct edid *edid) in drm_detect_hdmi_monitor() argument
5924 return _drm_detect_hdmi_monitor(drm_edid_legacy_init(&drm_edid, edid)); in drm_detect_hdmi_monitor()
5982 bool drm_detect_monitor_audio(const struct edid *edid) in drm_detect_monitor_audio() argument
5986 return _drm_detect_monitor_audio(drm_edid_legacy_init(&drm_edid, edid)); in drm_detect_monitor_audio()
6476 const struct edid *edid = closure->drm_edid->edid; in get_monitor_range() local
6496 if (edid->revision >= 4) { in get_monitor_range()
6513 if (drm_edid->edid->revision < 4) in drm_get_monitor_range()
6516 if (!(drm_edid->edid->features & DRM_EDID_FEATURE_CONTINUOUS_FREQ)) in drm_get_monitor_range()
6675 const struct edid *edid; in update_display_info() local
6683 edid = drm_edid->edid; in update_display_info()
6687 info->width_mm = edid->width_cm * 10; in update_display_info()
6688 info->height_mm = edid->height_cm * 10; in update_display_info()
6692 if (edid->revision < 3) in update_display_info()
6710 if (info->bpc == 0 && edid->revision == 3 && in update_display_info()
6711 edid->input & DRM_EDID_DIGITAL_DFP_1_X) { in update_display_info()
6719 if (edid->revision < 4) in update_display_info()
6722 switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) { in update_display_info()
6751 if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB444) in update_display_info()
6753 if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422) in update_display_info()
6969 if (drm_edid->edid->features & DRM_EDID_FEATURE_CONTINUOUS_FREQ) in _drm_edid_connector_add_modes()
7003 drm_edid ? drm_edid->edid : NULL, in _drm_edid_connector_property_update()
7036 const void *edid; in drm_edid_connector_property_show() local
7045 edid = connector->edid_blob_ptr->data; in drm_edid_connector_property_show()
7047 if (!edid) in drm_edid_connector_property_show()
7056 memcpy(buf, edid + off, count); in drm_edid_connector_property_show()
7136 const struct edid *edid) in drm_connector_update_edid_property() argument
7140 return drm_edid_connector_update(connector, drm_edid_legacy_init(&drm_edid, edid)); in drm_connector_update_edid_property()
7157 int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) in drm_add_edid_modes() argument
7162 if (edid && !drm_edid_is_valid(edid)) { in drm_add_edid_modes()
7165 edid = NULL; in drm_add_edid_modes()
7168 drm_edid = drm_edid_legacy_init(&_drm_edid, edid); in drm_add_edid_modes()
7587 return drm_edid && drm_edid->edid && in drm_edid_is_digital()
7588 drm_edid->edid->input & DRM_EDID_INPUT_DIGITAL; in drm_edid_is_digital()