Skip to content

Commit c0c8773

Browse files
Srinivas-Kandagatlabroonie
authored andcommitted
ASoC: q6dsp: q6apm-dai: Add compress DAI and codec caps get callbacks
Add q6apm get compress DAI capabilities and codec capabilities callbacks to support compress offload playback. Co-developed-by: Mohammad Rafi Shaik <quic_mohs@quicinc.com> Signed-off-by: Mohammad Rafi Shaik <quic_mohs@quicinc.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20230619101653.9750-9-srinivas.kandagatla@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 88b60bf commit c0c8773

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

sound/soc/qcom/qdsp6/q6apm-dai.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,25 @@
3030
#define BUFFER_BYTES_MIN (PLAYBACK_MIN_NUM_PERIODS * PLAYBACK_MIN_PERIOD_SIZE)
3131
#define COMPR_PLAYBACK_MAX_FRAGMENT_SIZE (128 * 1024)
3232
#define COMPR_PLAYBACK_MAX_NUM_FRAGMENTS (16 * 4)
33+
#define COMPR_PLAYBACK_MIN_FRAGMENT_SIZE (8 * 1024)
34+
#define COMPR_PLAYBACK_MIN_NUM_FRAGMENTS (4)
3335
#define SID_MASK_DEFAULT 0xF
3436

37+
static const struct snd_compr_codec_caps q6apm_compr_caps = {
38+
.num_descriptors = 1,
39+
.descriptor[0].max_ch = 2,
40+
.descriptor[0].sample_rates = { 8000, 11025, 12000, 16000, 22050,
41+
24000, 32000, 44100, 48000, 88200,
42+
96000, 176400, 192000 },
43+
.descriptor[0].num_sample_rates = 13,
44+
.descriptor[0].bit_rate[0] = 320,
45+
.descriptor[0].bit_rate[1] = 128,
46+
.descriptor[0].num_bitrates = 2,
47+
.descriptor[0].profiles = 0,
48+
.descriptor[0].modes = SND_AUDIOCHANMODE_MP3_STEREO,
49+
.descriptor[0].formats = 0,
50+
};
51+
3552
enum stream_state {
3653
Q6APM_STREAM_IDLE = 0,
3754
Q6APM_STREAM_STOPPED,
@@ -41,6 +58,7 @@ enum stream_state {
4158
struct q6apm_dai_rtd {
4259
struct snd_pcm_substream *substream;
4360
struct snd_compr_stream *cstream;
61+
struct snd_codec codec;
4462
struct snd_compr_params codec_param;
4563
struct snd_dma_buffer dma_buffer;
4664
phys_addr_t phys;
@@ -54,6 +72,7 @@ struct q6apm_dai_rtd {
5472
uint16_t bits_per_sample;
5573
uint16_t source; /* Encoding source bit mask */
5674
uint16_t session_id;
75+
bool next_track;
5776
enum stream_state state;
5877
struct q6apm_graph *graph;
5978
spinlock_t lock;
@@ -517,9 +536,43 @@ static int q6apm_dai_compr_free(struct snd_soc_component *component,
517536

518537
return 0;
519538
}
539+
540+
static int q6apm_dai_compr_get_caps(struct snd_soc_component *component,
541+
struct snd_compr_stream *stream,
542+
struct snd_compr_caps *caps)
543+
{
544+
caps->direction = SND_COMPRESS_PLAYBACK;
545+
caps->min_fragment_size = COMPR_PLAYBACK_MIN_FRAGMENT_SIZE;
546+
caps->max_fragment_size = COMPR_PLAYBACK_MAX_FRAGMENT_SIZE;
547+
caps->min_fragments = COMPR_PLAYBACK_MIN_NUM_FRAGMENTS;
548+
caps->max_fragments = COMPR_PLAYBACK_MAX_NUM_FRAGMENTS;
549+
caps->num_codecs = 3;
550+
caps->codecs[0] = SND_AUDIOCODEC_MP3;
551+
caps->codecs[1] = SND_AUDIOCODEC_AAC;
552+
caps->codecs[2] = SND_AUDIOCODEC_FLAC;
553+
554+
return 0;
555+
}
556+
557+
static int q6apm_dai_compr_get_codec_caps(struct snd_soc_component *component,
558+
struct snd_compr_stream *stream,
559+
struct snd_compr_codec_caps *codec)
560+
{
561+
switch (codec->codec) {
562+
case SND_AUDIOCODEC_MP3:
563+
*codec = q6apm_compr_caps;
564+
break;
565+
default:
566+
break;
567+
}
568+
569+
return 0;
570+
}
520571
static const struct snd_compress_ops q6apm_dai_compress_ops = {
521572
.open = q6apm_dai_compr_open,
522573
.free = q6apm_dai_compr_free,
574+
.get_caps = q6apm_dai_compr_get_caps,
575+
.get_codec_caps = q6apm_dai_compr_get_codec_caps,
523576
};
524577

525578
static const struct snd_soc_component_driver q6apm_fe_dai_component = {

0 commit comments

Comments
 (0)