Lines Matching refs:connector

94 	struct drm_connector *connector;  member
2149 static void connector_bad_edid(struct drm_connector *connector, in connector_bad_edid() argument
2165 connector->real_edid_checksum = in connector_bad_edid()
2168 if (connector->bad_edid_counter++ && !drm_debug_enabled(DRM_UT_KMS)) in connector_bad_edid()
2171 drm_dbg_kms(connector->dev, "%s: EDID is invalid:\n", connector->name); in connector_bad_edid()
2177 static struct edid *drm_get_override_edid(struct drm_connector *connector, in drm_get_override_edid() argument
2182 if (connector->override_edid) in drm_get_override_edid()
2183 override = drm_edid_duplicate(connector->edid_blob_ptr->data); in drm_get_override_edid()
2186 override = drm_load_edid_firmware(connector); in drm_get_override_edid()
2196 int drm_edid_override_set(struct drm_connector *connector, const void *edid, in drm_edid_override_set() argument
2204 connector->override_edid = false; in drm_edid_override_set()
2206 ret = drm_connector_update_edid_property(connector, edid); in drm_edid_override_set()
2208 connector->override_edid = true; in drm_edid_override_set()
2214 int drm_edid_override_reset(struct drm_connector *connector) in drm_edid_override_reset() argument
2216 connector->override_edid = false; in drm_edid_override_reset()
2218 return drm_connector_update_edid_property(connector, NULL); in drm_edid_override_reset()
2232 int drm_add_override_edid_modes(struct drm_connector *connector) in drm_add_override_edid_modes() argument
2237 override = drm_get_override_edid(connector, NULL); in drm_add_override_edid_modes()
2239 drm_connector_update_edid_property(connector, override); in drm_add_override_edid_modes()
2240 num_modes = drm_add_edid_modes(connector, override); in drm_add_override_edid_modes()
2244 connector->base.id, connector->name, num_modes); in drm_add_override_edid_modes()
2286 static struct edid *_drm_do_get_edid(struct drm_connector *connector, in _drm_do_get_edid() argument
2295 edid = drm_get_override_edid(connector, &alloc_size); in _drm_do_get_edid()
2312 connector->edid_corrupt = false; in _drm_do_get_edid()
2314 connector->edid_corrupt = true; in _drm_do_get_edid()
2318 connector->null_edid_counter++; in _drm_do_get_edid()
2320 connector_bad_edid(connector, edid, 1); in _drm_do_get_edid()
2369 connector_bad_edid(connector, edid, num_blocks); in _drm_do_get_edid()
2405 struct edid *drm_do_get_edid(struct drm_connector *connector, in drm_do_get_edid() argument
2409 return _drm_do_get_edid(connector, read_block, context, NULL); in drm_do_get_edid()
2545 struct edid *drm_get_edid(struct drm_connector *connector, in drm_get_edid() argument
2550 if (connector->force == DRM_FORCE_OFF) in drm_get_edid()
2553 if (connector->force == DRM_FORCE_UNSPECIFIED && !drm_probe_ddc(adapter)) in drm_get_edid()
2556 edid = _drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter, NULL); in drm_get_edid()
2557 drm_connector_update_edid_property(connector, edid); in drm_get_edid()
2585 const struct drm_edid *drm_edid_read_custom(struct drm_connector *connector, in drm_edid_read_custom() argument
2593 edid = _drm_do_get_edid(connector, read_block, context, &size); in drm_edid_read_custom()
2598 drm_WARN_ON(connector->dev, !size); in drm_edid_read_custom()
2626 const struct drm_edid *drm_edid_read_ddc(struct drm_connector *connector, in drm_edid_read_ddc() argument
2631 if (connector->force == DRM_FORCE_OFF) in drm_edid_read_ddc()
2634 if (connector->force == DRM_FORCE_UNSPECIFIED && !drm_probe_ddc(adapter)) in drm_edid_read_ddc()
2637 drm_edid = drm_edid_read_custom(connector, drm_do_probe_ddc_edid, adapter); in drm_edid_read_ddc()
2659 const struct drm_edid *drm_edid_read(struct drm_connector *connector) in drm_edid_read() argument
2661 if (drm_WARN_ON(connector->dev, !connector->ddc)) in drm_edid_read()
2664 return drm_edid_read_ddc(connector, connector->ddc); in drm_edid_read()
2751 struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, in drm_get_edid_switcheroo() argument
2754 struct drm_device *dev = connector->dev; in drm_get_edid_switcheroo()
2762 edid = drm_get_edid(connector, adapter); in drm_get_edid_switcheroo()
2811 static void edid_fixup_preferred(struct drm_connector *connector, in edid_fixup_preferred() argument
2818 if (list_empty(&connector->probed_modes)) in edid_fixup_preferred()
2826 preferred_mode = list_first_entry(&connector->probed_modes, in edid_fixup_preferred()
2829 list_for_each_entry_safe(cur_mode, t, &connector->probed_modes, head) { in edid_fixup_preferred()
3120 static struct drm_display_mode *drm_mode_std(struct drm_connector *connector, in drm_mode_std() argument
3124 struct drm_device *dev = connector->dev; in drm_mode_std()
3168 list_for_each_entry(m, &connector->probed_modes, head) in drm_mode_std()
3454 static bool valid_inferred_mode(const struct drm_connector *connector, in valid_inferred_mode() argument
3460 list_for_each_entry(m, &connector->probed_modes, head) { in valid_inferred_mode()
3472 static int drm_dmt_modes_for_range(struct drm_connector *connector, in drm_dmt_modes_for_range() argument
3478 struct drm_device *dev = connector->dev; in drm_dmt_modes_for_range()
3482 valid_inferred_mode(connector, drm_dmt_modes + i)) { in drm_dmt_modes_for_range()
3485 drm_mode_probed_add(connector, newmode); in drm_dmt_modes_for_range()
3507 static int drm_gtf_modes_for_range(struct drm_connector *connector, in drm_gtf_modes_for_range() argument
3513 struct drm_device *dev = connector->dev; in drm_gtf_modes_for_range()
3524 !valid_inferred_mode(connector, newmode)) { in drm_gtf_modes_for_range()
3529 drm_mode_probed_add(connector, newmode); in drm_gtf_modes_for_range()
3536 static int drm_cvt_modes_for_range(struct drm_connector *connector, in drm_cvt_modes_for_range() argument
3542 struct drm_device *dev = connector->dev; in drm_cvt_modes_for_range()
3554 !valid_inferred_mode(connector, newmode)) { in drm_cvt_modes_for_range()
3559 drm_mode_probed_add(connector, newmode); in drm_cvt_modes_for_range()
3576 closure->modes += drm_dmt_modes_for_range(closure->connector, in do_inferred_modes()
3586 closure->modes += drm_gtf_modes_for_range(closure->connector, in do_inferred_modes()
3594 closure->modes += drm_cvt_modes_for_range(closure->connector, in do_inferred_modes()
3604 static int add_inferred_modes(struct drm_connector *connector, in add_inferred_modes() argument
3608 .connector = connector, in add_inferred_modes()
3619 drm_est3_modes(struct drm_connector *connector, const struct detailed_timing *timing) in drm_est3_modes() argument
3631 mode = drm_mode_find_dmt(connector->dev, in drm_est3_modes()
3637 drm_mode_probed_add(connector, mode); in drm_est3_modes()
3655 closure->modes += drm_est3_modes(closure->connector, timing); in do_established_modes()
3663 static int add_established_modes(struct drm_connector *connector, in add_established_modes() argument
3666 struct drm_device *dev = connector->dev; in add_established_modes()
3673 .connector = connector, in add_established_modes()
3683 drm_mode_probed_add(connector, newmode); in add_established_modes()
3701 struct drm_connector *connector = closure->connector; in do_standard_modes() local
3711 newmode = drm_mode_std(connector, closure->drm_edid, std); in do_standard_modes()
3713 drm_mode_probed_add(connector, newmode); in do_standard_modes()
3724 static int add_standard_modes(struct drm_connector *connector, in add_standard_modes() argument
3729 .connector = connector, in add_standard_modes()
3736 newmode = drm_mode_std(connector, drm_edid, in add_standard_modes()
3739 drm_mode_probed_add(connector, newmode); in add_standard_modes()
3753 static int drm_cvt_modes(struct drm_connector *connector, in drm_cvt_modes() argument
3758 struct drm_device *dev = connector->dev; in drm_cvt_modes()
3795 drm_mode_probed_add(connector, newmode); in drm_cvt_modes()
3813 closure->modes += drm_cvt_modes(closure->connector, timing); in do_cvt_mode()
3817 add_cvt_modes(struct drm_connector *connector, const struct drm_edid *drm_edid) in add_cvt_modes() argument
3820 .connector = connector, in add_cvt_modes()
3843 newmode = drm_mode_detailed(closure->connector->dev, in do_detailed_mode()
3859 drm_mode_probed_add(closure->connector, newmode); in do_detailed_mode()
3870 static int add_detailed_modes(struct drm_connector *connector, in add_detailed_modes() argument
3874 .connector = connector, in add_detailed_modes()
4227 static int add_alternate_cea_modes(struct drm_connector *connector, in add_alternate_cea_modes() argument
4230 struct drm_device *dev = connector->dev; in add_alternate_cea_modes()
4243 list_for_each_entry(mode, &connector->probed_modes, head) { in add_alternate_cea_modes()
4292 drm_mode_probed_add(connector, mode); in add_alternate_cea_modes()
4309 drm_display_mode_from_vic_index(struct drm_connector *connector, in drm_display_mode_from_vic_index() argument
4313 struct drm_device *dev = connector->dev; in drm_display_mode_from_vic_index()
4342 static int do_y420vdb_modes(struct drm_connector *connector, in do_y420vdb_modes() argument
4346 struct drm_device *dev = connector->dev; in do_y420vdb_modes()
4347 struct drm_display_info *info = &connector->display_info; in do_y420vdb_modes()
4361 drm_mode_probed_add(connector, newmode); in do_y420vdb_modes()
4378 drm_add_cmdb_modes(struct drm_connector *connector, u8 svd) in drm_add_cmdb_modes() argument
4381 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi; in drm_add_cmdb_modes()
4418 do_cea_modes(struct drm_connector *connector, const u8 *db, u8 len) in do_cea_modes() argument
4421 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi; in do_cea_modes()
4426 mode = drm_display_mode_from_vic_index(connector, db, len, i); in do_cea_modes()
4438 drm_add_cmdb_modes(connector, db[i]); in do_cea_modes()
4440 drm_mode_probed_add(connector, mode); in do_cea_modes()
4478 static int add_hdmi_mandatory_stereo_modes(struct drm_connector *connector) in add_hdmi_mandatory_stereo_modes() argument
4480 struct drm_device *dev = connector->dev; in add_hdmi_mandatory_stereo_modes()
4487 list_for_each_entry(mode, &connector->probed_modes, head) { in add_hdmi_mandatory_stereo_modes()
4507 list_splice_tail(&stereo_modes, &connector->probed_modes); in add_hdmi_mandatory_stereo_modes()
4512 static int add_hdmi_mode(struct drm_connector *connector, u8 vic) in add_hdmi_mode() argument
4514 struct drm_device *dev = connector->dev; in add_hdmi_mode()
4526 drm_mode_probed_add(connector, newmode); in add_hdmi_mode()
4531 static int add_3d_struct_modes(struct drm_connector *connector, u16 structure, in add_3d_struct_modes() argument
4538 newmode = drm_display_mode_from_vic_index(connector, video_db, in add_3d_struct_modes()
4543 drm_mode_probed_add(connector, newmode); in add_3d_struct_modes()
4548 newmode = drm_display_mode_from_vic_index(connector, video_db, in add_3d_struct_modes()
4553 drm_mode_probed_add(connector, newmode); in add_3d_struct_modes()
4558 newmode = drm_display_mode_from_vic_index(connector, video_db, in add_3d_struct_modes()
4563 drm_mode_probed_add(connector, newmode); in add_3d_struct_modes()
4581 do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len, in do_hdmi_vsdb_modes() argument
4584 struct drm_display_info *info = &connector->display_info; in do_hdmi_vsdb_modes()
4613 modes += add_hdmi_mandatory_stereo_modes(connector); in do_hdmi_vsdb_modes()
4627 modes += add_hdmi_mode(connector, vic); in do_hdmi_vsdb_modes()
4656 modes += add_3d_struct_modes(connector, in do_hdmi_vsdb_modes()
4695 newmode = drm_display_mode_from_vic_index(connector, in do_hdmi_vsdb_modes()
4702 drm_mode_probed_add(connector, newmode); in do_hdmi_vsdb_modes()
5043 static void drm_parse_y420cmdb_bitmap(struct drm_connector *connector, in drm_parse_y420cmdb_bitmap() argument
5046 struct drm_display_info *info = &connector->display_info; in drm_parse_y420cmdb_bitmap()
5083 static int add_cea_modes(struct drm_connector *connector, in add_cea_modes() argument
5098 modes += do_cea_modes(connector, video, video_len); in add_cea_modes()
5107 modes += do_y420vdb_modes(connector, vdb420, in add_cea_modes()
5117 modes += do_hdmi_vsdb_modes(connector, hdmi, hdmi_len, in add_cea_modes()
5168 static void drm_calculate_luminance_range(struct drm_connector *connector) in drm_calculate_luminance_range() argument
5170 struct hdr_static_metadata *hdr_metadata = &connector->hdr_sink_metadata.hdmi_type1; in drm_calculate_luminance_range()
5172 &connector->display_info.luminance_range; in drm_calculate_luminance_range()
5229 drm_parse_hdr_metadata_block(struct drm_connector *connector, const u8 *db) in drm_parse_hdr_metadata_block() argument
5235 connector->hdr_sink_metadata.hdmi_type1.eotf = in drm_parse_hdr_metadata_block()
5237 connector->hdr_sink_metadata.hdmi_type1.metadata_type = in drm_parse_hdr_metadata_block()
5241 connector->hdr_sink_metadata.hdmi_type1.max_cll = db[4]; in drm_parse_hdr_metadata_block()
5243 connector->hdr_sink_metadata.hdmi_type1.max_fall = db[5]; in drm_parse_hdr_metadata_block()
5245 connector->hdr_sink_metadata.hdmi_type1.min_cll = db[6]; in drm_parse_hdr_metadata_block()
5248 drm_calculate_luminance_range(connector); in drm_parse_hdr_metadata_block()
5253 drm_parse_hdmi_vsdb_audio(struct drm_connector *connector, const u8 *db) in drm_parse_hdmi_vsdb_audio() argument
5258 connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_SUPPORTS_AI; in drm_parse_hdmi_vsdb_audio()
5260 connector->latency_present[0] = db[8] >> 7; in drm_parse_hdmi_vsdb_audio()
5261 connector->latency_present[1] = (db[8] >> 6) & 1; in drm_parse_hdmi_vsdb_audio()
5264 connector->video_latency[0] = db[9]; in drm_parse_hdmi_vsdb_audio()
5266 connector->audio_latency[0] = db[10]; in drm_parse_hdmi_vsdb_audio()
5268 connector->video_latency[1] = db[11]; in drm_parse_hdmi_vsdb_audio()
5270 connector->audio_latency[1] = db[12]; in drm_parse_hdmi_vsdb_audio()
5275 connector->latency_present[0], in drm_parse_hdmi_vsdb_audio()
5276 connector->latency_present[1], in drm_parse_hdmi_vsdb_audio()
5277 connector->video_latency[0], in drm_parse_hdmi_vsdb_audio()
5278 connector->video_latency[1], in drm_parse_hdmi_vsdb_audio()
5279 connector->audio_latency[0], in drm_parse_hdmi_vsdb_audio()
5280 connector->audio_latency[1]); in drm_parse_hdmi_vsdb_audio()
5342 static void clear_eld(struct drm_connector *connector) in clear_eld() argument
5344 memset(connector->eld, 0, sizeof(connector->eld)); in clear_eld()
5346 connector->latency_present[0] = false; in clear_eld()
5347 connector->latency_present[1] = false; in clear_eld()
5348 connector->video_latency[0] = 0; in clear_eld()
5349 connector->audio_latency[0] = 0; in clear_eld()
5350 connector->video_latency[1] = 0; in clear_eld()
5351 connector->audio_latency[1] = 0; in clear_eld()
5362 static void drm_edid_to_eld(struct drm_connector *connector, in drm_edid_to_eld() argument
5365 const struct drm_display_info *info = &connector->display_info; in drm_edid_to_eld()
5368 uint8_t *eld = connector->eld; in drm_edid_to_eld()
5372 clear_eld(connector); in drm_edid_to_eld()
5413 drm_parse_hdmi_vsdb_audio(connector, (const u8 *)db); in drm_edid_to_eld()
5423 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort || in drm_edid_to_eld()
5424 connector->connector_type == DRM_MODE_CONNECTOR_eDP) in drm_edid_to_eld()
5544 int drm_av_sync_delay(struct drm_connector *connector, in drm_av_sync_delay() argument
5550 if (!connector->latency_present[0]) in drm_av_sync_delay()
5552 if (!connector->latency_present[1]) in drm_av_sync_delay()
5555 a = connector->audio_latency[i]; in drm_av_sync_delay()
5556 v = connector->video_latency[i]; in drm_av_sync_delay()
5700 static void drm_parse_vcdb(struct drm_connector *connector, const u8 *db) in drm_parse_vcdb() argument
5702 struct drm_display_info *info = &connector->display_info; in drm_parse_vcdb()
5745 static void drm_parse_ycbcr420_deep_color_info(struct drm_connector *connector, in drm_parse_ycbcr420_deep_color_info() argument
5749 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi; in drm_parse_ycbcr420_deep_color_info()
5756 static void drm_parse_hdmi_forum_scds(struct drm_connector *connector, in drm_parse_hdmi_forum_scds() argument
5759 struct drm_display_info *display = &connector->display_info; in drm_parse_hdmi_forum_scds()
5867 drm_parse_ycbcr420_deep_color_info(connector, hf_scds); in drm_parse_hdmi_forum_scds()
5870 static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector, in drm_parse_hdmi_deep_color_info() argument
5873 struct drm_display_info *info = &connector->display_info; in drm_parse_hdmi_deep_color_info()
5886 connector->name); in drm_parse_hdmi_deep_color_info()
5893 connector->name); in drm_parse_hdmi_deep_color_info()
5900 connector->name); in drm_parse_hdmi_deep_color_info()
5905 connector->name); in drm_parse_hdmi_deep_color_info()
5910 connector->name, dc_bpc); in drm_parse_hdmi_deep_color_info()
5917 connector->name); in drm_parse_hdmi_deep_color_info()
5926 connector->name); in drm_parse_hdmi_deep_color_info()
5931 drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db) in drm_parse_hdmi_vsdb_video() argument
5933 struct drm_display_info *info = &connector->display_info; in drm_parse_hdmi_vsdb_video()
5948 drm_parse_hdmi_deep_color_info(connector, db); in drm_parse_hdmi_vsdb_video()
5955 static void drm_parse_microsoft_vsdb(struct drm_connector *connector, in drm_parse_microsoft_vsdb() argument
5958 struct drm_display_info *info = &connector->display_info; in drm_parse_microsoft_vsdb()
5966 drm_dbg_kms(connector->dev, "HMD or specialized display VSDB version %u: 0x%02x\n", in drm_parse_microsoft_vsdb()
5970 static void drm_parse_cea_ext(struct drm_connector *connector, in drm_parse_cea_ext() argument
5973 struct drm_display_info *info = &connector->display_info; in drm_parse_cea_ext()
6006 drm_parse_hdmi_vsdb_video(connector, data); in drm_parse_cea_ext()
6009 drm_parse_hdmi_forum_scds(connector, data); in drm_parse_cea_ext()
6011 drm_parse_microsoft_vsdb(connector, data); in drm_parse_cea_ext()
6013 drm_parse_y420cmdb_bitmap(connector, data); in drm_parse_cea_ext()
6015 drm_parse_vcdb(connector, data); in drm_parse_cea_ext()
6017 drm_parse_hdr_metadata_block(connector, data); in drm_parse_cea_ext()
6026 struct drm_display_info *info = &closure->connector->display_info; in get_monitor_range()
6055 static void drm_get_monitor_range(struct drm_connector *connector, in drm_get_monitor_range() argument
6058 const struct drm_display_info *info = &connector->display_info; in drm_get_monitor_range()
6060 .connector = connector, in drm_get_monitor_range()
6074 static void drm_parse_vesa_mso_data(struct drm_connector *connector, in drm_parse_vesa_mso_data() argument
6079 struct drm_display_info *info = &connector->display_info; in drm_parse_vesa_mso_data()
6082 drm_dbg_kms(connector->dev, "Unexpected vendor block size %u\n", in drm_parse_vesa_mso_data()
6091 drm_dbg_kms(connector->dev, "Unexpected VESA vendor block size\n"); in drm_parse_vesa_mso_data()
6097 drm_dbg_kms(connector->dev, "Reserved MSO mode value\n"); in drm_parse_vesa_mso_data()
6117 drm_dbg_kms(connector->dev, "Reserved MSO pixel overlap value %u\n", in drm_parse_vesa_mso_data()
6122 drm_dbg_kms(connector->dev, "MSO stream count %u, pixel overlap %u\n", in drm_parse_vesa_mso_data()
6126 static void drm_update_mso(struct drm_connector *connector, in drm_update_mso() argument
6135 drm_parse_vesa_mso_data(connector, block); in drm_update_mso()
6143 static void drm_reset_display_info(struct drm_connector *connector) in drm_reset_display_info() argument
6145 struct drm_display_info *info = &connector->display_info; in drm_reset_display_info()
6171 static u32 update_display_info(struct drm_connector *connector, in update_display_info() argument
6174 struct drm_display_info *info = &connector->display_info; in update_display_info()
6179 drm_reset_display_info(connector); in update_display_info()
6184 drm_get_monitor_range(connector, drm_edid); in update_display_info()
6193 drm_parse_cea_ext(connector, drm_edid); in update_display_info()
6206 connector->name, info->bpc); in update_display_info()
6239 connector->name, info->bpc); in update_display_info()
6246 drm_update_mso(connector, drm_edid); in update_display_info()
6250 drm_dbg_kms(connector->dev, "Non-desktop display%s\n", in update_display_info()
6305 static int add_displayid_detailed_1_modes(struct drm_connector *connector, in add_displayid_detailed_1_modes() argument
6322 newmode = drm_mode_displayid_detailed(connector->dev, timings, type_7); in add_displayid_detailed_1_modes()
6326 drm_mode_probed_add(connector, newmode); in add_displayid_detailed_1_modes()
6332 static int add_displayid_detailed_modes(struct drm_connector *connector, in add_displayid_detailed_modes() argument
6343 num_modes += add_displayid_detailed_1_modes(connector, block); in add_displayid_detailed_modes()
6350 static int _drm_edid_connector_update(struct drm_connector *connector, in _drm_edid_connector_update() argument
6357 drm_reset_display_info(connector); in _drm_edid_connector_update()
6358 clear_eld(connector); in _drm_edid_connector_update()
6367 quirks = update_display_info(connector, drm_edid); in _drm_edid_connector_update()
6370 drm_edid_to_eld(connector, drm_edid); in _drm_edid_connector_update()
6386 num_modes += add_detailed_modes(connector, drm_edid, quirks); in _drm_edid_connector_update()
6387 num_modes += add_cvt_modes(connector, drm_edid); in _drm_edid_connector_update()
6388 num_modes += add_standard_modes(connector, drm_edid); in _drm_edid_connector_update()
6389 num_modes += add_established_modes(connector, drm_edid); in _drm_edid_connector_update()
6390 num_modes += add_cea_modes(connector, drm_edid); in _drm_edid_connector_update()
6391 num_modes += add_alternate_cea_modes(connector, drm_edid); in _drm_edid_connector_update()
6392 num_modes += add_displayid_detailed_modes(connector, drm_edid); in _drm_edid_connector_update()
6394 num_modes += add_inferred_modes(connector, drm_edid); in _drm_edid_connector_update()
6397 edid_fixup_preferred(connector, quirks); in _drm_edid_connector_update()
6400 connector->display_info.bpc = 6; in _drm_edid_connector_update()
6403 connector->display_info.bpc = 8; in _drm_edid_connector_update()
6406 connector->display_info.bpc = 10; in _drm_edid_connector_update()
6409 connector->display_info.bpc = 12; in _drm_edid_connector_update()
6414 static void _drm_update_tile_info(struct drm_connector *connector,
6417 static int _drm_edid_connector_property_update(struct drm_connector *connector, in _drm_edid_connector_property_update() argument
6420 struct drm_device *dev = connector->dev; in _drm_edid_connector_property_update()
6423 if (connector->edid_blob_ptr) { in _drm_edid_connector_property_update()
6424 const struct edid *old_edid = connector->edid_blob_ptr->data; in _drm_edid_connector_property_update()
6428 connector->epoch_counter++; in _drm_edid_connector_property_update()
6430 connector->base.id, connector->name, in _drm_edid_connector_property_update()
6431 connector->epoch_counter); in _drm_edid_connector_property_update()
6437 &connector->edid_blob_ptr, in _drm_edid_connector_property_update()
6440 &connector->base, in _drm_edid_connector_property_update()
6444 connector->base.id, connector->name, ret); in _drm_edid_connector_property_update()
6448 ret = drm_object_property_set_value(&connector->base, in _drm_edid_connector_property_update()
6450 connector->display_info.non_desktop); in _drm_edid_connector_property_update()
6453 connector->base.id, connector->name, ret); in _drm_edid_connector_property_update()
6457 ret = drm_connector_set_tile_property(connector); in _drm_edid_connector_property_update()
6460 connector->base.id, connector->name, ret); in _drm_edid_connector_property_update()
6480 int drm_edid_connector_update(struct drm_connector *connector, in drm_edid_connector_update() argument
6502 count = _drm_edid_connector_update(connector, drm_edid); in drm_edid_connector_update()
6504 _drm_update_tile_info(connector, drm_edid); in drm_edid_connector_update()
6507 _drm_edid_connector_property_update(connector, drm_edid); in drm_edid_connector_update()
6513 static int _drm_connector_update_edid_property(struct drm_connector *connector, in _drm_connector_update_edid_property() argument
6517 if (connector->override_edid) in _drm_connector_update_edid_property()
6529 update_display_info(connector, drm_edid); in _drm_connector_update_edid_property()
6531 drm_reset_display_info(connector); in _drm_connector_update_edid_property()
6533 _drm_update_tile_info(connector, drm_edid); in _drm_connector_update_edid_property()
6535 return _drm_edid_connector_property_update(connector, drm_edid); in _drm_connector_update_edid_property()
6554 int drm_connector_update_edid_property(struct drm_connector *connector, in drm_connector_update_edid_property() argument
6559 return _drm_connector_update_edid_property(connector, in drm_connector_update_edid_property()
6577 int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) in drm_add_edid_modes() argument
6582 drm_warn(connector->dev, "%s: EDID invalid.\n", in drm_add_edid_modes()
6583 connector->name); in drm_add_edid_modes()
6587 return _drm_edid_connector_update(connector, in drm_add_edid_modes()
6603 int drm_add_modes_noedid(struct drm_connector *connector, in drm_add_modes_noedid() argument
6608 struct drm_device *dev = connector->dev; in drm_add_modes_noedid()
6633 drm_mode_probed_add(connector, mode); in drm_add_modes_noedid()
6650 void drm_set_preferred_mode(struct drm_connector *connector, in drm_set_preferred_mode() argument
6655 list_for_each_entry(mode, &connector->probed_modes, head) { in drm_set_preferred_mode()
6663 static bool is_hdmi2_sink(const struct drm_connector *connector) in is_hdmi2_sink() argument
6669 if (!connector) in is_hdmi2_sink()
6672 return connector->display_info.hdmi.scdc.supported || in is_hdmi2_sink()
6673 connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR420; in is_hdmi2_sink()
6676 static u8 drm_mode_hdmi_vic(const struct drm_connector *connector, in drm_mode_hdmi_vic() argument
6679 bool has_hdmi_infoframe = connector ? in drm_mode_hdmi_vic()
6680 connector->display_info.has_hdmi_infoframe : false; in drm_mode_hdmi_vic()
6692 static u8 drm_mode_cea_vic(const struct drm_connector *connector, in drm_mode_cea_vic() argument
6703 if (drm_mode_hdmi_vic(connector, mode)) in drm_mode_cea_vic()
6713 if (!is_hdmi2_sink(connector) && vic > 64) in drm_mode_cea_vic()
6730 const struct drm_connector *connector, in drm_hdmi_avi_infoframe_from_display_mode() argument
6744 vic = drm_mode_cea_vic(connector, mode); in drm_hdmi_avi_infoframe_from_display_mode()
6745 hdmi_vic = drm_mode_hdmi_vic(connector, mode); in drm_hdmi_avi_infoframe_from_display_mode()
6807 const struct drm_connector *connector, in drm_hdmi_avi_infoframe_quant_range() argument
6811 const struct drm_display_info *info = &connector->display_info; in drm_hdmi_avi_infoframe_quant_range()
6842 if (!is_hdmi2_sink(connector) || in drm_hdmi_avi_infoframe_quant_range()
6894 const struct drm_connector *connector, in drm_hdmi_vendor_infoframe_from_display_mode() argument
6901 bool has_hdmi_infoframe = connector ? in drm_hdmi_vendor_infoframe_from_display_mode()
6902 connector->display_info.has_hdmi_infoframe : false; in drm_hdmi_vendor_infoframe_from_display_mode()
6924 frame->vic = drm_mode_hdmi_vic(connector, mode); in drm_hdmi_vendor_infoframe_from_display_mode()
6931 static void drm_parse_tiled_block(struct drm_connector *connector, in drm_parse_tiled_block() argument
6948 connector->has_tile = true; in drm_parse_tiled_block()
6950 connector->tile_is_single_monitor = true; in drm_parse_tiled_block()
6952 connector->num_h_tile = num_h_tile + 1; in drm_parse_tiled_block()
6953 connector->num_v_tile = num_v_tile + 1; in drm_parse_tiled_block()
6954 connector->tile_h_loc = tile_h_loc; in drm_parse_tiled_block()
6955 connector->tile_v_loc = tile_v_loc; in drm_parse_tiled_block()
6956 connector->tile_h_size = w + 1; in drm_parse_tiled_block()
6957 connector->tile_v_size = h + 1; in drm_parse_tiled_block()
6965 tg = drm_mode_get_tile_group(connector->dev, tile->topology_id); in drm_parse_tiled_block()
6967 tg = drm_mode_create_tile_group(connector->dev, tile->topology_id); in drm_parse_tiled_block()
6971 if (connector->tile_group != tg) { in drm_parse_tiled_block()
6974 if (connector->tile_group) in drm_parse_tiled_block()
6975 drm_mode_put_tile_group(connector->dev, connector->tile_group); in drm_parse_tiled_block()
6976 connector->tile_group = tg; in drm_parse_tiled_block()
6979 drm_mode_put_tile_group(connector->dev, tg); in drm_parse_tiled_block()
6983 static void _drm_update_tile_info(struct drm_connector *connector, in _drm_update_tile_info() argument
6989 connector->has_tile = false; in _drm_update_tile_info()
6994 drm_parse_tiled_block(connector, block); in _drm_update_tile_info()
6998 if (!connector->has_tile && connector->tile_group) { in _drm_update_tile_info()
6999 drm_mode_put_tile_group(connector->dev, connector->tile_group); in _drm_update_tile_info()
7000 connector->tile_group = NULL; in _drm_update_tile_info()