Lines Matching refs:drm_edid
97 const struct drm_edid *drm_edid; member
1576 struct drm_edid { struct
1624 static int __drm_edid_block_count(const struct drm_edid *drm_edid) in __drm_edid_block_count() argument
1629 num_blocks = edid_block_count(drm_edid->edid); in __drm_edid_block_count()
1632 if (drm_edid->size >= edid_size_by_blocks(2)) { in __drm_edid_block_count()
1639 eeodb = edid_hfeeodb_block_count(drm_edid->edid); in __drm_edid_block_count()
1648 static int drm_edid_block_count(const struct drm_edid *drm_edid) in drm_edid_block_count() argument
1651 return min(__drm_edid_block_count(drm_edid), in drm_edid_block_count()
1652 (int)drm_edid->size / EDID_LENGTH); in drm_edid_block_count()
1656 static int drm_edid_extension_block_count(const struct drm_edid *drm_edid) in drm_edid_extension_block_count() argument
1658 return drm_edid_block_count(drm_edid) - 1; in drm_edid_extension_block_count()
1661 static const void *drm_edid_block_data(const struct drm_edid *drm_edid, int index) in drm_edid_block_data() argument
1663 return edid_block_data(drm_edid->edid, index); in drm_edid_block_data()
1666 static const void *drm_edid_extension_block_data(const struct drm_edid *drm_edid, in drm_edid_extension_block_data() argument
1669 return edid_extension_block_data(drm_edid->edid, index); in drm_edid_extension_block_data()
1676 static const struct drm_edid *drm_edid_legacy_init(struct drm_edid *drm_edid, in drm_edid_legacy_init() argument
1682 memset(drm_edid, 0, sizeof(*drm_edid)); in drm_edid_legacy_init()
1684 drm_edid->edid = edid; in drm_edid_legacy_init()
1685 drm_edid->size = edid_size(edid); in drm_edid_legacy_init()
1687 return drm_edid; in drm_edid_legacy_init()
1703 const struct drm_edid *drm_edid; member
1709 static void drm_edid_iter_begin(const struct drm_edid *drm_edid, in drm_edid_iter_begin() argument
1714 iter->drm_edid = drm_edid; in drm_edid_iter_begin()
1721 if (!iter->drm_edid) in __drm_edid_iter_next()
1724 if (iter->index < drm_edid_block_count(iter->drm_edid)) in __drm_edid_iter_next()
1725 block = drm_edid_block_data(iter->drm_edid, iter->index++); in __drm_edid_iter_next()
2059 bool drm_edid_valid(const struct drm_edid *drm_edid) in drm_edid_valid() argument
2063 if (!drm_edid) in drm_edid_valid()
2066 if (edid_size_by_blocks(__drm_edid_block_count(drm_edid)) != drm_edid->size) in drm_edid_valid()
2069 for (i = 0; i < drm_edid_block_count(drm_edid); i++) { in drm_edid_valid()
2070 const void *block = drm_edid_block_data(drm_edid, i); in drm_edid_valid()
2213 static const struct drm_edid *drm_edid_override_get(struct drm_connector *connector) in drm_edid_override_get()
2215 const struct drm_edid *override = NULL; in drm_edid_override_get()
2233 const struct drm_edid *drm_edid; in drm_edid_override_show() local
2237 drm_edid = connector->edid_override; in drm_edid_override_show()
2238 if (drm_edid) in drm_edid_override_show()
2239 seq_write(m, drm_edid->edid, drm_edid->size); in drm_edid_override_show()
2250 const struct drm_edid *drm_edid; in drm_edid_override_set() local
2252 drm_edid = drm_edid_alloc(edid, size); in drm_edid_override_set()
2253 if (!drm_edid_valid(drm_edid)) { in drm_edid_override_set()
2256 drm_edid_free(drm_edid); in drm_edid_override_set()
2266 connector->edid_override = drm_edid; in drm_edid_override_set()
2302 const struct drm_edid *override; in drm_edid_override_connector_update()
2361 const struct drm_edid *override; in _drm_do_get_edid()
2499 const struct edid *drm_edid_raw(const struct drm_edid *drm_edid) in drm_edid_raw() argument
2501 if (!drm_edid || !drm_edid->size) in drm_edid_raw()
2508 if (WARN_ON(edid_size(drm_edid->edid) > drm_edid->size)) in drm_edid_raw()
2511 return drm_edid->edid; in drm_edid_raw()
2516 static const struct drm_edid *_drm_edid_alloc(const void *edid, size_t size) in _drm_edid_alloc()
2518 struct drm_edid *drm_edid; in _drm_edid_alloc() local
2523 drm_edid = kzalloc(sizeof(*drm_edid), GFP_KERNEL); in _drm_edid_alloc()
2524 if (drm_edid) { in _drm_edid_alloc()
2525 drm_edid->edid = edid; in _drm_edid_alloc()
2526 drm_edid->size = size; in _drm_edid_alloc()
2529 return drm_edid; in _drm_edid_alloc()
2546 const struct drm_edid *drm_edid_alloc(const void *edid, size_t size) in drm_edid_alloc()
2548 const struct drm_edid *drm_edid; in drm_edid_alloc() local
2557 drm_edid = _drm_edid_alloc(edid, size); in drm_edid_alloc()
2558 if (!drm_edid) in drm_edid_alloc()
2561 return drm_edid; in drm_edid_alloc()
2573 const struct drm_edid *drm_edid_dup(const struct drm_edid *drm_edid) in drm_edid_dup() argument
2575 if (!drm_edid) in drm_edid_dup()
2578 return drm_edid_alloc(drm_edid->edid, drm_edid->size); in drm_edid_dup()
2586 void drm_edid_free(const struct drm_edid *drm_edid) in drm_edid_free() argument
2588 if (!drm_edid) in drm_edid_free()
2591 kfree(drm_edid->edid); in drm_edid_free()
2592 kfree(drm_edid); in drm_edid_free()
2661 const struct drm_edid *drm_edid_read_custom(struct drm_connector *connector, in drm_edid_read_custom()
2665 const struct drm_edid *drm_edid; in drm_edid_read_custom() local
2676 drm_edid = _drm_edid_alloc(edid, size); in drm_edid_read_custom()
2677 if (!drm_edid) in drm_edid_read_custom()
2680 return drm_edid; in drm_edid_read_custom()
2702 const struct drm_edid *drm_edid_read_ddc(struct drm_connector *connector, in drm_edid_read_ddc()
2705 const struct drm_edid *drm_edid; in drm_edid_read_ddc() local
2713 drm_edid = drm_edid_read_custom(connector, drm_do_probe_ddc_edid, adapter); in drm_edid_read_ddc()
2717 return drm_edid; in drm_edid_read_ddc()
2735 const struct drm_edid *drm_edid_read(struct drm_connector *connector) in drm_edid_read()
2867 static u32 edid_get_quirks(const struct drm_edid *drm_edid) in edid_get_quirks() argument
2869 u32 panel_id = edid_extract_panel_id(drm_edid->edid); in edid_get_quirks()
3024 static void drm_for_each_detailed_block(const struct drm_edid *drm_edid, in drm_for_each_detailed_block() argument
3031 if (!drm_edid) in drm_for_each_detailed_block()
3035 cb(&drm_edid->edid->detailed_timings[i], closure); in drm_for_each_detailed_block()
3037 drm_edid_iter_begin(drm_edid, &edid_iter); in drm_for_each_detailed_block()
3071 drm_monitor_supports_rb(const struct drm_edid *drm_edid) in drm_monitor_supports_rb() argument
3073 if (drm_edid->edid->revision >= 4) { in drm_monitor_supports_rb()
3076 drm_for_each_detailed_block(drm_edid, is_rb, &ret); in drm_monitor_supports_rb()
3080 return ((drm_edid->edid->input & DRM_EDID_INPUT_DIGITAL) != 0); in drm_monitor_supports_rb()
3099 drm_gtf2_hbreak(const struct drm_edid *drm_edid) in drm_gtf2_hbreak() argument
3103 drm_for_each_detailed_block(drm_edid, find_gtf2, &descriptor); in drm_gtf2_hbreak()
3111 drm_gtf2_2c(const struct drm_edid *drm_edid) in drm_gtf2_2c() argument
3115 drm_for_each_detailed_block(drm_edid, find_gtf2, &descriptor); in drm_gtf2_2c()
3123 drm_gtf2_m(const struct drm_edid *drm_edid) in drm_gtf2_m() argument
3127 drm_for_each_detailed_block(drm_edid, find_gtf2, &descriptor); in drm_gtf2_m()
3135 drm_gtf2_k(const struct drm_edid *drm_edid) in drm_gtf2_k() argument
3139 drm_for_each_detailed_block(drm_edid, find_gtf2, &descriptor); in drm_gtf2_k()
3147 drm_gtf2_2j(const struct drm_edid *drm_edid) in drm_gtf2_2j() argument
3151 drm_for_each_detailed_block(drm_edid, find_gtf2, &descriptor); in drm_gtf2_2j()
3184 static int standard_timing_level(const struct drm_edid *drm_edid) in standard_timing_level() argument
3186 const struct edid *edid = drm_edid->edid; in standard_timing_level()
3195 drm_for_each_detailed_block(drm_edid, get_timing_level, &ret); in standard_timing_level()
3198 } else if (edid->revision >= 3 && drm_gtf2_hbreak(drm_edid)) { in standard_timing_level()
3229 const struct drm_edid *drm_edid, in drm_gtf2_mode() argument
3243 if (drm_mode_hsync(mode) > drm_gtf2_hbreak(drm_edid)) { in drm_gtf2_mode()
3247 drm_gtf2_m(drm_edid), in drm_gtf2_mode()
3248 drm_gtf2_2c(drm_edid), in drm_gtf2_mode()
3249 drm_gtf2_k(drm_edid), in drm_gtf2_mode()
3250 drm_gtf2_2j(drm_edid)); in drm_gtf2_mode()
3261 const struct drm_edid *drm_edid, in drm_mode_std() argument
3272 int timing_level = standard_timing_level(drm_edid); in drm_mode_std()
3283 if (drm_edid->edid->revision < 3) in drm_mode_std()
3326 if (drm_monitor_supports_rb(drm_edid)) { in drm_mode_std()
3344 mode = drm_gtf2_mode(dev, drm_edid, hsize, vsize, vrefresh_rate); in drm_mode_std()
3402 const struct drm_edid *drm_edid, in drm_mode_detailed() argument
3493 mode->width_mm = drm_edid->edid->width_cm * 10; in drm_mode_detailed()
3494 mode->height_mm = drm_edid->edid->height_cm * 10; in drm_mode_detailed()
3553 const struct drm_edid *drm_edid, in mode_in_range() argument
3556 const struct edid *edid = drm_edid->edid; in mode_in_range()
3575 if (mode_is_rb(mode) && !drm_monitor_supports_rb(drm_edid)) in mode_in_range()
3600 const struct drm_edid *drm_edid, in drm_dmt_modes_for_range() argument
3608 if (mode_in_range(drm_dmt_modes + i, drm_edid, timing) && in drm_dmt_modes_for_range()
3635 const struct drm_edid *drm_edid, in drm_gtf_modes_for_range() argument
3650 if (!mode_in_range(newmode, drm_edid, timing) || in drm_gtf_modes_for_range()
3664 const struct drm_edid *drm_edid, in drm_gtf2_modes_for_range() argument
3674 newmode = drm_gtf2_mode(dev, drm_edid, m->w, m->h, m->r); in drm_gtf2_modes_for_range()
3679 if (!mode_in_range(newmode, drm_edid, timing) || in drm_gtf2_modes_for_range()
3693 const struct drm_edid *drm_edid, in drm_cvt_modes_for_range() argument
3699 bool rb = drm_monitor_supports_rb(drm_edid); in drm_cvt_modes_for_range()
3709 if (!mode_in_range(newmode, drm_edid, timing) || in drm_cvt_modes_for_range()
3733 closure->drm_edid, in do_inferred_modes()
3736 if (closure->drm_edid->edid->revision < 2) in do_inferred_modes()
3742 closure->drm_edid, in do_inferred_modes()
3747 closure->drm_edid, in do_inferred_modes()
3751 if (closure->drm_edid->edid->revision < 4) in do_inferred_modes()
3755 closure->drm_edid, in do_inferred_modes()
3765 const struct drm_edid *drm_edid) in add_inferred_modes() argument
3769 .drm_edid = drm_edid, in add_inferred_modes()
3772 if (drm_edid->edid->revision >= 1) in add_inferred_modes()
3773 drm_for_each_detailed_block(drm_edid, do_inferred_modes, &closure); in add_inferred_modes()
3824 const struct drm_edid *drm_edid) in add_established_modes() argument
3827 const struct edid *edid = drm_edid->edid; in add_established_modes()
3834 .drm_edid = drm_edid, in add_established_modes()
3850 drm_for_each_detailed_block(drm_edid, do_established_modes, in add_established_modes()
3871 newmode = drm_mode_std(connector, closure->drm_edid, std); in do_standard_modes()
3885 const struct drm_edid *drm_edid) in add_standard_modes() argument
3890 .drm_edid = drm_edid, in add_standard_modes()
3896 newmode = drm_mode_std(connector, drm_edid, in add_standard_modes()
3897 &drm_edid->edid->standard_timings[i]); in add_standard_modes()
3904 if (drm_edid->edid->revision >= 1) in add_standard_modes()
3905 drm_for_each_detailed_block(drm_edid, do_standard_modes, in add_standard_modes()
3977 add_cvt_modes(struct drm_connector *connector, const struct drm_edid *drm_edid) in add_cvt_modes() argument
3981 .drm_edid = drm_edid, in add_cvt_modes()
3984 if (drm_edid->edid->revision >= 3) in add_cvt_modes()
3985 drm_for_each_detailed_block(drm_edid, do_cvt_mode, &closure); in add_cvt_modes()
4005 closure->drm_edid, timing); in do_detailed_mode()
4030 const struct drm_edid *drm_edid) in add_detailed_modes() argument
4034 .drm_edid = drm_edid, in add_detailed_modes()
4037 if (drm_edid->edid->revision >= 4) in add_detailed_modes()
4041 drm_edid->edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING; in add_detailed_modes()
4043 drm_for_each_detailed_block(drm_edid, do_detailed_mode, &closure); in add_detailed_modes()
4074 const u8 *drm_find_edid_extension(const struct drm_edid *drm_edid, in drm_find_edid_extension() argument
4081 if (!drm_edid || !drm_edid_extension_block_count(drm_edid)) in drm_find_edid_extension()
4085 for (i = *ext_index; i < drm_edid_extension_block_count(drm_edid); i++) { in drm_find_edid_extension()
4086 edid_ext = drm_edid_extension_block_data(drm_edid, i); in drm_find_edid_extension()
4091 if (i >= drm_edid_extension_block_count(drm_edid)) in drm_find_edid_extension()
4100 static bool drm_edid_has_cta_extension(const struct drm_edid *drm_edid) in drm_edid_has_cta_extension() argument
4108 if (drm_find_edid_extension(drm_edid, CEA_EXT, &ext_index)) in drm_edid_has_cta_extension()
4112 displayid_iter_edid_begin(drm_edid, &iter); in drm_edid_has_cta_extension()
4387 const struct drm_edid *drm_edid) in add_alternate_cea_modes() argument
4395 if (!drm_edid_has_cta_extension(drm_edid)) in add_alternate_cea_modes()
4918 static void cea_db_iter_edid_begin(const struct drm_edid *drm_edid, in cea_db_iter_edid_begin() argument
4923 drm_edid_iter_begin(drm_edid, &iter->edid_iter); in cea_db_iter_edid_begin()
4924 displayid_iter_edid_begin(drm_edid, &iter->displayid_iter); in cea_db_iter_edid_begin()
5210 const struct drm_edid *drm_edid) in add_cea_modes() argument
5219 cea_db_iter_edid_begin(drm_edid, &iter); in add_cea_modes()
5407 static int get_monitor_name(const struct drm_edid *drm_edid, char name[13]) in get_monitor_name() argument
5412 if (!drm_edid || !name) in get_monitor_name()
5415 drm_for_each_detailed_block(drm_edid, monitor_name, &edid_name); in get_monitor_name()
5442 struct drm_edid drm_edid = { in drm_edid_get_monitor_name() local
5447 name_length = min(get_monitor_name(&drm_edid, buf), bufsize - 1); in drm_edid_get_monitor_name()
5476 const struct drm_edid *drm_edid) in drm_edid_to_eld() argument
5485 if (!drm_edid) in drm_edid_to_eld()
5488 mnl = get_monitor_name(drm_edid, &eld[DRM_ELD_MONITOR_NAME_STRING]); in drm_edid_to_eld()
5498 eld[DRM_ELD_MANUFACTURER_NAME0] = drm_edid->edid->mfg_id[0]; in drm_edid_to_eld()
5499 eld[DRM_ELD_MANUFACTURER_NAME1] = drm_edid->edid->mfg_id[1]; in drm_edid_to_eld()
5500 eld[DRM_ELD_PRODUCT_CODE0] = drm_edid->edid->prod_code[0]; in drm_edid_to_eld()
5501 eld[DRM_ELD_PRODUCT_CODE1] = drm_edid->edid->prod_code[1]; in drm_edid_to_eld()
5503 cea_db_iter_edid_begin(drm_edid, &iter); in drm_edid_to_eld()
5550 static int _drm_edid_to_sad(const struct drm_edid *drm_edid, in _drm_edid_to_sad() argument
5557 cea_db_iter_edid_begin(drm_edid, &iter); in _drm_edid_to_sad()
5597 struct drm_edid drm_edid; in drm_edid_to_sad() local
5599 return _drm_edid_to_sad(drm_edid_legacy_init(&drm_edid, edid), sads); in drm_edid_to_sad()
5603 static int _drm_edid_to_speaker_allocation(const struct drm_edid *drm_edid, in _drm_edid_to_speaker_allocation() argument
5610 cea_db_iter_edid_begin(drm_edid, &iter); in _drm_edid_to_speaker_allocation()
5643 struct drm_edid drm_edid; in drm_edid_to_speaker_allocation() local
5645 return _drm_edid_to_speaker_allocation(drm_edid_legacy_init(&drm_edid, edid), in drm_edid_to_speaker_allocation()
5691 static bool _drm_detect_hdmi_monitor(const struct drm_edid *drm_edid) in _drm_detect_hdmi_monitor() argument
5701 cea_db_iter_edid_begin(drm_edid, &iter); in _drm_detect_hdmi_monitor()
5726 struct drm_edid drm_edid; in drm_detect_hdmi_monitor() local
5728 return _drm_detect_hdmi_monitor(drm_edid_legacy_init(&drm_edid, edid)); in drm_detect_hdmi_monitor()
5732 static bool _drm_detect_monitor_audio(const struct drm_edid *drm_edid) in _drm_detect_monitor_audio() argument
5740 drm_edid_iter_begin(drm_edid, &edid_iter); in _drm_detect_monitor_audio()
5755 cea_db_iter_edid_begin(drm_edid, &iter); in _drm_detect_monitor_audio()
5788 struct drm_edid drm_edid; in drm_detect_monitor_audio() local
5790 return _drm_detect_monitor_audio(drm_edid_legacy_init(&drm_edid, edid)); in drm_detect_monitor_audio()
6204 const struct drm_edid *drm_edid) in drm_parse_cea_ext() argument
6213 drm_edid_iter_begin(drm_edid, &edid_iter); in drm_parse_cea_ext()
6236 cea_db_iter_edid_begin(drm_edid, &iter); in drm_parse_cea_ext()
6273 const struct edid *edid = closure->drm_edid->edid; in get_monitor_range()
6302 const struct drm_edid *drm_edid) in drm_get_monitor_range() argument
6307 .drm_edid = drm_edid, in drm_get_monitor_range()
6310 if (drm_edid->edid->revision < 4) in drm_get_monitor_range()
6313 if (!(drm_edid->edid->features & DRM_EDID_FEATURE_CONTINUOUS_FREQ)) in drm_get_monitor_range()
6316 drm_for_each_detailed_block(drm_edid, get_monitor_range, &closure); in drm_get_monitor_range()
6385 const struct drm_edid *drm_edid) in drm_update_mso() argument
6390 displayid_iter_edid_begin(drm_edid, &iter); in drm_update_mso()
6437 const struct drm_edid *drm_edid) in update_display_info() argument
6445 if (!drm_edid) in update_display_info()
6448 edid = drm_edid->edid; in update_display_info()
6450 info->quirks = edid_get_quirks(drm_edid); in update_display_info()
6455 drm_get_monitor_range(connector, drm_edid); in update_display_info()
6464 drm_parse_cea_ext(connector, drm_edid); in update_display_info()
6519 drm_update_mso(connector, drm_edid); in update_display_info()
6545 drm_edid_to_eld(connector, drm_edid); in update_display_info()
6623 const struct drm_edid *drm_edid) in add_displayid_detailed_modes() argument
6629 displayid_iter_edid_begin(drm_edid, &iter); in add_displayid_detailed_modes()
6641 const struct drm_edid *drm_edid) in _drm_edid_connector_add_modes() argument
6646 if (!drm_edid) in _drm_edid_connector_add_modes()
6663 num_modes += add_detailed_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6664 num_modes += add_cvt_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6665 num_modes += add_standard_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6666 num_modes += add_established_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6667 num_modes += add_cea_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6668 num_modes += add_alternate_cea_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6669 num_modes += add_displayid_detailed_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6670 if (drm_edid->edid->features & DRM_EDID_FEATURE_CONTINUOUS_FREQ) in _drm_edid_connector_add_modes()
6671 num_modes += add_inferred_modes(connector, drm_edid); in _drm_edid_connector_add_modes()
6680 const struct drm_edid *drm_edid);
6683 const struct drm_edid *drm_edid) in _drm_edid_connector_property_update() argument
6692 if (!drm_edid_are_equal(drm_edid ? drm_edid->edid : NULL, old_edid)) { in _drm_edid_connector_property_update()
6703 drm_edid ? drm_edid->size : 0, in _drm_edid_connector_property_update()
6704 drm_edid ? drm_edid->edid : NULL, in _drm_edid_connector_property_update()
6748 const struct drm_edid *drm_edid) in drm_edid_connector_update() argument
6750 update_display_info(connector, drm_edid); in drm_edid_connector_update()
6752 _drm_update_tile_info(connector, drm_edid); in drm_edid_connector_update()
6754 return _drm_edid_connector_property_update(connector, drm_edid); in drm_edid_connector_update()
6772 const struct drm_edid *drm_edid = NULL; in drm_edid_connector_add_modes() local
6776 drm_edid = drm_edid_alloc(connector->edid_blob_ptr->data, in drm_edid_connector_add_modes()
6779 count = _drm_edid_connector_add_modes(connector, drm_edid); in drm_edid_connector_add_modes()
6781 drm_edid_free(drm_edid); in drm_edid_connector_add_modes()
6806 struct drm_edid drm_edid; in drm_connector_update_edid_property() local
6808 return drm_edid_connector_update(connector, drm_edid_legacy_init(&drm_edid, edid)); in drm_connector_update_edid_property()
6827 struct drm_edid _drm_edid; in drm_add_edid_modes()
6828 const struct drm_edid *drm_edid; in drm_add_edid_modes() local
6836 drm_edid = drm_edid_legacy_init(&_drm_edid, edid); in drm_add_edid_modes()
6838 update_display_info(connector, drm_edid); in drm_add_edid_modes()
6840 return _drm_edid_connector_add_modes(connector, drm_edid); in drm_add_edid_modes()
7246 const struct drm_edid *drm_edid) in _drm_update_tile_info() argument
7253 displayid_iter_edid_begin(drm_edid, &iter); in _drm_update_tile_info()