Lines Matching +full:timing +full:-

1 // SPDX-License-Identifier: GPL-2.0+
21 if ((edid_info == NULL) || (edid_info->version == 0)) in edid_check_info()
22 return -1; in edid_check_info()
24 if (memcmp(edid_info->header, "\x0\xff\xff\xff\xff\xff\xff\x0", 8)) in edid_check_info()
25 return -1; in edid_check_info()
27 if (edid_info->version == 0xff && edid_info->revision == 0xff) in edid_check_info()
28 return -1; in edid_check_info()
41 return (checksum == 0) ? 0 : -EINVAL; in edid_check_checksum()
53 return -1; in edid_get_ranges()
55 for (i = 0; i < ARRAY_SIZE(edid->monitor_details.descriptor); i++) { in edid_get_ranges()
56 monitor = &edid->monitor_details.descriptor[i]; in edid_get_ranges()
57 if (monitor->type == EDID_MONITOR_DESCRIPTOR_RANGE) { in edid_get_ranges()
58 *hmin = monitor->data.range_data.horizontal_min; in edid_get_ranges()
59 *hmax = monitor->data.range_data.horizontal_max; in edid_get_ranges()
60 *vmin = monitor->data.range_data.vertical_min; in edid_get_ranges()
61 *vmax = monitor->data.range_data.vertical_max; in edid_get_ranges()
65 return -1; in edid_get_ranges()
68 /* Set all parts of a timing entry to the same value */
71 entry->min = value; in set_entry()
72 entry->typ = value; in set_entry()
73 entry->max = value; in set_entry()
77 * decode_timing() - Decoding an 18-byte detailed timing record
79 * @buf: Pointer to EDID detailed timing record
80 * @timing: Place to put timing
82 static void decode_timing(u8 *buf, struct display_timing *timing) in decode_timing() argument
90 set_entry(&timing->pixelclock, (buf[0] + (buf[1] << 8)) * 10000); in decode_timing()
104 set_entry(&timing->hactive, ha); in decode_timing()
105 set_entry(&timing->hfront_porch, hso); in decode_timing()
106 set_entry(&timing->hback_porch, hbl - hso - hspw); in decode_timing()
107 set_entry(&timing->hsync_len, hspw); in decode_timing()
109 set_entry(&timing->vactive, va); in decode_timing()
110 set_entry(&timing->vfront_porch, vso); in decode_timing()
111 set_entry(&timing->vback_porch, vbl - vso - vspw); in decode_timing()
112 set_entry(&timing->vsync_len, vspw); in decode_timing()
114 timing->flags = 0; in decode_timing()
116 timing->flags |= DISPLAY_FLAGS_HSYNC_HIGH; in decode_timing()
118 timing->flags |= DISPLAY_FLAGS_HSYNC_LOW; in decode_timing()
120 timing->flags |= DISPLAY_FLAGS_VSYNC_HIGH; in decode_timing()
122 timing->flags |= DISPLAY_FLAGS_VSYNC_LOW; in decode_timing()
125 timing->flags = DISPLAY_FLAGS_INTERLACED; in decode_timing()
130 timing->pixelclock.typ, in decode_timing()
148 end = info->dtd_offset; in cea_is_hdmi_vsdb_present()
150 end = sizeof(info->data); in cea_is_hdmi_vsdb_present()
151 if (end < 4 || end > sizeof(info->data)) in cea_is_hdmi_vsdb_present()
153 end -= 4; in cea_is_hdmi_vsdb_present()
159 u8 *db = &info->data[i + 1]; in cea_is_hdmi_vsdb_present()
171 int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing, in edid_get_timing() argument
180 return -EINVAL; in edid_get_timing()
184 debug("%s: No preferred timing\n", __func__); in edid_get_timing()
185 return -ENOENT; in edid_get_timing()
188 /* Look for detailed timing */ in edid_get_timing()
193 desc = &edid->monitor_details.descriptor[i]; in edid_get_timing()
194 if (desc->zero_flag_1 != 0) { in edid_get_timing()
195 decode_timing((u8 *)desc, timing); in edid_get_timing()
201 return -EINVAL; in edid_get_timing()
205 return -ENOSYS; in edid_get_timing()
207 if (edid->version != 1 || edid->revision < 4) { in edid_get_timing()
209 __func__, edid->version, edid->revision); in edid_get_timing()
210 *panel_bits_per_colourp = -1; in edid_get_timing()
213 ((edid->video_input_definition & 0x70) >> 3) + 4; in edid_get_timing()
216 timing->hdmi_monitor = false; in edid_get_timing()
217 if (edid->extension_flag && (buf_size >= EDID_EXT_SIZE)) { in edid_get_timing()
221 if (info->extension_tag == EDID_CEA861_EXTENSION_TAG) in edid_get_timing()
222 timing->hdmi_monitor = cea_is_hdmi_vsdb_present(info); in edid_get_timing()
243 s = &string[strlen(string) - 1]; in snip()
247 *(s--) = '\0'; in snip()
256 * @have_timing Modifies to 1 if the desciptor contains timing info
262 struct edid_detailed_timing *timing = in edid_print_dtd() local
266 if (monitor->type == EDID_MONITOR_DESCRIPTOR_SERIAL) in edid_print_dtd()
268 snip(monitor->data.string)); in edid_print_dtd()
269 else if (monitor->type == EDID_MONITOR_DESCRIPTOR_ASCII) in edid_print_dtd()
271 snip(monitor->data.string)); in edid_print_dtd()
272 else if (monitor->type == EDID_MONITOR_DESCRIPTOR_NAME) in edid_print_dtd()
274 snip(monitor->data.string)); in edid_print_dtd()
275 else if (monitor->type == EDID_MONITOR_DESCRIPTOR_RANGE) in edid_print_dtd()
277 "%d-%d kHz, vertical refresh: " in edid_print_dtd()
278 "%d-%d Hz, max pixel clock: " in edid_print_dtd()
280 monitor->data.range_data.horizontal_min, in edid_print_dtd()
281 monitor->data.range_data.horizontal_max, in edid_print_dtd()
282 monitor->data.range_data.vertical_min, in edid_print_dtd()
283 monitor->data.range_data.vertical_max, in edid_print_dtd()
284 monitor->data.range_data.pixel_clock_max * 10); in edid_print_dtd()
289 pixclock = EDID_DETAILED_TIMING_PIXEL_CLOCK(*timing); in edid_print_dtd()
290 h_active = EDID_DETAILED_TIMING_HORIZONTAL_ACTIVE(*timing); in edid_print_dtd()
291 h_blanking = EDID_DETAILED_TIMING_HORIZONTAL_BLANKING(*timing); in edid_print_dtd()
292 v_active = EDID_DETAILED_TIMING_VERTICAL_ACTIVE(*timing); in edid_print_dtd()
293 v_blanking = EDID_DETAILED_TIMING_VERTICAL_BLANKING(*timing); in edid_print_dtd()
315 name[0] = EDID1_INFO_MANUFACTURER_NAME_CHAR1(*edid) + 'A' - 1; in edid_get_manufacturer_name()
316 name[1] = EDID1_INFO_MANUFACTURER_NAME_CHAR2(*edid) + 'A' - 1; in edid_get_manufacturer_name()
317 name[2] = EDID1_INFO_MANUFACTURER_NAME_CHAR3(*edid) + 'A' - 1; in edid_get_manufacturer_name()
334 edid_info->version, edid_info->revision); in edid_print_info()
344 serial_number -= 0x7000000; in edid_print_info()
346 serial_number -= 456150000; in edid_print_info()
348 serial_number -= 640000000; in edid_print_info()
352 edid_info->week, edid_info->year + 1990); in edid_print_info()
370 EDID1_INFO_FEATURE_RGB(*edid_info) ? "RGB" : "non-RGB"); in edid_print_info()
373 edid_info->max_size_horizontal, in edid_print_info()
374 edid_info->max_size_vertical); in edid_print_info()
420 for (i = 0; i < ARRAY_SIZE(edid_info->standard_timings); i++) { in edid_print_info()
453 /* Detailed timing information. */ in edid_print_info()
454 for (i = 0; i < ARRAY_SIZE(edid_info->monitor_details.descriptor); in edid_print_info()
456 edid_print_dtd(&edid_info->monitor_details.descriptor[i], in edid_print_info()