Lines Matching defs:connector
90 struct drm_connector *connector;
1834 static void connector_bad_edid(struct drm_connector *connector,
1850 connector->real_edid_checksum =
1853 if (connector->bad_edid_counter++ && !drm_debug_enabled(DRM_UT_KMS))
1856 drm_warn(connector->dev, "%s: EDID is invalid:\n", connector->name);
1875 static struct edid *drm_get_override_edid(struct drm_connector *connector)
1879 if (connector->override_edid)
1880 override = drm_edid_duplicate(connector->edid_blob_ptr->data);
1883 override = drm_load_edid_firmware(connector);
1890 * @connector: connector we're probing
1899 int drm_add_override_edid_modes(struct drm_connector *connector)
1904 override = drm_get_override_edid(connector);
1906 drm_connector_update_edid_property(connector, override);
1907 num_modes = drm_add_edid_modes(connector, override);
1911 connector->base.id, connector->name, num_modes);
1920 * @connector: connector we're probing
1938 struct edid *drm_do_get_edid(struct drm_connector *connector,
1947 override = drm_get_override_edid(connector);
1959 &connector->edid_corrupt))
1962 connector->null_edid_counter++;
1996 connector_bad_edid(connector, edid, edid[0x7e] + 1);
2024 connector_bad_edid(connector, edid, 1);
2048 * @connector: connector we're probing
2052 * attach it to the connector.
2056 struct edid *drm_get_edid(struct drm_connector *connector,
2061 if (connector->force == DRM_FORCE_OFF)
2064 if (connector->force == DRM_FORCE_UNSPECIFIED && !drm_probe_ddc(adapter))
2067 edid = drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter);
2068 drm_connector_update_edid_property(connector, edid);
2075 * @connector: connector we're probing
2084 struct edid *drm_get_edid_switcheroo(struct drm_connector *connector,
2087 struct pci_dev *pdev = connector->dev->pdev;
2091 edid = drm_get_edid(connector, adapter);
2158 * @connector: has mode list to fix up
2161 * Walk the mode list for @connector, clearing the preferred status
2164 static void edid_fixup_preferred(struct drm_connector *connector,
2171 if (list_empty(&connector->probed_modes))
2179 preferred_mode = list_first_entry(&connector->probed_modes,
2182 list_for_each_entry_safe(cur_mode, t, &connector->probed_modes, head) {
2443 * @connector: connector of for the EDID block
2451 drm_mode_std(struct drm_connector *connector, struct edid *edid,
2454 struct drm_device *dev = connector->dev;
2493 * If this connector already has a mode for this size and refresh
2498 list_for_each_entry(m, &connector->probed_modes, head)
2788 static bool valid_inferred_mode(const struct drm_connector *connector,
2794 list_for_each_entry(m, &connector->probed_modes, head) {
2807 drm_dmt_modes_for_range(struct drm_connector *connector, struct edid *edid,
2812 struct drm_device *dev = connector->dev;
2816 valid_inferred_mode(connector, drm_dmt_modes + i)) {
2819 drm_mode_probed_add(connector, newmode);
2842 drm_gtf_modes_for_range(struct drm_connector *connector, struct edid *edid,
2847 struct drm_device *dev = connector->dev;
2858 !valid_inferred_mode(connector, newmode)) {
2863 drm_mode_probed_add(connector, newmode);
2871 drm_cvt_modes_for_range(struct drm_connector *connector, struct edid *edid,
2876 struct drm_device *dev = connector->dev;
2888 !valid_inferred_mode(connector, newmode)) {
2893 drm_mode_probed_add(connector, newmode);
2910 closure->modes += drm_dmt_modes_for_range(closure->connector,
2920 closure->modes += drm_gtf_modes_for_range(closure->connector,
2928 closure->modes += drm_cvt_modes_for_range(closure->connector,
2939 add_inferred_modes(struct drm_connector *connector, struct edid *edid)
2942 .connector = connector,
2954 drm_est3_modes(struct drm_connector *connector, struct detailed_timing *timing)
2966 mode = drm_mode_find_dmt(connector->dev,
2972 drm_mode_probed_add(connector, mode);
2990 closure->modes += drm_est3_modes(closure->connector, timing);
2995 * @connector: connector to add mode(s) to
3002 add_established_modes(struct drm_connector *connector, struct edid *edid)
3004 struct drm_device *dev = connector->dev;
3010 .connector = connector,
3020 drm_mode_probed_add(connector, newmode);
3038 struct drm_connector *connector = closure->connector;
3049 newmode = drm_mode_std(connector, edid, std);
3051 drm_mode_probed_add(connector, newmode);
3059 * @connector: connector to add mode(s) to
3066 add_standard_modes(struct drm_connector *connector, struct edid *edid)
3070 .connector = connector,
3077 newmode = drm_mode_std(connector, edid,
3080 drm_mode_probed_add(connector, newmode);
3094 static int drm_cvt_modes(struct drm_connector *connector,
3099 struct drm_device *dev = connector->dev;
3136 drm_mode_probed_add(connector, newmode);
3154 closure->modes += drm_cvt_modes(closure->connector, timing);
3158 add_cvt_modes(struct drm_connector *connector, struct edid *edid)
3161 .connector = connector,
3184 newmode = drm_mode_detailed(closure->connector->dev,
3200 drm_mode_probed_add(closure->connector, newmode);
3207 * @connector: attached connector
3212 add_detailed_modes(struct drm_connector *connector, struct edid *edid,
3216 .connector = connector,
3591 add_alternate_cea_modes(struct drm_connector *connector, struct edid *edid)
3593 struct drm_device *dev = connector->dev;
3606 list_for_each_entry(mode, &connector->probed_modes, head) {
3655 drm_mode_probed_add(connector, mode);
3672 drm_display_mode_from_vic_index(struct drm_connector *connector,
3676 struct drm_device *dev = connector->dev;
3697 * @connector: connector corresponding to the HDMI sink
3705 static int do_y420vdb_modes(struct drm_connector *connector,
3709 struct drm_device *dev = connector->dev;
3710 struct drm_display_info *info = &connector->display_info;
3724 drm_mode_probed_add(connector, newmode);
3735 * @connector: connector corresponding to the HDMI sink
3741 drm_add_cmdb_modes(struct drm_connector *connector, u8 svd)
3744 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;
3781 do_cea_modes(struct drm_connector *connector, const u8 *db, u8 len)
3784 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;
3789 mode = drm_display_mode_from_vic_index(connector, db, len, i);
3801 drm_add_cmdb_modes(connector, db[i]);
3803 drm_mode_probed_add(connector, mode);
3841 static int add_hdmi_mandatory_stereo_modes(struct drm_connector *connector)
3843 struct drm_device *dev = connector->dev;
3850 list_for_each_entry(mode, &connector->probed_modes, head) {
3870 list_splice_tail(&stereo_modes, &connector->probed_modes);
3875 static int add_hdmi_mode(struct drm_connector *connector, u8 vic)
3877 struct drm_device *dev = connector->dev;
3889 drm_mode_probed_add(connector, newmode);
3894 static int add_3d_struct_modes(struct drm_connector *connector, u16 structure,
3901 newmode = drm_display_mode_from_vic_index(connector, video_db,
3906 drm_mode_probed_add(connector, newmode);
3911 newmode = drm_display_mode_from_vic_index(connector, video_db,
3916 drm_mode_probed_add(connector, newmode);
3921 newmode = drm_display_mode_from_vic_index(connector, video_db,
3926 drm_mode_probed_add(connector, newmode);
3936 * @connector: connector corresponding to the HDMI sink
3940 * Parses the HDMI VSDB looking for modes to add to @connector. This function
3944 do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len,
3947 struct drm_display_info *info = &connector->display_info;
3976 modes += add_hdmi_mandatory_stereo_modes(connector);
3990 modes += add_hdmi_mode(connector, vic);
4019 modes += add_3d_struct_modes(connector,
4058 newmode = drm_display_mode_from_vic_index(connector,
4065 drm_mode_probed_add(connector, newmode);
4228 static void drm_parse_y420cmdb_bitmap(struct drm_connector *connector,
4231 struct drm_display_info *info = &connector->display_info;
4269 add_cea_modes(struct drm_connector *connector, struct edid *edid)
4289 modes += do_cea_modes(connector, video, dbl);
4297 modes += do_y420vdb_modes(connector,
4309 modes += do_hdmi_vsdb_modes(connector, hdmi, hdmi_len, video,
4388 drm_parse_hdr_metadata_block(struct drm_connector *connector, const u8 *db)
4394 connector->hdr_sink_metadata.hdmi_type1.eotf =
4396 connector->hdr_sink_metadata.hdmi_type1.metadata_type =
4400 connector->hdr_sink_metadata.hdmi_type1.max_cll = db[4];
4402 connector->hdr_sink_metadata.hdmi_type1.max_fall = db[5];
4404 connector->hdr_sink_metadata.hdmi_type1.min_cll = db[6];
4408 drm_parse_hdmi_vsdb_audio(struct drm_connector *connector, const u8 *db)
4413 connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_SUPPORTS_AI;
4415 connector->latency_present[0] = db[8] >> 7;
4416 connector->latency_present[1] = (db[8] >> 6) & 1;
4419 connector->video_latency[0] = db[9];
4421 connector->audio_latency[0] = db[10];
4423 connector->video_latency[1] = db[11];
4425 connector->audio_latency[1] = db[12];
4430 connector->latency_present[0],
4431 connector->latency_present[1],
4432 connector->video_latency[0],
4433 connector->video_latency[1],
4434 connector->audio_latency[0],
4435 connector->audio_latency[1]);
4487 static void clear_eld(struct drm_connector *connector)
4489 memset(connector->eld, 0, sizeof(connector->eld));
4491 connector->latency_present[0] = false;
4492 connector->latency_present[1] = false;
4493 connector->video_latency[0] = 0;
4494 connector->audio_latency[0] = 0;
4495 connector->video_latency[1] = 0;
4496 connector->audio_latency[1] = 0;
4501 * @connector: connector corresponding to the HDMI/DP sink
4507 static void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
4509 uint8_t *eld = connector->eld;
4516 clear_eld(connector);
4570 drm_parse_hdmi_vsdb_audio(connector, db);
4579 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4580 connector->connector_type == DRM_MODE_CONNECTOR_eDP)
4710 * @connector: connector associated with the HDMI/DP sink
4716 int drm_av_sync_delay(struct drm_connector *connector,
4722 if (!connector->latency_present[0])
4724 if (!connector->latency_present[1])
4727 a = connector->audio_latency[i];
4728 v = connector->video_latency[i];
4854 static void drm_parse_vcdb(struct drm_connector *connector, const u8 *db)
4856 struct drm_display_info *info = &connector->display_info;
4864 static void drm_parse_ycbcr420_deep_color_info(struct drm_connector *connector,
4868 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;
4874 static void drm_parse_hdmi_forum_vsdb(struct drm_connector *connector,
4877 struct drm_display_info *display = &connector->display_info;
4917 drm_parse_ycbcr420_deep_color_info(connector, hf_vsdb);
4920 static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector,
4923 struct drm_display_info *info = &connector->display_info;
4936 connector->name);
4943 connector->name);
4950 connector->name);
4955 connector->name);
4960 connector->name, dc_bpc);
4966 connector->name);
4975 connector->name);
4980 drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db)
4982 struct drm_display_info *info = &connector->display_info;
4997 drm_parse_hdmi_deep_color_info(connector, db);
5000 static void drm_parse_cea_ext(struct drm_connector *connector,
5003 struct drm_display_info *info = &connector->display_info;
5027 drm_parse_hdmi_vsdb_video(connector, db);
5029 drm_parse_hdmi_forum_vsdb(connector, db);
5031 drm_parse_y420cmdb_bitmap(connector, db);
5033 drm_parse_vcdb(connector, db);
5035 drm_parse_hdr_metadata_block(connector, db);
5064 void drm_get_monitor_range(struct drm_connector *connector,
5067 struct drm_display_info *info = &connector->display_info;
5080 /* A connector has no EDID information, so we've got no EDID to compute quirks from. Reset
5084 drm_reset_display_info(struct drm_connector *connector)
5086 struct drm_display_info *info = &connector->display_info;
5105 u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid)
5107 struct drm_display_info *info = &connector->display_info;
5111 drm_reset_display_info(connector);
5118 drm_get_monitor_range(connector, edid);
5129 drm_parse_cea_ext(connector, edid);
5142 connector->name, info->bpc);
5175 connector->name, info->bpc);
5255 static int add_displayid_detailed_1_modes(struct drm_connector *connector,
5271 newmode = drm_mode_displayid_detailed(connector->dev, timings);
5275 drm_mode_probed_add(connector, newmode);
5281 static int add_displayid_detailed_modes(struct drm_connector *connector,
5300 num_modes += add_displayid_detailed_1_modes(connector, block);
5311 * @connector: connector we're probing
5314 * Add the specified modes to the connector's mode list. Also fills out the
5315 * &drm_display_info structure and ELD in @connector with any information which
5320 int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
5326 clear_eld(connector);
5330 clear_eld(connector);
5331 drm_warn(connector->dev, "%s: EDID invalid.\n",
5332 connector->name);
5336 drm_edid_to_eld(connector, edid);
5343 quirks = drm_add_display_info(connector, edid);
5359 num_modes += add_detailed_modes(connector, edid, quirks);
5360 num_modes += add_cvt_modes(connector, edid);
5361 num_modes += add_standard_modes(connector, edid);
5362 num_modes += add_established_modes(connector, edid);
5363 num_modes += add_cea_modes(connector, edid);
5364 num_modes += add_alternate_cea_modes(connector, edid);
5365 num_modes += add_displayid_detailed_modes(connector, edid);
5367 num_modes += add_inferred_modes(connector, edid);
5370 edid_fixup_preferred(connector, quirks);
5373 connector->display_info.bpc = 6;
5376 connector->display_info.bpc = 8;
5379 connector->display_info.bpc = 10;
5382 connector->display_info.bpc = 12;
5390 * @connector: connector we're probing
5394 * Add the specified modes to the connector's mode list. Only when the
5399 int drm_add_modes_noedid(struct drm_connector *connector,
5404 struct drm_device *dev = connector->dev;
5419 * the connector.
5429 drm_mode_probed_add(connector, mode);
5438 * drm_set_preferred_mode - Sets the preferred mode of a connector
5439 * @connector: connector whose mode list should be processed
5446 void drm_set_preferred_mode(struct drm_connector *connector,
5451 list_for_each_entry(mode, &connector->probed_modes, head) {
5459 static bool is_hdmi2_sink(const struct drm_connector *connector)
5462 * FIXME: sil-sii8620 doesn't have a connector around when
5463 * we need one, so we have to be prepared for a NULL connector.
5465 if (!connector)
5468 return connector->display_info.hdmi.scdc.supported ||
5469 connector->display_info.color_formats & DRM_COLOR_FORMAT_YCRCB420;
5489 struct drm_connector *connector;
5496 connector = conn_state->connector;
5503 if (!hdr_metadata || !connector)
5508 connector->hdr_sink_metadata.hdmi_type1.eotf)) {
5544 static u8 drm_mode_hdmi_vic(const struct drm_connector *connector,
5547 bool has_hdmi_infoframe = connector ?
5548 connector->display_info.has_hdmi_infoframe : false;
5560 static u8 drm_mode_cea_vic(const struct drm_connector *connector,
5569 if (drm_mode_hdmi_vic(connector, mode))
5582 static u8 vic_for_avi_infoframe(const struct drm_connector *connector, u8 vic)
5584 if (!is_hdmi2_sink(connector) && vic > 64)
5594 * @connector: the connector
5601 const struct drm_connector *connector,
5615 vic = drm_mode_cea_vic(connector, mode);
5616 hdmi_vic = drm_mode_hdmi_vic(connector, mode);
5621 * As some drivers don't support atomic, we can't use connector state.
5659 frame->video_code = vic_for_avi_infoframe(connector, vic);
5714 * @conn_state: connector state
5742 * @connector: the connector
5748 const struct drm_connector *connector,
5752 const struct drm_display_info *info = &connector->display_info;
5783 if (!is_hdmi2_sink(connector) ||
5797 * @conn_state: connector state
5841 * @connector: the connector
5852 const struct drm_connector *connector,
5856 * FIXME: sil-sii8620 doesn't have a connector around when
5857 * we need one, so we have to be prepared for a NULL connector.
5859 bool has_hdmi_infoframe = connector ?
5860 connector->display_info.has_hdmi_infoframe : false;
5882 frame->vic = drm_mode_hdmi_vic(connector, mode);
5889 static void drm_parse_tiled_block(struct drm_connector *connector,
5906 connector->has_tile = true;
5908 connector->tile_is_single_monitor = true;
5910 connector->num_h_tile = num_h_tile + 1;
5911 connector->num_v_tile = num_v_tile + 1;
5912 connector->tile_h_loc = tile_h_loc;
5913 connector->tile_v_loc = tile_v_loc;
5914 connector->tile_h_size = w + 1;
5915 connector->tile_v_size = h + 1;
5923 tg = drm_mode_get_tile_group(connector->dev, tile->topology_id);
5925 tg = drm_mode_create_tile_group(connector->dev, tile->topology_id);
5929 if (connector->tile_group != tg) {
5932 if (connector->tile_group)
5933 drm_mode_put_tile_group(connector->dev, connector->tile_group);
5934 connector->tile_group = tg;
5937 drm_mode_put_tile_group(connector->dev, tg);
5941 static void drm_displayid_parse_tiled(struct drm_connector *connector,
5953 drm_parse_tiled_block(connector, block);
5962 void drm_update_tile_info(struct drm_connector *connector,
5969 connector->has_tile = false;
5976 drm_displayid_parse_tiled(connector, displayid, length, idx);
5979 if (!connector->has_tile && connector->tile_group) {
5980 drm_mode_put_tile_group(connector->dev, connector->tile_group);
5981 connector->tile_group = NULL;