• Home
  • Raw
  • Download

Lines Matching refs:edid

39 #define version_greater(edid, maj, min) \  argument
40 (((edid)->version > (maj)) || \
41 ((edid)->version == (maj) && (edid)->revision > (min)))
83 struct edid *edid; member
1070 struct edid *edid);
1106 struct edid *edid = (struct edid *)raw_edid; in drm_edid_block_valid() local
1153 if (edid->version != 1) { in drm_edid_block_valid()
1154 DRM_ERROR("EDID has major version %d, instead of 1\n", edid->version); in drm_edid_block_valid()
1158 if (edid->revision > 4) in drm_edid_block_valid()
1190 bool drm_edid_is_valid(struct edid *edid) in drm_edid_is_valid() argument
1193 u8 *raw = (u8 *)edid; in drm_edid_is_valid()
1195 if (!edid) in drm_edid_is_valid()
1198 for (i = 0; i <= edid->extensions; i++) in drm_edid_is_valid()
1286 struct edid *drm_do_get_edid(struct drm_connector *connector, in drm_do_get_edid()
1315 return (struct edid *)block; in drm_do_get_edid()
1355 return (struct edid *)block; in drm_do_get_edid()
1395 struct edid *drm_get_edid(struct drm_connector *connector, in drm_get_edid()
1398 struct edid *edid; in drm_get_edid() local
1403 edid = drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter); in drm_get_edid()
1404 if (edid) in drm_get_edid()
1405 drm_get_displayid(connector, edid); in drm_get_edid()
1406 return edid; in drm_get_edid()
1416 struct edid *drm_edid_duplicate(const struct edid *edid) in drm_edid_duplicate() argument
1418 return kmemdup(edid, (edid->extensions + 1) * EDID_LENGTH, GFP_KERNEL); in drm_edid_duplicate()
1431 static bool edid_vendor(struct edid *edid, char *vendor) in edid_vendor() argument
1435 edid_vendor[0] = ((edid->mfg_id[0] & 0x7c) >> 2) + '@'; in edid_vendor()
1436 edid_vendor[1] = (((edid->mfg_id[0] & 0x3) << 3) | in edid_vendor()
1437 ((edid->mfg_id[1] & 0xe0) >> 5)) + '@'; in edid_vendor()
1438 edid_vendor[2] = (edid->mfg_id[1] & 0x1f) + '@'; in edid_vendor()
1449 static u32 edid_get_quirks(struct edid *edid) in edid_get_quirks() argument
1457 if (edid_vendor(edid, quirk->vendor) && in edid_get_quirks()
1458 (EDID_PRODUCT_ID(edid) == quirk->product_id)) in edid_get_quirks()
1595 struct edid *edid = (struct edid *)raw_edid; in drm_for_each_detailed_block() local
1597 if (edid == NULL) in drm_for_each_detailed_block()
1601 cb(&(edid->detailed_timings[i]), closure); in drm_for_each_detailed_block()
1629 drm_monitor_supports_rb(struct edid *edid) in drm_monitor_supports_rb() argument
1631 if (edid->revision >= 4) { in drm_monitor_supports_rb()
1633 drm_for_each_detailed_block((u8 *)edid, is_rb, &ret); in drm_monitor_supports_rb()
1637 return ((edid->input & DRM_EDID_INPUT_DIGITAL) != 0); in drm_monitor_supports_rb()
1650 drm_gtf2_hbreak(struct edid *edid) in drm_gtf2_hbreak() argument
1653 drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r); in drm_gtf2_hbreak()
1658 drm_gtf2_2c(struct edid *edid) in drm_gtf2_2c() argument
1661 drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r); in drm_gtf2_2c()
1666 drm_gtf2_m(struct edid *edid) in drm_gtf2_m() argument
1669 drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r); in drm_gtf2_m()
1674 drm_gtf2_k(struct edid *edid) in drm_gtf2_k() argument
1677 drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r); in drm_gtf2_k()
1682 drm_gtf2_2j(struct edid *edid) in drm_gtf2_2j() argument
1685 drm_for_each_detailed_block((u8 *)edid, find_gtf2, &r); in drm_gtf2_2j()
1693 static int standard_timing_level(struct edid *edid) in standard_timing_level() argument
1695 if (edid->revision >= 2) { in standard_timing_level()
1696 if (edid->revision >= 4 && (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF)) in standard_timing_level()
1698 if (drm_gtf2_hbreak(edid)) in standard_timing_level()
1727 drm_mode_std(struct drm_connector *connector, struct edid *edid, in drm_mode_std() argument
1738 int timing_level = standard_timing_level(edid); in drm_mode_std()
1749 if (edid->revision < 3) in drm_mode_std()
1790 if (drm_monitor_supports_rb(edid)) { in drm_mode_std()
1816 if (drm_mode_hsync(mode) > drm_gtf2_hbreak(edid)) { in drm_mode_std()
1820 drm_gtf2_m(edid), in drm_mode_std()
1821 drm_gtf2_2c(edid), in drm_mode_std()
1822 drm_gtf2_k(edid), in drm_mode_std()
1823 drm_gtf2_2j(edid)); in drm_mode_std()
1887 struct edid *edid, in drm_mode_detailed() argument
1975 mode->width_mm = edid->width_cm * 10; in drm_mode_detailed()
1976 mode->height_mm = edid->height_cm * 10; in drm_mode_detailed()
1988 struct edid *edid, u8 *t) in mode_in_hsync_range() argument
1993 if (edid->revision >= 4) in mode_in_hsync_range()
1996 if (edid->revision >= 4) in mode_in_hsync_range()
2005 struct edid *edid, u8 *t) in mode_in_vsync_range() argument
2010 if (edid->revision >= 4) in mode_in_vsync_range()
2013 if (edid->revision >= 4) in mode_in_vsync_range()
2021 range_pixel_clock(struct edid *edid, u8 *t) in range_pixel_clock() argument
2028 if (edid->revision >= 4 && t[10] == 0x04) in range_pixel_clock()
2036 mode_in_range(const struct drm_display_mode *mode, struct edid *edid, in mode_in_range() argument
2042 if (!mode_in_hsync_range(mode, edid, t)) in mode_in_range()
2045 if (!mode_in_vsync_range(mode, edid, t)) in mode_in_range()
2048 if ((max_clock = range_pixel_clock(edid, t))) in mode_in_range()
2053 if (edid->revision >= 4 && t[10] == 0x04) in mode_in_range()
2057 if (mode_is_rb(mode) && !drm_monitor_supports_rb(edid)) in mode_in_range()
2082 drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid, in drm_dmt_modes_for_range() argument
2090 if (mode_in_range(drm_dmt_modes + i, edid, timing) && in drm_dmt_modes_for_range()
2117 drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid, in drm_gtf_modes_for_range() argument
2131 if (!mode_in_range(newmode, edid, timing) || in drm_gtf_modes_for_range()
2145 drm_cvt_modes_for_range(struct drm_connector *connector, struct edid *edid, in drm_cvt_modes_for_range() argument
2151 bool rb = drm_monitor_supports_rb(edid); in drm_cvt_modes_for_range()
2160 if (!mode_in_range(newmode, edid, timing) || in drm_cvt_modes_for_range()
2184 closure->edid, in do_inferred_modes()
2187 if (!version_greater(closure->edid, 1, 1)) in do_inferred_modes()
2194 closure->edid, in do_inferred_modes()
2198 if (!version_greater(closure->edid, 1, 3)) in do_inferred_modes()
2202 closure->edid, in do_inferred_modes()
2212 add_inferred_modes(struct drm_connector *connector, struct edid *edid) in add_inferred_modes() argument
2216 .edid = edid, in add_inferred_modes()
2219 if (version_greater(edid, 1, 0)) in add_inferred_modes()
2220 drm_for_each_detailed_block((u8 *)edid, do_inferred_modes, in add_inferred_modes()
2274 add_established_modes(struct drm_connector *connector, struct edid *edid) in add_established_modes() argument
2277 unsigned long est_bits = edid->established_timings.t1 | in add_established_modes()
2278 (edid->established_timings.t2 << 8) | in add_established_modes()
2279 ((edid->established_timings.mfg_rsvd & 0x80) << 9); in add_established_modes()
2283 .edid = edid, in add_established_modes()
2297 if (version_greater(edid, 1, 0)) in add_established_modes()
2298 drm_for_each_detailed_block((u8 *)edid, in add_established_modes()
2310 struct edid *edid = closure->edid; in do_standard_modes() local
2319 newmode = drm_mode_std(connector, edid, std); in do_standard_modes()
2337 add_standard_modes(struct drm_connector *connector, struct edid *edid) in add_standard_modes() argument
2342 .edid = edid, in add_standard_modes()
2348 newmode = drm_mode_std(connector, edid, in add_standard_modes()
2349 &edid->standard_timings[i]); in add_standard_modes()
2356 if (version_greater(edid, 1, 0)) in add_standard_modes()
2357 drm_for_each_detailed_block((u8 *)edid, do_standard_modes, in add_standard_modes()
2425 add_cvt_modes(struct drm_connector *connector, struct edid *edid) in add_cvt_modes() argument
2429 .edid = edid, in add_cvt_modes()
2432 if (version_greater(edid, 1, 2)) in add_cvt_modes()
2433 drm_for_each_detailed_block((u8 *)edid, do_cvt_mode, &closure); in add_cvt_modes()
2450 closure->edid, timing, in do_detailed_mode()
2478 add_detailed_modes(struct drm_connector *connector, struct edid *edid, in add_detailed_modes() argument
2483 .edid = edid, in add_detailed_modes()
2488 if (closure.preferred && !version_greater(edid, 1, 3)) in add_detailed_modes()
2490 (edid->features & DRM_EDID_FEATURE_PREFERRED_TIMING); in add_detailed_modes()
2492 drm_for_each_detailed_block((u8 *)edid, do_detailed_mode, &closure); in add_detailed_modes()
2510 static u8 *drm_find_edid_extension(struct edid *edid, int ext_id) in drm_find_edid_extension() argument
2516 if (edid == NULL || edid->extensions == 0) in drm_find_edid_extension()
2520 for (i = 0; i < edid->extensions; i++) { in drm_find_edid_extension()
2521 edid_ext = (u8 *)edid + EDID_LENGTH * (i + 1); in drm_find_edid_extension()
2526 if (i == edid->extensions) in drm_find_edid_extension()
2532 static u8 *drm_find_cea_extension(struct edid *edid) in drm_find_cea_extension() argument
2534 return drm_find_edid_extension(edid, CEA_EXT); in drm_find_cea_extension()
2537 static u8 *drm_find_displayid_extension(struct edid *edid) in drm_find_displayid_extension() argument
2539 return drm_find_edid_extension(edid, DISPLAYID_EXT); in drm_find_displayid_extension()
2663 add_alternate_cea_modes(struct drm_connector *connector, struct edid *edid) in add_alternate_cea_modes() argument
2671 if (!drm_find_cea_extension(edid)) in add_alternate_cea_modes()
3094 add_cea_modes(struct drm_connector *connector, struct edid *edid) in add_cea_modes() argument
3096 const u8 *cea = drm_find_cea_extension(edid); in add_cea_modes()
3227 void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid) in drm_edid_to_eld() argument
3239 cea = drm_find_cea_extension(edid); in drm_edid_to_eld()
3246 drm_for_each_detailed_block((u8 *)edid, monitor_name, &name); in drm_edid_to_eld()
3257 eld[16] = edid->mfg_id[0]; in drm_edid_to_eld()
3258 eld[17] = edid->mfg_id[1]; in drm_edid_to_eld()
3259 eld[18] = edid->prod_code[0]; in drm_edid_to_eld()
3260 eld[19] = edid->prod_code[1]; in drm_edid_to_eld()
3323 int drm_edid_to_sad(struct edid *edid, struct cea_sad **sads) in drm_edid_to_sad() argument
3329 cea = drm_find_cea_extension(edid); in drm_edid_to_sad()
3384 int drm_edid_to_speaker_allocation(struct edid *edid, u8 **sadb) in drm_edid_to_speaker_allocation() argument
3390 cea = drm_find_cea_extension(edid); in drm_edid_to_speaker_allocation()
3502 bool drm_detect_hdmi_monitor(struct edid *edid) in drm_detect_hdmi_monitor() argument
3508 edid_ext = drm_find_cea_extension(edid); in drm_detect_hdmi_monitor()
3540 bool drm_detect_monitor_audio(struct edid *edid) in drm_detect_monitor_audio() argument
3547 edid_ext = drm_find_cea_extension(edid); in drm_detect_monitor_audio()
3585 bool drm_rgb_quant_range_selectable(struct edid *edid) in drm_rgb_quant_range_selectable() argument
3590 edid_ext = drm_find_cea_extension(edid); in drm_rgb_quant_range_selectable()
3620 static bool drm_assign_hdmi_deep_color_info(struct edid *edid, in drm_assign_hdmi_deep_color_info() argument
3629 edid_ext = drm_find_cea_extension(edid); in drm_assign_hdmi_deep_color_info()
3720 static void drm_add_display_info(struct edid *edid, in drm_add_display_info() argument
3726 info->width_mm = edid->width_cm * 10; in drm_add_display_info()
3727 info->height_mm = edid->height_cm * 10; in drm_add_display_info()
3733 if (edid->revision < 3) in drm_add_display_info()
3736 if (!(edid->input & DRM_EDID_INPUT_DIGITAL)) in drm_add_display_info()
3740 edid_ext = drm_find_cea_extension(edid); in drm_add_display_info()
3753 drm_assign_hdmi_deep_color_info(edid, info, connector); in drm_add_display_info()
3756 if (edid->revision < 4) in drm_add_display_info()
3759 switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) { in drm_add_display_info()
3788 if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB444) in drm_add_display_info()
3790 if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422) in drm_add_display_info()
3803 int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) in drm_add_edid_modes() argument
3808 if (edid == NULL) { in drm_add_edid_modes()
3811 if (!drm_edid_is_valid(edid)) { in drm_add_edid_modes()
3817 quirks = edid_get_quirks(edid); in drm_add_edid_modes()
3833 num_modes += add_detailed_modes(connector, edid, quirks); in drm_add_edid_modes()
3834 num_modes += add_cvt_modes(connector, edid); in drm_add_edid_modes()
3835 num_modes += add_standard_modes(connector, edid); in drm_add_edid_modes()
3836 num_modes += add_established_modes(connector, edid); in drm_add_edid_modes()
3837 num_modes += add_cea_modes(connector, edid); in drm_add_edid_modes()
3838 num_modes += add_alternate_cea_modes(connector, edid); in drm_add_edid_modes()
3839 if (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF) in drm_add_edid_modes()
3840 num_modes += add_inferred_modes(connector, edid); in drm_add_edid_modes()
3845 drm_add_display_info(edid, &connector->display_info, connector); in drm_add_edid_modes()
4146 struct edid *edid) in drm_get_displayid() argument
4151 displayid = drm_find_displayid_extension(edid); in drm_get_displayid()