ASoC: msm: qdsp6v2: Add TrueHD HDMI compress pass-though

Add TrueHD audio format for compressed HDMI pass-through

Change-Id: Id8a0b8c3a01c881ae284f13c2c0a36959c2413ac
Signed-off-by: Ben Romberger <bromberg@codeaurora.org>
This commit is contained in:
Ben Romberger 2017-04-06 16:08:16 -07:00 committed by Gerrit - the friendly Code Review server
parent 7f0d77b390
commit 30f17f05ef
5 changed files with 23 additions and 10 deletions

View file

@ -5057,6 +5057,7 @@ struct asm_amrwbplus_fmt_blk_v2 {
#define ASM_MEDIA_FMT_VORBIS 0x00010C15
#define ASM_MEDIA_FMT_APE 0x00012F32
#define ASM_MEDIA_FMT_DSD 0x00012F3E
#define ASM_MEDIA_FMT_TRUEHD 0x00013215
/* Media format ID for adaptive transform acoustic coding. This
* ID is used by the #ASM_STREAM_CMD_OPEN_WRITE_COMPRESSED command

View file

@ -55,6 +55,7 @@
#define FORMAT_DSD 0x001d
#define FORMAT_APTX 0x001e
#define FORMAT_GEN_COMPR 0x001f
#define FORMAT_TRUEHD 0x0020
#define ENCDEC_SBCBITRATE 0x0001
#define ENCDEC_IMMEDIATE_DECODE 0x0002

View file

@ -104,7 +104,8 @@
#define SND_AUDIOCODEC_APE ((__u32) 0x00000020)
#define SND_AUDIOCODEC_DSD ((__u32) 0x00000021)
#define SND_AUDIOCODEC_APTX ((__u32) 0x00000022)
#define SND_AUDIOCODEC_MAX SND_AUDIOCODEC_APTX
#define SND_AUDIOCODEC_TRUEHD ((__u32) 0x00000023)
#define SND_AUDIOCODEC_MAX SND_AUDIOCODEC_TRUEHD
/*
* Profile and modes are listed with bit masks. This allows for a
* more compact representation of fields that will not evolve

View file

@ -187,7 +187,7 @@ struct msm_compr_audio {
const u32 compr_codecs[] = {
SND_AUDIOCODEC_AC3, SND_AUDIOCODEC_EAC3, SND_AUDIOCODEC_DTS,
SND_AUDIOCODEC_DSD};
SND_AUDIOCODEC_DSD, SND_AUDIOCODEC_TRUEHD};
struct query_audio_effect {
uint32_t mod_id;
@ -904,7 +904,7 @@ static void populate_codec_list(struct msm_compr_audio *prtd)
COMPR_PLAYBACK_MIN_NUM_FRAGMENTS;
prtd->compr_cap.max_fragments =
COMPR_PLAYBACK_MAX_NUM_FRAGMENTS;
prtd->compr_cap.num_codecs = 15;
prtd->compr_cap.num_codecs = 16;
prtd->compr_cap.codecs[0] = SND_AUDIOCODEC_MP3;
prtd->compr_cap.codecs[1] = SND_AUDIOCODEC_AAC;
prtd->compr_cap.codecs[2] = SND_AUDIOCODEC_AC3;
@ -920,6 +920,7 @@ static void populate_codec_list(struct msm_compr_audio *prtd)
prtd->compr_cap.codecs[12] = SND_AUDIOCODEC_DTS;
prtd->compr_cap.codecs[13] = SND_AUDIOCODEC_DSD;
prtd->compr_cap.codecs[14] = SND_AUDIOCODEC_APTX;
prtd->compr_cap.codecs[15] = SND_AUDIOCODEC_TRUEHD;
}
static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
@ -1174,6 +1175,10 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
pr_err("%s: CMD DSD Format block failed ret %d\n",
__func__, ret);
break;
case FORMAT_TRUEHD:
pr_debug("SND_AUDIOCODEC_TRUEHD\n");
/* no media format block needed */
break;
case FORMAT_APTX:
pr_debug("SND_AUDIOCODEC_APTX\n");
memset(&aptx_cfg, 0x0, sizeof(struct aptx_dec_bt_addr_cfg));
@ -1972,6 +1977,12 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream,
break;
}
case SND_AUDIOCODEC_TRUEHD: {
pr_debug("%s: SND_AUDIOCODEC_TRUEHD\n", __func__);
prtd->codec = FORMAT_TRUEHD;
break;
}
case SND_AUDIOCODEC_APTX: {
pr_debug("%s: SND_AUDIOCODEC_APTX\n", __func__);
prtd->codec = FORMAT_APTX;
@ -2836,20 +2847,14 @@ static int msm_compr_get_codec_caps(struct snd_compr_stream *cstream,
SND_AUDIOSTREAMFORMAT_RAW);
break;
case SND_AUDIOCODEC_AC3:
break;
case SND_AUDIOCODEC_EAC3:
break;
case SND_AUDIOCODEC_FLAC:
break;
case SND_AUDIOCODEC_VORBIS:
break;
case SND_AUDIOCODEC_ALAC:
break;
case SND_AUDIOCODEC_APE:
break;
case SND_AUDIOCODEC_DTS:
break;
case SND_AUDIOCODEC_DSD:
case SND_AUDIOCODEC_TRUEHD:
case SND_AUDIOCODEC_APTX:
break;
default:
@ -3318,6 +3323,7 @@ static int msm_compr_send_dec_params(struct snd_compr_stream *cstream,
switch (prtd->codec) {
case FORMAT_MP3:
case FORMAT_MPEG4_AAC:
case FORMAT_TRUEHD:
case FORMAT_APTX:
pr_debug("%s: no runtime parameters for codec: %d\n", __func__,
prtd->codec);
@ -3385,6 +3391,7 @@ static int msm_compr_dec_params_put(struct snd_kcontrol *kcontrol,
case FORMAT_APE:
case FORMAT_DTS:
case FORMAT_DSD:
case FORMAT_TRUEHD:
case FORMAT_APTX:
pr_debug("%s: no runtime parameters for codec: %d\n", __func__,
prtd->codec);

View file

@ -2782,6 +2782,9 @@ static int __q6asm_open_write(struct audio_client *ac, uint32_t format,
case FORMAT_GEN_COMPR:
open.dec_fmt_id = ASM_MEDIA_FMT_GENERIC_COMPRESSED;
break;
case FORMAT_TRUEHD:
open.dec_fmt_id = ASM_MEDIA_FMT_TRUEHD;
break;
default:
pr_err("%s: Invalid format 0x%x\n", __func__, format);
rc = -EINVAL;