ASoC: SOF: compress: Introduce sof_compr_stream
authorDaniel Baluta <daniel.baluta@nxp.com>
Wed, 17 Aug 2022 08:05:27 +0000 (11:05 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 17 Aug 2022 12:00:22 +0000 (13:00 +0100)
This will keep SOF compress stream private data. So far
we used snd_compr_tstamp to hold the private data but this
is no longer enough as we need to hold other info like
number of channels or sample bytes.

Reviewed-by: Paul Olaru <paul.olaru@oss.nxp.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Link: https://lore.kernel.org/r/20220817080529.10864-3-daniel.baluta@oss.nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/compress.c
sound/soc/sof/sof-priv.h

index 760d6a4..e990fa0 100644 (file)
 #include "sof-priv.h"
 #include "sof-utils.h"
 
-static void sof_set_transferred_bytes(struct snd_compr_tstamp *tstamp,
+static void sof_set_transferred_bytes(struct sof_compr_stream *sstream,
                                      u64 host_pos, u64 buffer_size)
 {
        u64 prev_pos;
        unsigned int copied;
 
-       div64_u64_rem(tstamp->copied_total, buffer_size, &prev_pos);
+       div64_u64_rem(sstream->copied_total, buffer_size, &prev_pos);
 
        if (host_pos < prev_pos)
                copied = (buffer_size - prev_pos) + host_pos;
        else
                copied = host_pos - prev_pos;
 
-       tstamp->copied_total += copied;
+       sstream->copied_total += copied;
 }
 
 static void snd_sof_compr_fragment_elapsed_work(struct work_struct *work)
@@ -49,7 +49,7 @@ void snd_sof_compr_fragment_elapsed(struct snd_compr_stream *cstream)
        struct snd_soc_pcm_runtime *rtd;
        struct snd_compr_runtime *crtd;
        struct snd_soc_component *component;
-       struct snd_compr_tstamp *tstamp;
+       struct sof_compr_stream *sstream;
        struct snd_sof_pcm *spcm;
 
        if (!cstream)
@@ -57,7 +57,7 @@ void snd_sof_compr_fragment_elapsed(struct snd_compr_stream *cstream)
 
        rtd = cstream->private_data;
        crtd = cstream->runtime;
-       tstamp = crtd->private_data;
+       sstream = crtd->private_data;
        component = snd_soc_rtdcom_lookup(rtd, SOF_AUDIO_PCM_DRV_NAME);
 
        spcm = snd_sof_find_spcm_dai(component, rtd);
@@ -67,7 +67,7 @@ void snd_sof_compr_fragment_elapsed(struct snd_compr_stream *cstream)
                return;
        }
 
-       sof_set_transferred_bytes(tstamp, spcm->stream[cstream->direction].posn.host_posn,
+       sof_set_transferred_bytes(sstream, spcm->stream[cstream->direction].posn.host_posn,
                                  crtd->buffer_size);
 
        /* use the same workqueue-based solution as for PCM, cf. snd_sof_pcm_elapsed */
@@ -96,24 +96,24 @@ static int sof_compr_open(struct snd_soc_component *component,
 {
        struct snd_soc_pcm_runtime *rtd = cstream->private_data;
        struct snd_compr_runtime *crtd = cstream->runtime;
-       struct snd_compr_tstamp *tstamp;
+       struct sof_compr_stream *sstream;
        struct snd_sof_pcm *spcm;
        int dir;
 
-       tstamp = kzalloc(sizeof(*tstamp), GFP_KERNEL);
-       if (!tstamp)
+       sstream = kzalloc(sizeof(*sstream), GFP_KERNEL);
+       if (!sstream)
                return -ENOMEM;
 
        spcm = snd_sof_find_spcm_dai(component, rtd);
        if (!spcm) {
-               kfree(tstamp);
+               kfree(sstream);
                return -EINVAL;
        }
 
        dir = cstream->direction;
 
        if (spcm->stream[dir].cstream) {
-               kfree(tstamp);
+               kfree(sstream);
                return -EBUSY;
        }
 
@@ -122,7 +122,7 @@ static int sof_compr_open(struct snd_soc_component *component,
        spcm->stream[dir].posn.dai_posn = 0;
        spcm->prepared[dir] = false;
 
-       crtd->private_data = tstamp;
+       crtd->private_data = sstream;
 
        return 0;
 }
@@ -131,7 +131,7 @@ static int sof_compr_free(struct snd_soc_component *component,
                          struct snd_compr_stream *cstream)
 {
        struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
-       struct snd_compr_tstamp *tstamp = cstream->runtime->private_data;
+       struct sof_compr_stream *sstream = cstream->runtime->private_data;
        struct snd_soc_pcm_runtime *rtd = cstream->private_data;
        struct sof_ipc_stream stream;
        struct sof_ipc_reply reply;
@@ -155,7 +155,7 @@ static int sof_compr_free(struct snd_soc_component *component,
 
        cancel_work_sync(&spcm->stream[cstream->direction].period_elapsed_work);
        spcm->stream[cstream->direction].cstream = NULL;
-       kfree(tstamp);
+       kfree(sstream);
 
        return ret;
 }
@@ -169,7 +169,7 @@ static int sof_compr_set_params(struct snd_soc_component *component,
        struct sof_ipc_pcm_params_reply ipc_params_reply;
        struct sof_ipc_fw_ready *ready = &sdev->fw_ready;
        struct sof_ipc_fw_version *v = &ready->version;
-       struct snd_compr_tstamp *tstamp;
+       struct sof_compr_stream *sstream;
        struct sof_ipc_pcm_params *pcm;
        struct snd_sof_pcm *spcm;
        size_t ext_data_size;
@@ -184,7 +184,7 @@ static int sof_compr_set_params(struct snd_soc_component *component,
                return -EINVAL;
        }
 
-       tstamp = crtd->private_data;
+       sstream = crtd->private_data;
 
        spcm = snd_sof_find_spcm_dai(component, rtd);
 
@@ -237,7 +237,7 @@ static int sof_compr_set_params(struct snd_soc_component *component,
                goto out;
        }
 
-       tstamp->sampling_rate = params->codec.sample_rate;
+       sstream->sampling_rate = params->codec.sample_rate;
 
        spcm->prepared[cstream->direction] = true;
 
@@ -325,10 +325,10 @@ static int sof_compr_pointer(struct snd_soc_component *component,
                             struct snd_compr_stream *cstream,
                             struct snd_compr_tstamp *tstamp)
 {
-       struct snd_compr_tstamp *pstamp = cstream->runtime->private_data;
+       struct sof_compr_stream *sstream = cstream->runtime->private_data;
 
-       tstamp->sampling_rate = pstamp->sampling_rate;
-       tstamp->copied_total = pstamp->copied_total;
+       tstamp->sampling_rate = sstream->sampling_rate;
+       tstamp->copied_total = sstream->copied_total;
 
        return 0;
 }
index 8235830..42f1120 100644 (file)
@@ -105,6 +105,11 @@ enum sof_debugfs_access_type {
        SOF_DEBUGFS_ACCESS_D0_ONLY,
 };
 
+struct sof_compr_stream {
+       u64 copied_total;
+       u32 sampling_rate;
+};
+
 struct snd_sof_dev;
 struct snd_sof_ipc_msg;
 struct snd_sof_ipc;