Example #1
0
/*
 * decode_audio_data_block()
 */
static void decode_audio_data_block(unsigned char *e, int n, edid_info_t *edid)
{
	int ne = n / SAD_SIZE;
	void *sad_offset;
	otm_hdmi_audio_cap_t *adb = (otm_hdmi_audio_cap_t *) &edid->audio_caps;

	VERIFY_QUICK(ne > 0, exit);
	LOG_PRINT(LOG_LEVEL_DETAIL, "[audio data block... %d entries]\n", ne);

	/* Do we have enough space in SAD table? */
	if (edid->short_audio_descriptor_count + ne > MAX_CAPS) {
		LOG_PRINT(LOG_LEVEL_ERROR,
			"Too many SADs in EDID. Not adding %d SADs\n", ne);
		return;
	}

	sad_offset = edid->short_audio_descriptor_data +
			edid->short_audio_descriptor_count * SAD_SIZE;
	memcpy(sad_offset, e, n);

	edid->short_audio_descriptor_count += ne;

	while (ne-- > 0) {
		/* Do we have room for another capability? */
		if (edid->num_caps < MAX_CAPS) {
			adb[edid->num_caps].format = (*e & 0x78) >> 3;
			adb[edid->num_caps].max_channels = (*e & 0x07) + 1;
			adb[edid->num_caps].fs = *(e + 1) & 0x7F;
			adb[edid->num_caps].ss_bitrate = *(e + 2);
			print_audio_capability(&adb[edid->num_caps]);
			edid->num_caps++;
		}
		/* Go to the next entry of the block */
		e += SAD_SIZE;
	}
/**
 * This function called by edid_print tool internally
 * @ctx		: hdmi context handle
 * @edid		: edid information
 *
 * Returns nothing. Called by edid_print tool to print
 * edid information to dmesg for debugging purposes
 */
static void __hdmi_report_edid(hdmi_context_t *ctx, edid_info_t *edid)
{
	int i = 0;

	LOG_PRINT(LOG_LEVEL_HIGH, "----------------------\n");
	LOG_PRINT(LOG_LEVEL_HIGH, "Name     : %s\n", edid->product_name);
	LOG_PRINT(LOG_LEVEL_HIGH, "Year     : %d\n", edid->product_year);
	LOG_PRINT(LOG_LEVEL_HIGH, "SN       : %d\n", edid->product_sn);
	LOG_PRINT(LOG_LEVEL_HIGH, "Type     : %s\n",
			edid->hdmi ? "HDMI" : "DVI");
	LOG_PRINT(LOG_LEVEL_HIGH, "YCbCr444 : %s\n",
			edid->ycbcr444 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "YCbCr422 : %s\n",
			edid->ycbcr422 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "30 bpp   : %s\n",
			edid->dc_30 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "36 bpp   : %s\n",
			edid->dc_36 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "48 bpp   : %s\n",
			edid->dc_48 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "DC_YUV   : %s\n",
			edid->dc_y444 ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "Max CLK  : %d\n",
			edid->max_tmds_clock);
	LOG_PRINT(LOG_LEVEL_HIGH, "Lip sync : %s\n",
			edid->latency_present ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "ILip sync: %s\n",
			edid->latency_int_present ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "Vid lat  : %d\n",
			edid->latency_video);
	LOG_PRINT(LOG_LEVEL_HIGH, "Aud lat  : %d\n",
			edid->latency_audio);
	LOG_PRINT(LOG_LEVEL_HIGH, "IVid lat : %d\n",
			edid->latency_video_interlaced);
	LOG_PRINT(LOG_LEVEL_HIGH, "IAud lat : %d\n",
			edid->latency_audio_interlaced);
	LOG_PRINT(LOG_LEVEL_HIGH, "HDMI VID : %s\n",
			edid->hdmi_video_present ? "Y" : "N");
	LOG_PRINT(LOG_LEVEL_HIGH, "HDMI 3D  : %s\n",
			edid->enabled_3d ? "Y" : "N");

	LOG_PRINT(LOG_LEVEL_HIGH, "SPA      : %d.%d.%d.%d\n",
		  (edid->spa & 0xF000) >> 12,
		  (edid->spa & 0x0F00) >> 8,
		  (edid->spa & 0x00F0) >> 4, (edid->spa & 0x000F) >> 0);

	LOG_PRINT(LOG_LEVEL_HIGH, "Supported timings [%d]:\n",
		  edid->num_timings);

	for (i = 0; i < edid->num_timings; i++)
		print_pd_timing(&edid->timings[i], edid->order[i]);

	LOG_PRINT(LOG_LEVEL_HIGH, "Audio capabilities:\n");
	for (i = 0; i < edid->num_caps; i++)
		print_audio_capability(&edid->audio_caps[i]);

	print_speaker_layout(edid->speaker_map);
	LOG_PRINT(LOG_LEVEL_HIGH, "----------------------\n");
}
Example #3
0
/*
 * decode_audio_data_block()
 */
static void decode_audio_data_block(unsigned char *e, int n, edid_info_t *edid)
{
	int ne = n / 3;
	otm_hdmi_audio_cap_t *adb = (otm_hdmi_audio_cap_t *) &edid->audio_caps;

	LOG_PRINT(LOG_LEVEL_DETAIL, "[audio data block... %d entries]\n", ne);

	while (ne-- > 0) {
		/* Do we have room for another capability? */
		if (edid->num_caps < MAX_CAPS) {
			adb[edid->num_caps].format = (*e & 0x78) >> 3;
			adb[edid->num_caps].max_channels = (*e & 0x07) + 1;
			adb[edid->num_caps].fs = *(e + 1) & 0x7F;
			adb[edid->num_caps].ss_bitrate = *(e + 2);
			print_audio_capability(&adb[edid->num_caps]);
			edid->num_caps++;
		}
		/* Go to the next entry of the block */
		e += 3;
	}