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:
parent
7f0d77b390
commit
30f17f05ef
5 changed files with 23 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue