Lines Matching refs:db

4796 static bool hdmi_vsdb_latency_present(const u8 *db)  in hdmi_vsdb_latency_present()  argument
4798 return db[8] & BIT(7); in hdmi_vsdb_latency_present()
4801 static bool hdmi_vsdb_i_latency_present(const u8 *db) in hdmi_vsdb_i_latency_present() argument
4803 return hdmi_vsdb_latency_present(db) && db[8] & BIT(6); in hdmi_vsdb_i_latency_present()
4806 static int hdmi_vsdb_latency_length(const u8 *db) in hdmi_vsdb_latency_length() argument
4808 if (hdmi_vsdb_i_latency_present(db)) in hdmi_vsdb_latency_length()
4810 else if (hdmi_vsdb_latency_present(db)) in hdmi_vsdb_latency_length()
4826 do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len) in do_hdmi_vsdb_modes() argument
4837 if (!(db[8] & (1 << 5))) in do_hdmi_vsdb_modes()
4840 offset += hdmi_vsdb_latency_length(db); in do_hdmi_vsdb_modes()
4849 if (db[8 + offset] & (1 << 7)) { in do_hdmi_vsdb_modes()
4853 multi_present = (db[8 + offset] & 0x60) >> 5; in do_hdmi_vsdb_modes()
4857 vic_len = db[8 + offset] >> 5; in do_hdmi_vsdb_modes()
4858 hdmi_3d_len = db[8 + offset] & 0x1f; in do_hdmi_vsdb_modes()
4863 vic = db[9 + offset + i]; in do_hdmi_vsdb_modes()
4883 structure_all = (db[8 + offset] << 8) | db[9 + offset]; in do_hdmi_vsdb_modes()
4887 mask = (db[10 + offset] << 8) | db[11 + offset]; in do_hdmi_vsdb_modes()
4906 detail_present = ((db[8 + offset + i] & 0x0f) > 7); in do_hdmi_vsdb_modes()
4912 vic_index = db[8 + offset + i] >> 4; in do_hdmi_vsdb_modes()
4915 switch (db[8 + offset + i] & 0x0f) { in do_hdmi_vsdb_modes()
4924 if ((db[9 + offset + i] >> 4) == 1) in do_hdmi_vsdb_modes()
4996 static int cea_db_tag(const struct cea_db *db) in cea_db_tag() argument
4998 return db->tag_length >> 5; in cea_db_tag()
5004 const struct cea_db *db = _db; in cea_db_payload_len() local
5006 return db->tag_length & 0x1f; in cea_db_payload_len()
5009 static const void *cea_db_data(const struct cea_db *db) in cea_db_data() argument
5011 return db->data; in cea_db_data()
5014 static bool cea_db_is_extended_tag(const struct cea_db *db, int tag) in cea_db_is_extended_tag() argument
5016 return cea_db_tag(db) == CTA_DB_EXTENDED_TAG && in cea_db_is_extended_tag()
5017 cea_db_payload_len(db) >= 1 && in cea_db_is_extended_tag()
5018 db->data[0] == tag; in cea_db_is_extended_tag()
5021 static bool cea_db_is_vendor(const struct cea_db *db, int vendor_oui) in cea_db_is_vendor() argument
5023 const u8 *data = cea_db_data(db); in cea_db_is_vendor()
5025 return cea_db_tag(db) == CTA_DB_VENDOR && in cea_db_is_vendor()
5026 cea_db_payload_len(db) >= 3 && in cea_db_is_vendor()
5042 const struct cea_db *db; in __cea_db_iter_current_block() local
5047 db = (const struct cea_db *)&iter->collection[iter->index]; in __cea_db_iter_current_block()
5049 if (iter->index + sizeof(*db) <= iter->end && in __cea_db_iter_current_block()
5050 iter->index + sizeof(*db) + cea_db_payload_len(db) <= iter->end) in __cea_db_iter_current_block()
5051 return db; in __cea_db_iter_current_block()
5130 const struct cea_db *db; in __cea_db_iter_next() local
5134 db = __cea_db_iter_current_block(iter); in __cea_db_iter_next()
5135 if (WARN_ON(!db)) { in __cea_db_iter_next()
5141 iter->index += sizeof(*db) + cea_db_payload_len(db); in __cea_db_iter_next()
5143 db = __cea_db_iter_current_block(iter); in __cea_db_iter_next()
5144 if (db) in __cea_db_iter_next()
5145 return db; in __cea_db_iter_next()
5164 db = __cea_db_iter_current_block(iter); in __cea_db_iter_next()
5165 if (db) in __cea_db_iter_next()
5166 return db; in __cea_db_iter_next()
5181 static bool cea_db_is_hdmi_vsdb(const struct cea_db *db) in cea_db_is_hdmi_vsdb() argument
5183 return cea_db_is_vendor(db, HDMI_IEEE_OUI) && in cea_db_is_hdmi_vsdb()
5184 cea_db_payload_len(db) >= 5; in cea_db_is_hdmi_vsdb()
5187 static bool cea_db_is_hdmi_forum_vsdb(const struct cea_db *db) in cea_db_is_hdmi_forum_vsdb() argument
5189 return cea_db_is_vendor(db, HDMI_FORUM_IEEE_OUI) && in cea_db_is_hdmi_forum_vsdb()
5190 cea_db_payload_len(db) >= 7; in cea_db_is_hdmi_forum_vsdb()
5193 static bool cea_db_is_hdmi_forum_eeodb(const void *db) in cea_db_is_hdmi_forum_eeodb() argument
5195 return cea_db_is_extended_tag(db, CTA_EXT_DB_HF_EEODB) && in cea_db_is_hdmi_forum_eeodb()
5196 cea_db_payload_len(db) >= 2; in cea_db_is_hdmi_forum_eeodb()
5199 static bool cea_db_is_microsoft_vsdb(const struct cea_db *db) in cea_db_is_microsoft_vsdb() argument
5201 return cea_db_is_vendor(db, MICROSOFT_IEEE_OUI) && in cea_db_is_microsoft_vsdb()
5202 cea_db_payload_len(db) == 21; in cea_db_is_microsoft_vsdb()
5205 static bool cea_db_is_vcdb(const struct cea_db *db) in cea_db_is_vcdb() argument
5207 return cea_db_is_extended_tag(db, CTA_EXT_DB_VIDEO_CAP) && in cea_db_is_vcdb()
5208 cea_db_payload_len(db) == 2; in cea_db_is_vcdb()
5211 static bool cea_db_is_hdmi_forum_scdb(const struct cea_db *db) in cea_db_is_hdmi_forum_scdb() argument
5213 return cea_db_is_extended_tag(db, CTA_EXT_DB_HF_SCDB) && in cea_db_is_hdmi_forum_scdb()
5214 cea_db_payload_len(db) >= 7; in cea_db_is_hdmi_forum_scdb()
5217 static bool cea_db_is_y420cmdb(const struct cea_db *db) in cea_db_is_y420cmdb() argument
5219 return cea_db_is_extended_tag(db, CTA_EXT_DB_420_VIDEO_CAP_MAP); in cea_db_is_y420cmdb()
5222 static bool cea_db_is_y420vdb(const struct cea_db *db) in cea_db_is_y420vdb() argument
5224 return cea_db_is_extended_tag(db, CTA_EXT_DB_420_VIDEO_DATA); in cea_db_is_y420vdb()
5227 static bool cea_db_is_hdmi_hdr_metadata_block(const struct cea_db *db) in cea_db_is_hdmi_hdr_metadata_block() argument
5229 return cea_db_is_extended_tag(db, CTA_EXT_DB_HDR_STATIC_METADATA) && in cea_db_is_hdmi_hdr_metadata_block()
5230 cea_db_payload_len(db) >= 3; in cea_db_is_hdmi_hdr_metadata_block()
5283 const struct cea_db *db, u64 *y420cmdb_map) in parse_cta_y420cmdb() argument
5286 int i, map_len = cea_db_payload_len(db) - 1; in parse_cta_y420cmdb()
5287 const u8 *data = cea_db_data(db) + 1; in parse_cta_y420cmdb()
5324 const struct cea_db *db; in add_cea_modes() local
5332 cea_db_iter_for_each(db, &iter) { in add_cea_modes()
5333 if (cea_db_is_hdmi_vsdb(db)) { in add_cea_modes()
5334 modes += do_hdmi_vsdb_modes(connector, (const u8 *)db, in add_cea_modes()
5335 cea_db_payload_len(db)); in add_cea_modes()
5336 } else if (cea_db_is_y420vdb(db)) { in add_cea_modes()
5337 const u8 *vdb420 = cea_db_data(db) + 1; in add_cea_modes()
5341 cea_db_payload_len(db) - 1); in add_cea_modes()
5457 drm_parse_hdr_metadata_block(struct drm_connector *connector, const u8 *db) in drm_parse_hdr_metadata_block() argument
5463 len = cea_db_payload_len(db); in drm_parse_hdr_metadata_block()
5465 hdr_metadata->eotf = eotf_supported(db); in drm_parse_hdr_metadata_block()
5466 hdr_metadata->metadata_type = hdr_metadata_type(db); in drm_parse_hdr_metadata_block()
5469 hdr_metadata->max_cll = db[4]; in drm_parse_hdr_metadata_block()
5471 hdr_metadata->max_fall = db[5]; in drm_parse_hdr_metadata_block()
5473 hdr_metadata->min_cll = db[6]; in drm_parse_hdr_metadata_block()
5482 drm_parse_hdmi_vsdb_audio(struct drm_connector *connector, const u8 *db) in drm_parse_hdmi_vsdb_audio() argument
5484 u8 len = cea_db_payload_len(db); in drm_parse_hdmi_vsdb_audio()
5486 if (len >= 6 && (db[6] & (1 << 7))) in drm_parse_hdmi_vsdb_audio()
5489 if (len >= 10 && hdmi_vsdb_latency_present(db)) { in drm_parse_hdmi_vsdb_audio()
5491 connector->video_latency[0] = db[9]; in drm_parse_hdmi_vsdb_audio()
5492 connector->audio_latency[0] = db[10]; in drm_parse_hdmi_vsdb_audio()
5495 if (len >= 12 && hdmi_vsdb_i_latency_present(db)) { in drm_parse_hdmi_vsdb_audio()
5497 connector->video_latency[1] = db[11]; in drm_parse_hdmi_vsdb_audio()
5498 connector->audio_latency[1] = db[12]; in drm_parse_hdmi_vsdb_audio()
5675 const struct cea_db *db; in drm_edid_to_eld() local
5702 cea_db_iter_for_each(db, &iter) { in drm_edid_to_eld()
5703 const u8 *data = cea_db_data(db); in drm_edid_to_eld()
5704 int len = cea_db_payload_len(db); in drm_edid_to_eld()
5707 switch (cea_db_tag(db)) { in drm_edid_to_eld()
5723 if (cea_db_is_hdmi_vsdb(db)) in drm_edid_to_eld()
5724 drm_parse_hdmi_vsdb_audio(connector, (const u8 *)db); in drm_edid_to_eld()
5753 const struct cea_db *db; in _drm_edid_to_sad() local
5758 cea_db_iter_for_each(db, &iter) { in _drm_edid_to_sad()
5759 if (cea_db_tag(db) == CTA_DB_AUDIO) { in _drm_edid_to_sad()
5763 count = cea_db_payload_len(db) / 3; /* SAD is 3B */ in _drm_edid_to_sad()
5769 drm_edid_cta_sad_set(&sads[i], &db->data[i * 3]); in _drm_edid_to_sad()
5802 const struct cea_db *db; in _drm_edid_to_speaker_allocation() local
5807 cea_db_iter_for_each(db, &iter) { in _drm_edid_to_speaker_allocation()
5808 if (cea_db_tag(db) == CTA_DB_SPEAKER && in _drm_edid_to_speaker_allocation()
5809 cea_db_payload_len(db) == 3) { in _drm_edid_to_speaker_allocation()
5810 *sadb = kmemdup(db->data, cea_db_payload_len(db), in _drm_edid_to_speaker_allocation()
5814 count = cea_db_payload_len(db); in _drm_edid_to_speaker_allocation()
5889 const struct cea_db *db; in _drm_detect_hdmi_monitor() local
5898 cea_db_iter_for_each(db, &iter) { in _drm_detect_hdmi_monitor()
5899 if (cea_db_is_hdmi_vsdb(db)) { in _drm_detect_hdmi_monitor()
5931 const struct cea_db *db; in _drm_detect_monitor_audio() local
5952 cea_db_iter_for_each(db, &iter) { in _drm_detect_monitor_audio()
5953 if (cea_db_tag(db) == CTA_DB_AUDIO) { in _drm_detect_monitor_audio()
5954 const u8 *data = cea_db_data(db); in _drm_detect_monitor_audio()
5957 for (i = 0; i < cea_db_payload_len(db); i += 3) in _drm_detect_monitor_audio()
6011 static void parse_cta_vdb(struct drm_connector *connector, const struct cea_db *db) in parse_cta_vdb() argument
6014 int i, vic_index, len = cea_db_payload_len(db); in parse_cta_vdb()
6015 const u8 *svds = cea_db_data(db); in parse_cta_vdb()
6078 const struct cea_db *db) in parse_cta_y420vdb() argument
6082 const u8 *svds = cea_db_data(db) + 1; in parse_cta_y420vdb()
6085 for (i = 0; i < cea_db_payload_len(db) - 1; i++) { in parse_cta_y420vdb()
6096 static void drm_parse_vcdb(struct drm_connector *connector, const u8 *db) in drm_parse_vcdb() argument
6101 connector->base.id, connector->name, db[2]); in drm_parse_vcdb()
6103 if (db[2] & EDID_CEA_VCDB_QS) in drm_parse_vcdb()
6143 const u8 *db) in drm_parse_ycbcr420_deep_color_info() argument
6148 dc_mask = db[7] & DRM_EDID_YCBCR420_DC_MASK; in drm_parse_ycbcr420_deep_color_info()
6351 drm_parse_hdmi_vsdb_video(struct drm_connector *connector, const u8 *db) in drm_parse_hdmi_vsdb_video() argument
6354 u8 len = cea_db_payload_len(db); in drm_parse_hdmi_vsdb_video()
6358 info->source_physical_address = (db[4] << 8) | db[5]; in drm_parse_hdmi_vsdb_video()
6361 info->dvi_dual = db[6] & 1; in drm_parse_hdmi_vsdb_video()
6363 info->max_tmds_clock = db[7] * 5000; in drm_parse_hdmi_vsdb_video()
6371 if (len >= 8 && db[8] & BIT(5)) in drm_parse_hdmi_vsdb_video()
6378 drm_parse_hdmi_deep_color_info(connector, db); in drm_parse_hdmi_vsdb_video()
6386 const u8 *db) in drm_parse_microsoft_vsdb() argument
6389 u8 version = db[4]; in drm_parse_microsoft_vsdb()
6390 bool desktop_usage = db[5] & BIT(6); in drm_parse_microsoft_vsdb()
6398 connector->base.id, connector->name, version, db[5]); in drm_parse_microsoft_vsdb()
6406 const struct cea_db *db; in drm_parse_cea_ext() local
6438 cea_db_iter_for_each(db, &iter) { in drm_parse_cea_ext()
6440 const u8 *data = (const u8 *)db; in drm_parse_cea_ext()
6442 if (cea_db_is_hdmi_vsdb(db)) in drm_parse_cea_ext()
6444 else if (cea_db_is_hdmi_forum_vsdb(db) || in drm_parse_cea_ext()
6445 cea_db_is_hdmi_forum_scdb(db)) in drm_parse_cea_ext()
6447 else if (cea_db_is_microsoft_vsdb(db)) in drm_parse_cea_ext()
6449 else if (cea_db_is_y420cmdb(db)) in drm_parse_cea_ext()
6450 parse_cta_y420cmdb(connector, db, &y420cmdb_map); in drm_parse_cea_ext()
6451 else if (cea_db_is_y420vdb(db)) in drm_parse_cea_ext()
6452 parse_cta_y420vdb(connector, db); in drm_parse_cea_ext()
6453 else if (cea_db_is_vcdb(db)) in drm_parse_cea_ext()
6455 else if (cea_db_is_hdmi_hdr_metadata_block(db)) in drm_parse_cea_ext()
6457 else if (cea_db_tag(db) == CTA_DB_VIDEO) in drm_parse_cea_ext()
6458 parse_cta_vdb(connector, db); in drm_parse_cea_ext()
6459 else if (cea_db_tag(db) == CTA_DB_AUDIO) in drm_parse_cea_ext()