ASoC: wm_adsp: Factor out stripping padding from ADSP data

In preparation for more refactoring add a helper function to strip the
padding from ADSP data.

Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Charles Keepax 2019-02-22 10:04:17 +00:00 committed by Mark Brown
parent eb23dcd20e
commit cc7d6ce902
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 17 additions and 10 deletions

View File

@ -3231,6 +3231,21 @@ static inline int wm_adsp_buffer_write(struct wm_adsp_compr_buf *buf,
buf->host_buf_ptr + field_offset, data); buf->host_buf_ptr + field_offset, data);
} }
static void wm_adsp_remove_padding(u32 *buf, int nwords, int data_word_size)
{
u8 *pack_in = (u8 *)buf;
u8 *pack_out = (u8 *)buf;
int i, j;
/* Remove the padding bytes from the data read from the DSP */
for (i = 0; i < nwords; i++) {
for (j = 0; j < data_word_size; j++)
*pack_out++ = *pack_in++;
pack_in += sizeof(*buf) - data_word_size;
}
}
static int wm_adsp_legacy_host_buf_addr(struct wm_adsp_compr_buf *buf) static int wm_adsp_legacy_host_buf_addr(struct wm_adsp_compr_buf *buf)
{ {
struct wm_adsp_alg_region *alg_region; struct wm_adsp_alg_region *alg_region;
@ -3666,11 +3681,9 @@ EXPORT_SYMBOL_GPL(wm_adsp_compr_pointer);
static int wm_adsp_buffer_capture_block(struct wm_adsp_compr *compr, int target) static int wm_adsp_buffer_capture_block(struct wm_adsp_compr *compr, int target)
{ {
struct wm_adsp_compr_buf *buf = compr->buf; struct wm_adsp_compr_buf *buf = compr->buf;
u8 *pack_in = (u8 *)compr->raw_buf;
u8 *pack_out = (u8 *)compr->raw_buf;
unsigned int adsp_addr; unsigned int adsp_addr;
int mem_type, nwords, max_read; int mem_type, nwords, max_read;
int i, j, ret; int i, ret;
/* Calculate read parameters */ /* Calculate read parameters */
for (i = 0; i < wm_adsp_fw[buf->dsp->fw].caps->num_regions; ++i) for (i = 0; i < wm_adsp_fw[buf->dsp->fw].caps->num_regions; ++i)
@ -3702,13 +3715,7 @@ static int wm_adsp_buffer_capture_block(struct wm_adsp_compr *compr, int target)
if (ret < 0) if (ret < 0)
return ret; return ret;
/* Remove the padding bytes from the data read from the DSP */ wm_adsp_remove_padding(compr->raw_buf, nwords, WM_ADSP_DATA_WORD_SIZE);
for (i = 0; i < nwords; i++) {
for (j = 0; j < WM_ADSP_DATA_WORD_SIZE; j++)
*pack_out++ = *pack_in++;
pack_in += sizeof(*(compr->raw_buf)) - WM_ADSP_DATA_WORD_SIZE;
}
/* update read index to account for words read */ /* update read index to account for words read */
buf->read_index += nwords; buf->read_index += nwords;