|
@@ -922,6 +922,10 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
|
|
|
rtd->destination = FROM_BLUETOOTH;
|
|
|
rtd->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH10;
|
|
|
rtd->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH11;
|
|
|
+ rtd->byte_cnt_high_reg_offset =
|
|
|
+ mmACP_I2S_BT_RECEIVE_BYTE_CNT_HIGH;
|
|
|
+ rtd->byte_cnt_low_reg_offset =
|
|
|
+ mmACP_I2S_BT_RECEIVE_BYTE_CNT_LOW;
|
|
|
rtd->dma_curr_dscr = mmACP_DMA_CUR_DSCR_11;
|
|
|
adata->capture_i2sbt_stream = substream;
|
|
|
break;
|
|
@@ -942,6 +946,10 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
|
|
|
rtd->destination = FROM_ACP_I2S_1;
|
|
|
rtd->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH14;
|
|
|
rtd->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH15;
|
|
|
+ rtd->byte_cnt_high_reg_offset =
|
|
|
+ mmACP_I2S_RECEIVED_BYTE_CNT_HIGH;
|
|
|
+ rtd->byte_cnt_low_reg_offset =
|
|
|
+ mmACP_I2S_RECEIVED_BYTE_CNT_LOW;
|
|
|
rtd->dma_curr_dscr = mmACP_DMA_CUR_DSCR_15;
|
|
|
adata->capture_i2ssp_stream = substream;
|
|
|
}
|
|
@@ -997,7 +1005,7 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream)
|
|
|
u32 pos = 0;
|
|
|
u64 bytescount = 0;
|
|
|
u16 dscr;
|
|
|
- u32 period_bytes;
|
|
|
+ u32 period_bytes, delay;
|
|
|
|
|
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
|
|
struct audio_substream_data *rtd = runtime->private_data;
|
|
@@ -1012,6 +1020,11 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream)
|
|
|
pos = period_bytes;
|
|
|
else
|
|
|
pos = 0;
|
|
|
+ bytescount = acp_get_byte_count(rtd);
|
|
|
+ if (bytescount > rtd->bytescount)
|
|
|
+ bytescount -= rtd->bytescount;
|
|
|
+ delay = do_div(bytescount, period_bytes);
|
|
|
+ runtime->delay = bytes_to_frames(runtime, delay);
|
|
|
} else {
|
|
|
buffersize = frames_to_bytes(runtime, runtime->buffer_size);
|
|
|
bytescount = acp_get_byte_count(rtd);
|