From: Zongdong Jiao Date: Fri, 11 Jan 2019 03:27:21 +0000 (+0800) Subject: hdmitx: add audio ATMOS parsing [1/1] X-Git-Tag: khadas-vims-v0.9.6-release~464 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1928e3781fa577164ec44eb5c629224aed9de2ee;p=platform%2Fkernel%2Flinux-amlogic.git hdmitx: add audio ATMOS parsing [1/1] PD#SWPL-4085 Problem: Need audio ATMOS information in RX EDID Solution: Add parsing audio ATMOS information Verify: GXL/P212 Change-Id: I882b817a4d7621833bb7e4b85231d7a42e426382 Signed-off-by: Zongdong Jiao --- diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c index 466c55e..3255dbc 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c @@ -1477,7 +1477,7 @@ static int hdmitx_edid_block_parse(struct hdmitx_dev *hdmitx_device, pRXCap->RxAudioCap[idx + i].freq_cc = BlockBuf[offset + i * 3 + 1]&0x7f; pRXCap->RxAudioCap[idx + i].cc3 = - BlockBuf[offset + i * 3 + 2]&0x7; + BlockBuf[offset + i * 3 + 2]; } offset += count; break; diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c index 352390b..dcd4566 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c @@ -2360,12 +2360,27 @@ static ssize_t show_disp_cap_3d(struct device *dev, return pos; } +static void _show_pcm_ch(struct rx_cap *pRXCap, int i, + int *ppos, char *buf) +{ + const char * const aud_sample_size[] = {"ReferToStreamHeader", + "16", "20", "24", NULL}; + int j = 0; + + for (j = 0; j < 3; j++) { + if (pRXCap->RxAudioCap[i].cc3 & (1 << j)) + *ppos += snprintf(buf + *ppos, PAGE_SIZE, "%s/", + aud_sample_size[j+1]); + } + *ppos += snprintf(buf + *ppos - 1, PAGE_SIZE, " bit\n"); +} + /**/ static ssize_t show_aud_cap(struct device *dev, struct device_attribute *attr, char *buf) { int i, pos = 0, j; - static const char * const aud_coding_type[] = { + static const char * const aud_ct[] = { "ReferToStreamHeader", "PCM", "AC-3", "MPEG1", "MP3", "MPEG2", "AAC", "DTS", "ATRAC", "OneBitAudio", "Dolby_Digital+", "DTS-HD", "MAT", "DST", "WMA_Pro", @@ -2373,32 +2388,52 @@ static ssize_t show_aud_cap(struct device *dev, static const char * const aud_sampling_frequency[] = { "ReferToStreamHeader", "32", "44.1", "48", "88.2", "96", "176.4", "192", NULL}; - static const char * const aud_sample_size[] = {"ReferToStreamHeader", - "16", "20", "24", NULL}; - struct rx_cap *pRXCap = &(hdmitx_device.RXCap); pos += snprintf(buf + pos, PAGE_SIZE, "CodingType MaxChannels SamplingFreq SampleSize\n"); for (i = 0; i < pRXCap->AUD_count; i++) { - pos += snprintf(buf + pos, PAGE_SIZE, "%s, %d ch, ", - aud_coding_type[pRXCap->RxAudioCap[i]. - audio_format_code], + pos += snprintf(buf + pos, PAGE_SIZE, "%s", + aud_ct[pRXCap->RxAudioCap[i].audio_format_code]); + if ((pRXCap->RxAudioCap[i].audio_format_code == CT_DOLBY_D) && + (pRXCap->RxAudioCap[i].cc3 & 1)) + pos += snprintf(buf + pos, PAGE_SIZE, "/ATMOS"); + pos += snprintf(buf + pos, PAGE_SIZE, ", %d ch, ", pRXCap->RxAudioCap[i].channel_num_max + 1); for (j = 0; j < 7; j++) { if (pRXCap->RxAudioCap[i].freq_cc & (1 << j)) pos += snprintf(buf + pos, PAGE_SIZE, "%s/", aud_sampling_frequency[j+1]); } - pos += snprintf(buf + pos - 1, PAGE_SIZE, " kHz, ") - 1; - for (j = 0; j < 3; j++) { - if (pRXCap->RxAudioCap[i].cc3 & (1 << j)) - pos += snprintf(buf + pos, PAGE_SIZE, "%s/", - aud_sample_size[j+1]); + pos += snprintf(buf + pos - 1, PAGE_SIZE, " kHz, "); + switch (pRXCap->RxAudioCap[i].audio_format_code) { + case CT_PCM: + _show_pcm_ch(pRXCap, i, &pos, buf); + break; + case CT_AC_3: + case CT_MPEG1: + case CT_MP3: + case CT_MPEG2: + case CT_AAC: + case CT_DTS: + case CT_ATRAC: + case CT_ONE_BIT_AUDIO: + pos += snprintf(buf + pos, PAGE_SIZE, + "MaxBitRate %dkHz\n", + pRXCap->RxAudioCap[i].cc3 * 8); + break; + case CT_DOLBY_D: + case CT_DTS_HD: + case CT_MAT: + case CT_DST: + pos += snprintf(buf + pos, PAGE_SIZE, "DepVaule 0x%x\n", + pRXCap->RxAudioCap[i].cc3); + break; + case CT_WMA: + default: + break; } - pos += snprintf(buf + pos - 1, PAGE_SIZE, " bit\n") - 1; } - return pos; }