Alsa-devel
Threads by month
- ----- 2024 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
April 2018
- 144 participants
- 270 discussions
[alsa-devel] [PATCH v2 2/3] ASoC: amd: dma driver changes for BT I2S instance
by Vijendar Mukunda 19 Apr '18
by Vijendar Mukunda 19 Apr '18
19 Apr '18
With in ACP, There are three I2S controllers can be
configured/enabled ( I2S SP, I2S MICSP, I2S BT).
Default enabled I2S controller instance is I2S SP.
This patch provides required changes to support I2S BT
controller Instance.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda(a)amd.com>
---
v1->v2: defined i2s instance macros in acp header file
sound/soc/amd/Kconfig | 1 +
sound/soc/amd/acp-pcm-dma.c | 388 +++++++++++++++++++++++++++-----------------
sound/soc/amd/acp.h | 67 +++++++-
3 files changed, 298 insertions(+), 158 deletions(-)
diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig
index 6cbf9cf..6b7c620 100644
--- a/sound/soc/amd/Kconfig
+++ b/sound/soc/amd/Kconfig
@@ -1,5 +1,6 @@
config SND_SOC_AMD_ACP
tristate "AMD Audio Coprocessor support"
+ select SND_DESIGNWARE_PCM
help
This option enables ACP DMA support on AMD platform.
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
index 5ffe2ef..7c392fe 100644
--- a/sound/soc/amd/acp-pcm-dma.c
+++ b/sound/soc/amd/acp-pcm-dma.c
@@ -23,6 +23,8 @@
#include <drm/amd_asic_type.h>
#include "acp.h"
+#include "../dwc/local.h"
+
#define DRV_NAME "acp_audio_dma"
#define PLAYBACK_MIN_NUM_PERIODS 2
@@ -37,13 +39,14 @@
#define MAX_BUFFER (PLAYBACK_MAX_PERIOD_SIZE * PLAYBACK_MAX_NUM_PERIODS)
#define MIN_BUFFER MAX_BUFFER
-#define ST_PLAYBACK_MAX_PERIOD_SIZE 8192
+#define ST_PLAYBACK_MAX_PERIOD_SIZE 4096
#define ST_CAPTURE_MAX_PERIOD_SIZE ST_PLAYBACK_MAX_PERIOD_SIZE
#define ST_MAX_BUFFER (ST_PLAYBACK_MAX_PERIOD_SIZE * PLAYBACK_MAX_NUM_PERIODS)
#define ST_MIN_BUFFER ST_MAX_BUFFER
#define DRV_NAME "acp_audio_dma"
+
static const struct snd_pcm_hardware acp_pcm_hardware_playback = {
.info = SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP |
@@ -317,54 +320,21 @@ static void acp_pte_config(void __iomem *acp_mmio, struct page *pg,
}
static void config_acp_dma(void __iomem *acp_mmio,
- struct audio_substream_data *audio_config,
+ struct audio_substream_data *rtd,
u32 asic_type)
{
- u32 pte_offset, sram_bank;
- u16 ch1, ch2, destination, dma_dscr_idx;
-
- if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK) {
- pte_offset = ACP_PLAYBACK_PTE_OFFSET;
- ch1 = SYSRAM_TO_ACP_CH_NUM;
- ch2 = ACP_TO_I2S_DMA_CH_NUM;
- sram_bank = ACP_SHARED_RAM_BANK_1_ADDRESS;
- destination = TO_ACP_I2S_1;
-
- } else {
- pte_offset = ACP_CAPTURE_PTE_OFFSET;
- ch1 = SYSRAM_TO_ACP_CH_NUM;
- ch2 = ACP_TO_I2S_DMA_CH_NUM;
- switch (asic_type) {
- case CHIP_STONEY:
- sram_bank = ACP_SHARED_RAM_BANK_3_ADDRESS;
- break;
- default:
- sram_bank = ACP_SHARED_RAM_BANK_5_ADDRESS;
- }
- destination = FROM_ACP_I2S_1;
- }
-
- acp_pte_config(acp_mmio, audio_config->pg, audio_config->num_of_pages,
- pte_offset);
- if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK)
- dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH12;
- else
- dma_dscr_idx = CAPTURE_START_DMA_DESCR_CH14;
-
+ acp_pte_config(acp_mmio, rtd->pg, rtd->num_of_pages,
+ rtd->pte_offset);
/* Configure System memory <-> ACP SRAM DMA descriptors */
- set_acp_sysmem_dma_descriptors(acp_mmio, audio_config->size,
- audio_config->direction, pte_offset, ch1,
- sram_bank, dma_dscr_idx, asic_type);
-
- if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK)
- dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH13;
- else
- dma_dscr_idx = CAPTURE_START_DMA_DESCR_CH15;
+ set_acp_sysmem_dma_descriptors(acp_mmio, rtd->size,
+ rtd->direction, rtd->pte_offset,
+ rtd->ch1, rtd->sram_bank,
+ rtd->dma_dscr_idx_1, asic_type);
/* Configure ACP SRAM <-> I2S DMA descriptors */
- set_acp_to_i2s_dma_descriptors(acp_mmio, audio_config->size,
- audio_config->direction, sram_bank,
- destination, ch2, dma_dscr_idx,
- asic_type);
+ set_acp_to_i2s_dma_descriptors(acp_mmio, rtd->size,
+ rtd->direction, rtd->sram_bank,
+ rtd->destination, rtd->ch2,
+ rtd->dma_dscr_idx_2, asic_type);
}
/* Start a given DMA channel transfer */
@@ -390,6 +360,9 @@ static void acp_dma_start(void __iomem *acp_mmio,
case ACP_TO_I2S_DMA_CH_NUM:
case ACP_TO_SYSRAM_CH_NUM:
case I2S_TO_ACP_DMA_CH_NUM:
+ case ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM:
+ case ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM:
+ case I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM:
dma_ctrl |= ACP_DMA_CNTL_0__DMAChIOCEn_MASK;
break;
default:
@@ -670,6 +643,24 @@ static irqreturn_t dma_irq_handler(int irq, void *arg)
acp_mmio, mmACP_EXTERNAL_INTR_STAT);
}
+ if ((intr_flag & BIT(ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM)) != 0) {
+ valid_irq = true;
+ if (acp_reg_read(acp_mmio, mmACP_DMA_CUR_DSCR_9) ==
+ PLAYBACK_START_DMA_DESCR_CH9)
+ dscr_idx = PLAYBACK_END_DMA_DESCR_CH8;
+ else
+ dscr_idx = PLAYBACK_START_DMA_DESCR_CH8;
+ config_acp_dma_channel(acp_mmio,
+ SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM,
+ dscr_idx, 1, 0);
+ acp_dma_start(acp_mmio, SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM,
+ false);
+ snd_pcm_period_elapsed(irq_data->play_i2sbt_stream);
+ acp_reg_write((intr_flag &
+ BIT(ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM)) << 16,
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ }
+
if ((intr_flag & BIT(I2S_TO_ACP_DMA_CH_NUM)) != 0) {
valid_irq = true;
if (acp_reg_read(acp_mmio, mmACP_DMA_CUR_DSCR_15) ==
@@ -692,6 +683,31 @@ static irqreturn_t dma_irq_handler(int irq, void *arg)
acp_mmio, mmACP_EXTERNAL_INTR_STAT);
}
+ if ((intr_flag & BIT(I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM)) != 0) {
+ valid_irq = true;
+ if (acp_reg_read(acp_mmio, mmACP_DMA_CUR_DSCR_11) ==
+ CAPTURE_START_DMA_DESCR_CH11)
+ dscr_idx = CAPTURE_END_DMA_DESCR_CH10;
+ else
+ dscr_idx = CAPTURE_START_DMA_DESCR_CH10;
+ config_acp_dma_channel(acp_mmio,
+ ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM,
+ dscr_idx, 1, 0);
+ acp_dma_start(acp_mmio, ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM,
+ false);
+ acp_reg_write((intr_flag &
+ BIT(I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM)) << 16,
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ }
+
+ if ((intr_flag & BIT(ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM)) != 0) {
+ valid_irq = true;
+ snd_pcm_period_elapsed(irq_data->capture_i2sbt_stream);
+ acp_reg_write((intr_flag &
+ BIT(ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM)) << 16,
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ }
+
if (valid_irq)
return IRQ_HANDLED;
else
@@ -707,6 +723,7 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd,
DRV_NAME);
struct audio_drv_data *intr_data = dev_get_drvdata(component->dev);
+ struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(prtd->cpu_dai);
struct audio_substream_data *adata =
kzalloc(sizeof(struct audio_substream_data), GFP_KERNEL);
if (!adata)
@@ -720,6 +737,8 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
default:
runtime->hw = acp_pcm_hardware_playback;
}
+ adata->i2s_play_instance = dev->i2s_instance;
+ adata->bytescount = 0;
} else {
switch (intr_data->asic_type) {
case CHIP_STONEY:
@@ -728,6 +747,8 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
default:
runtime->hw = acp_pcm_hardware_capture;
}
+ adata->i2s_capture_instance = dev->i2s_instance;
+ adata->bytescount = 0;
}
ret = snd_pcm_hw_constraint_integer(runtime,
@@ -747,11 +768,46 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
* This enablement is not required for another stream, if current
* stream is not closed
*/
- if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream)
+ if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream &&
+ !intr_data->play_i2sbt_stream && !intr_data->capture_i2sbt_stream)
acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- intr_data->play_i2ssp_stream = substream;
+ switch (adata->i2s_play_instance) {
+ case I2S_BT_INSTANCE:
+ adata->pte_offset = ACP_ST_BT_PLAYBACK_PTE_OFFSET;
+ adata->ch1 = SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM;
+ adata->ch2 = ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM;
+ adata->sram_bank = ACP_SRAM_BANK_3_ADDRESS;
+ adata->destination = TO_BLUETOOTH;
+ adata->dma_dscr_idx_1 = PLAYBACK_START_DMA_DESCR_CH8;
+ adata->dma_dscr_idx_2 = PLAYBACK_START_DMA_DESCR_CH9;
+ adata->byte_cnt_high =
+ mmACP_I2S_BT_TRANSMIT_BYTE_CNT_HIGH;
+ adata->byte_cnt_low =
+ mmACP_I2S_BT_TRANSMIT_BYTE_CNT_LOW;
+ intr_data->play_i2sbt_stream = substream;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ switch (intr_data->asic_type) {
+ case CHIP_STONEY:
+ adata->pte_offset = ACP_ST_PLAYBACK_PTE_OFFSET;
+ break;
+ default:
+ adata->pte_offset = ACP_PLAYBACK_PTE_OFFSET;
+ }
+ adata->ch1 = SYSRAM_TO_ACP_CH_NUM;
+ adata->ch2 = ACP_TO_I2S_DMA_CH_NUM;
+ adata->sram_bank = ACP_SRAM_BANK_1_ADDRESS;
+ adata->destination = TO_ACP_I2S_1;
+ adata->dma_dscr_idx_1 = PLAYBACK_START_DMA_DESCR_CH12;
+ adata->dma_dscr_idx_2 = PLAYBACK_START_DMA_DESCR_CH13;
+ adata->byte_cnt_high = mmACP_I2S_TRANSMIT_BYTE_CNT_HIGH;
+ adata->byte_cnt_low = mmACP_I2S_TRANSMIT_BYTE_CNT_LOW;
+ intr_data->play_i2ssp_stream = substream;
+ break;
+ }
/*
* For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
@@ -763,7 +819,40 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
bank, true);
}
} else {
- intr_data->capture_i2ssp_stream = substream;
+ switch (adata->i2s_capture_instance) {
+ case I2S_BT_INSTANCE:
+ adata->pte_offset = ACP_ST_BT_CAPTURE_PTE_OFFSET;
+ adata->ch1 = ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM;
+ adata->ch2 = I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM;
+ adata->sram_bank = ACP_SRAM_BANK_4_ADDRESS;
+ adata->destination = FROM_BLUETOOTH;
+ adata->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH10;
+ adata->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH11;
+ adata->byte_cnt_high =
+ mmACP_I2S_BT_RECEIVE_BYTE_CNT_HIGH;
+ adata->byte_cnt_low =
+ mmACP_I2S_BT_RECEIVE_BYTE_CNT_LOW;
+ intr_data->capture_i2sbt_stream = substream;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ adata->pte_offset = ACP_CAPTURE_PTE_OFFSET;
+ adata->ch1 = SYSRAM_TO_ACP_CH_NUM;
+ adata->ch2 = ACP_TO_I2S_DMA_CH_NUM;
+ switch (intr_data->asic_type) {
+ case CHIP_STONEY:
+ adata->sram_bank = ACP_SRAM_BANK_2_ADDRESS;
+ break;
+ default:
+ adata->sram_bank = ACP_SRAM_BANK_5_ADDRESS;
+ }
+ adata->destination = FROM_ACP_I2S_1;
+ adata->dma_dscr_idx_1 = CAPTURE_START_DMA_DESCR_CH14;
+ adata->dma_dscr_idx_2 = CAPTURE_START_DMA_DESCR_CH15;
+ adata->byte_cnt_high = mmACP_I2S_RECEIVED_BYTE_CNT_HIGH;
+ adata->byte_cnt_low = mmACP_I2S_RECEIVED_BYTE_CNT_LOW;
+ intr_data->capture_i2ssp_stream = substream;
+ }
if (intr_data->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(intr_data->acp_mmio,
@@ -797,10 +886,25 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
if (adata->asic_type == CHIP_STONEY) {
val = acp_reg_read(adata->acp_mmio,
mmACP_I2S_16BIT_RESOLUTION_EN);
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
- val |= ACP_I2S_SP_16BIT_RESOLUTION_EN;
- else
- val |= ACP_I2S_MIC_16BIT_RESOLUTION_EN;
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ switch (rtd->i2s_play_instance) {
+ case I2S_BT_INSTANCE:
+ val |= ACP_I2S_BT_16BIT_RESOLUTION_EN;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ val |= ACP_I2S_SP_16BIT_RESOLUTION_EN;
+ }
+ } else {
+ switch (rtd->i2s_capture_instance) {
+ case I2S_BT_INSTANCE:
+ val |= ACP_I2S_BT_16BIT_RESOLUTION_EN;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ val |= ACP_I2S_MIC_16BIT_RESOLUTION_EN;
+ }
+ }
acp_reg_write(val, adata->acp_mmio,
mmACP_I2S_16BIT_RESOLUTION_EN);
}
@@ -837,26 +941,15 @@ static int acp_dma_hw_free(struct snd_pcm_substream *substream)
return snd_pcm_lib_free_pages(substream);
}
-static u64 acp_get_byte_count(void __iomem *acp_mmio, int stream)
+static u64 acp_get_byte_count(struct audio_substream_data *rtd)
{
- union acp_dma_count playback_dma_count;
- union acp_dma_count capture_dma_count;
- u64 bytescount = 0;
+ union acp_dma_count byte_count;
- if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
- playback_dma_count.bcount.high = acp_reg_read(acp_mmio,
- mmACP_I2S_TRANSMIT_BYTE_CNT_HIGH);
- playback_dma_count.bcount.low = acp_reg_read(acp_mmio,
- mmACP_I2S_TRANSMIT_BYTE_CNT_LOW);
- bytescount = playback_dma_count.bytescount;
- } else {
- capture_dma_count.bcount.high = acp_reg_read(acp_mmio,
- mmACP_I2S_RECEIVED_BYTE_CNT_HIGH);
- capture_dma_count.bcount.low = acp_reg_read(acp_mmio,
- mmACP_I2S_RECEIVED_BYTE_CNT_LOW);
- bytescount = capture_dma_count.bytescount;
- }
- return bytescount;
+ byte_count.bcount.high = acp_reg_read(rtd->acp_mmio,
+ rtd->byte_cnt_high);
+ byte_count.bcount.low = acp_reg_read(rtd->acp_mmio,
+ rtd->byte_cnt_low);
+ return byte_count.bytescount;
}
static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream)
@@ -872,15 +965,10 @@ static snd_pcm_uframes_t acp_dma_pointer(struct snd_pcm_substream *substream)
return -EINVAL;
buffersize = frames_to_bytes(runtime, runtime->buffer_size);
- bytescount = acp_get_byte_count(rtd->acp_mmio, substream->stream);
+ bytescount = acp_get_byte_count(rtd);
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- if (bytescount > rtd->i2ssp_renderbytescount)
- bytescount = bytescount - rtd->i2ssp_renderbytescount;
- } else {
- if (bytescount > rtd->i2ssp_capturebytescount)
- bytescount = bytescount - rtd->i2ssp_capturebytescount;
- }
+ if (bytescount > rtd->bytescount)
+ bytescount = bytescount - rtd->bytescount;
pos = do_div(bytescount, buffersize);
return bytes_to_frames(runtime, pos);
}
@@ -898,21 +986,14 @@ static int acp_dma_prepare(struct snd_pcm_substream *substream)
if (!rtd)
return -EINVAL;
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- config_acp_dma_channel(rtd->acp_mmio, SYSRAM_TO_ACP_CH_NUM,
- PLAYBACK_START_DMA_DESCR_CH12,
- NUM_DSCRS_PER_CHANNEL, 0);
- config_acp_dma_channel(rtd->acp_mmio, ACP_TO_I2S_DMA_CH_NUM,
- PLAYBACK_START_DMA_DESCR_CH13,
- NUM_DSCRS_PER_CHANNEL, 0);
- } else {
- config_acp_dma_channel(rtd->acp_mmio, ACP_TO_SYSRAM_CH_NUM,
- CAPTURE_START_DMA_DESCR_CH14,
- NUM_DSCRS_PER_CHANNEL, 0);
- config_acp_dma_channel(rtd->acp_mmio, I2S_TO_ACP_DMA_CH_NUM,
- CAPTURE_START_DMA_DESCR_CH15,
- NUM_DSCRS_PER_CHANNEL, 0);
- }
+ config_acp_dma_channel(rtd->acp_mmio,
+ rtd->ch1,
+ rtd->dma_dscr_idx_1,
+ NUM_DSCRS_PER_CHANNEL, 0);
+ config_acp_dma_channel(rtd->acp_mmio,
+ rtd->ch2,
+ rtd->dma_dscr_idx_2,
+ NUM_DSCRS_PER_CHANNEL, 0);
return 0;
}
@@ -934,15 +1015,13 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
case SNDRV_PCM_TRIGGER_RESUME:
- bytescount = acp_get_byte_count(rtd->acp_mmio,
- substream->stream);
+ bytescount = acp_get_byte_count(rtd);
+ if (rtd->bytescount == 0)
+ rtd->bytescount = bytescount;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- if (rtd->i2ssp_renderbytescount == 0)
- rtd->i2ssp_renderbytescount = bytescount;
- acp_dma_start(rtd->acp_mmio,
- SYSRAM_TO_ACP_CH_NUM, false);
+ acp_dma_start(rtd->acp_mmio, rtd->ch1, false);
while (acp_reg_read(rtd->acp_mmio, mmACP_DMA_CH_STS) &
- BIT(SYSRAM_TO_ACP_CH_NUM)) {
+ BIT(rtd->ch1)) {
if (!loops--) {
dev_err(component->dev,
"acp dma start timeout\n");
@@ -950,40 +1029,21 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
}
cpu_relax();
}
-
- acp_dma_start(rtd->acp_mmio,
- ACP_TO_I2S_DMA_CH_NUM, true);
-
- } else {
- if (rtd->i2ssp_capturebytescount == 0)
- rtd->i2ssp_capturebytescount = bytescount;
- acp_dma_start(rtd->acp_mmio,
- I2S_TO_ACP_DMA_CH_NUM, true);
}
+ acp_dma_start(rtd->acp_mmio, rtd->ch2, true);
ret = 0;
break;
case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
case SNDRV_PCM_TRIGGER_SUSPEND:
- /*
- * Need to stop only circular DMA channels :
- * ACP_TO_I2S_DMA_CH_NUM / I2S_TO_ACP_DMA_CH_NUM. Non-circular
- * channels will stopped automatically after its transfer
- * completes : SYSRAM_TO_ACP_CH_NUM / ACP_TO_SYSRAM_CH_NUM
- */
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- ret = acp_dma_stop(rtd->acp_mmio,
- SYSRAM_TO_ACP_CH_NUM);
- ret = acp_dma_stop(rtd->acp_mmio,
- ACP_TO_I2S_DMA_CH_NUM);
- rtd->i2ssp_renderbytescount = 0;
+ acp_dma_stop(rtd->acp_mmio, rtd->ch1);
+ ret = acp_dma_stop(rtd->acp_mmio, rtd->ch2);
} else {
- ret = acp_dma_stop(rtd->acp_mmio,
- I2S_TO_ACP_DMA_CH_NUM);
- ret = acp_dma_stop(rtd->acp_mmio,
- ACP_TO_SYSRAM_CH_NUM);
- rtd->i2ssp_capturebytescount = 0;
+ acp_dma_stop(rtd->acp_mmio, rtd->ch2);
+ ret = acp_dma_stop(rtd->acp_mmio, rtd->ch1);
}
+ rtd->bytescount = 0;
break;
default:
ret = -EINVAL;
@@ -1028,27 +1088,40 @@ static int acp_dma_close(struct snd_pcm_substream *substream)
DRV_NAME);
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
- kfree(rtd);
-
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
- adata->play_i2ssp_stream = NULL;
- /*
- * For Stoney, Memory gating is disabled,i.e SRAM Banks
- * won't be turned off. The default state for SRAM banks is ON.
- * Setting SRAM bank state code skipped for STONEY platform.
- * added condition checks for Carrizo platform only
- */
- if (adata->asic_type != CHIP_STONEY) {
- for (bank = 1; bank <= 4; bank++)
- acp_set_sram_bank_state(adata->acp_mmio, bank,
- false);
+ switch (rtd->i2s_play_instance) {
+ case I2S_BT_INSTANCE:
+ adata->play_i2sbt_stream = NULL;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ adata->play_i2ssp_stream = NULL;
+ /*
+ * For Stoney, Memory gating is disabled,i.e SRAM Banks
+ * won't be turned off. The default state for SRAM banks
+ * is ON.Setting SRAM bank state code skipped for STONEY
+ * platform. Added condition checks for Carrizo platform
+ * only.
+ */
+ if (adata->asic_type != CHIP_STONEY) {
+ for (bank = 1; bank <= 4; bank++)
+ acp_set_sram_bank_state(adata->acp_mmio,
+ bank, false);
+ }
}
} else {
- adata->capture_i2ssp_stream = NULL;
- if (adata->asic_type != CHIP_STONEY) {
- for (bank = 5; bank <= 8; bank++)
- acp_set_sram_bank_state(adata->acp_mmio, bank,
- false);
+ switch (rtd->i2s_capture_instance) {
+ case I2S_BT_INSTANCE:
+ adata->capture_i2sbt_stream = NULL;
+ break;
+ case I2S_SP_INSTANCE:
+ default:
+ adata->capture_i2ssp_stream = NULL;
+ if (adata->asic_type != CHIP_STONEY) {
+ for (bank = 5; bank <= 8; bank++)
+ acp_set_sram_bank_state(adata->acp_mmio,
+ bank, false);
+ }
}
}
@@ -1056,8 +1129,10 @@ static int acp_dma_close(struct snd_pcm_substream *substream)
* Disable ACP irq, when the current stream is being closed and
* another stream is also not active.
*/
- if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream)
+ if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream &&
+ !adata->play_i2sbt_stream && !adata->capture_i2sbt_stream)
acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
+ kfree(rtd);
return 0;
}
@@ -1110,6 +1185,8 @@ static int acp_audio_probe(struct platform_device *pdev)
audio_drv_data->play_i2ssp_stream = NULL;
audio_drv_data->capture_i2ssp_stream = NULL;
+ audio_drv_data->play_i2sbt_stream = NULL;
+ audio_drv_data->capture_i2sbt_stream = NULL;
audio_drv_data->asic_type = *pdata;
@@ -1166,6 +1243,7 @@ static int acp_pcm_resume(struct device *dev)
{
u16 bank;
int status;
+ struct audio_substream_data *rtd;
struct audio_drv_data *adata = dev_get_drvdata(dev);
status = acp_init(adata->acp_mmio, adata->asic_type);
@@ -1185,9 +1263,8 @@ static int acp_pcm_resume(struct device *dev)
acp_set_sram_bank_state(adata->acp_mmio, bank,
true);
}
- config_acp_dma(adata->acp_mmio,
- adata->play_i2ssp_stream->runtime->private_data,
- adata->asic_type);
+ rtd = adata->play_i2ssp_stream->runtime->private_data;
+ config_acp_dma(adata->acp_mmio, rtd, adata->asic_type);
}
if (adata->capture_i2ssp_stream &&
adata->capture_i2ssp_stream->runtime) {
@@ -1196,9 +1273,20 @@ static int acp_pcm_resume(struct device *dev)
acp_set_sram_bank_state(adata->acp_mmio, bank,
true);
}
- config_acp_dma(adata->acp_mmio,
- adata->capture_i2ssp_stream->runtime->private_data,
- adata->asic_type);
+ rtd = adata->capture_i2ssp_stream->runtime->private_data;
+ config_acp_dma(adata->acp_mmio, rtd, adata->asic_type);
+ }
+ if (adata->asic_type != CHIP_CARRIZO) {
+ if (adata->play_i2sbt_stream &&
+ adata->play_i2sbt_stream->runtime) {
+ rtd = adata->play_i2sbt_stream->runtime->private_data;
+ config_acp_dma(adata->acp_mmio, rtd, adata->asic_type);
+ }
+ if (adata->capture_i2sbt_stream &&
+ adata->capture_i2sbt_stream->runtime) {
+ rtd = adata->capture_i2sbt_stream->runtime->private_data;
+ config_acp_dma(adata->acp_mmio, rtd, adata->asic_type);
+ }
}
acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
return 0;
diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h
index 0e6089b..95c39a3 100644
--- a/sound/soc/amd/acp.h
+++ b/sound/soc/amd/acp.h
@@ -10,17 +10,30 @@
#define ACP_PLAYBACK_PTE_OFFSET 10
#define ACP_CAPTURE_PTE_OFFSET 0
+/* Playback and Capture Offset for Stoney */
+#define ACP_ST_PLAYBACK_PTE_OFFSET 0x04
+#define ACP_ST_CAPTURE_PTE_OFFSET 0x00
+#define ACP_ST_BT_PLAYBACK_PTE_OFFSET 0x08
+#define ACP_ST_BT_CAPTURE_PTE_OFFSET 0x0c
+
#define ACP_GARLIC_CNTL_DEFAULT 0x00000FB4
#define ACP_ONION_CNTL_DEFAULT 0x00000FB4
#define ACP_PHYSICAL_BASE 0x14000
-/* Playback SRAM address (as a destination in dma descriptor) */
-#define ACP_SHARED_RAM_BANK_1_ADDRESS 0x4002000
-
-/* Capture SRAM address (as a source in dma descriptor) */
-#define ACP_SHARED_RAM_BANK_5_ADDRESS 0x400A000
-#define ACP_SHARED_RAM_BANK_3_ADDRESS 0x4006000
+/*
+ * In case of I2S SP controller instance, Stoney uses SRAM bank 1 for
+ * playback and SRAM Bank 2 for capture where as in case of BT I2S
+ * Instance, Stoney uses SRAM Bank 3 for playback & SRAM Bank 4 will
+ * be used for capture. Carrizo uses I2S SP controller instance. SRAM Banks
+ * 1, 2, 3, 4 will be used for playback & SRAM Banks 5, 6, 7, 8 will be used
+ * for capture scenario.
+ */
+#define ACP_SRAM_BANK_1_ADDRESS 0x4002000
+#define ACP_SRAM_BANK_2_ADDRESS 0x4004000
+#define ACP_SRAM_BANK_3_ADDRESS 0x4006000
+#define ACP_SRAM_BANK_4_ADDRESS 0x4008000
+#define ACP_SRAM_BANK_5_ADDRESS 0x400A000
#define ACP_DMA_RESET_TIME 10000
#define ACP_CLOCK_EN_TIME_OUT_VALUE 0x000000FF
@@ -35,8 +48,13 @@
#define TO_ACP_I2S_1 0x2
#define TO_ACP_I2S_2 0x4
+#define TO_BLUETOOTH 0x3
#define FROM_ACP_I2S_1 0xa
#define FROM_ACP_I2S_2 0xb
+#define FROM_BLUETOOTH 0xb
+
+#define I2S_SP_INSTANCE 0x01
+#define I2S_BT_INSTANCE 0x02
#define ACP_TILE_ON_MASK 0x03
#define ACP_TILE_OFF_MASK 0x02
@@ -57,6 +75,14 @@
#define ACP_TO_SYSRAM_CH_NUM 14
#define I2S_TO_ACP_DMA_CH_NUM 15
+/* Playback DMA Channels for I2S BT instance */
+#define SYSRAM_TO_ACP_BT_INSTANCE_CH_NUM 8
+#define ACP_TO_I2S_DMA_BT_INSTANCE_CH_NUM 9
+
+/* Capture DMA Channels for I2S BT Instance */
+#define ACP_TO_SYSRAM_BT_INSTANCE_CH_NUM 10
+#define I2S_TO_ACP_DMA_BT_INSTANCE_CH_NUM 11
+
#define NUM_DSCRS_PER_CHANNEL 2
#define PLAYBACK_START_DMA_DESCR_CH12 0
@@ -69,9 +95,22 @@
#define CAPTURE_START_DMA_DESCR_CH15 6
#define CAPTURE_END_DMA_DESCR_CH15 7
+/* I2S BT Instance DMA Descriptors */
+#define PLAYBACK_START_DMA_DESCR_CH8 8
+#define PLAYBACK_END_DMA_DESCR_CH8 9
+#define PLAYBACK_START_DMA_DESCR_CH9 10
+#define PLAYBACK_END_DMA_DESCR_CH9 11
+
+#define CAPTURE_START_DMA_DESCR_CH10 12
+#define CAPTURE_END_DMA_DESCR_CH10 13
+#define CAPTURE_START_DMA_DESCR_CH11 14
+#define CAPTURE_END_DMA_DESCR_CH11 15
+
#define mmACP_I2S_16BIT_RESOLUTION_EN 0x5209
#define ACP_I2S_MIC_16BIT_RESOLUTION_EN 0x01
#define ACP_I2S_SP_16BIT_RESOLUTION_EN 0x02
+#define ACP_I2S_BT_16BIT_RESOLUTION_EN 0x04
+
enum acp_dma_priority_level {
/* 0x0 Specifies the DMA channel is given normal priority */
ACP_DMA_PRIORITY_LEVEL_NORMAL = 0x0,
@@ -84,16 +123,28 @@ struct audio_substream_data {
struct page *pg;
unsigned int order;
u16 num_of_pages;
+ u16 i2s_play_instance;
+ u16 i2s_capture_instance;
u16 direction;
+ u16 ch1;
+ u16 ch2;
+ u16 destination;
+ u16 dma_dscr_idx_1;
+ u16 dma_dscr_idx_2;
+ u32 pte_offset;
+ u32 sram_bank;
+ u32 byte_cnt_high;
+ u32 byte_cnt_low;
uint64_t size;
- u64 i2ssp_renderbytescount;
- u64 i2ssp_capturebytescount;
+ u64 bytescount;
void __iomem *acp_mmio;
};
struct audio_drv_data {
struct snd_pcm_substream *play_i2ssp_stream;
struct snd_pcm_substream *capture_i2ssp_stream;
+ struct snd_pcm_substream *play_i2sbt_stream;
+ struct snd_pcm_substream *capture_i2sbt_stream;
void __iomem *acp_mmio;
u32 asic_type;
};
--
2.7.4
3
2
[alsa-devel] [PATCH v2 1/3] ASoC: dwc: I2S Controller instance param added
by Vijendar Mukunda 18 Apr '18
by Vijendar Mukunda 18 Apr '18
18 Apr '18
When multiple I2S controller instances created,
i2s_instance parameter refers to i2s controller instance value.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda(a)amd.com>
---
v1->v2: removed acp dma driver specific macros from dwc header file
include/sound/designware_i2s.h | 4 ++++
sound/soc/dwc/dwc-i2s.c | 1 +
sound/soc/dwc/local.h | 1 +
3 files changed, 6 insertions(+)
diff --git a/include/sound/designware_i2s.h b/include/sound/designware_i2s.h
index 830f5ca..2a94e7c 100644
--- a/include/sound/designware_i2s.h
+++ b/include/sound/designware_i2s.h
@@ -44,6 +44,10 @@ struct i2s_platform_data {
int channel;
u32 snd_fmts;
u32 snd_rates;
+ /* i2s_instance parameter returns I2S controller instance value
+ * when multiple I2S controllers instantiated
+ */
+ u32 i2s_instance;
#define DW_I2S_QUIRK_COMP_REG_OFFSET (1 << 0)
#define DW_I2S_QUIRK_COMP_PARAM1 (1 << 1)
diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c
index 65112b9..58f81a4 100644
--- a/sound/soc/dwc/dwc-i2s.c
+++ b/sound/soc/dwc/dwc-i2s.c
@@ -553,6 +553,7 @@ static int dw_configure_dai_by_pd(struct dw_i2s_dev *dev,
if (dev->quirks & DW_I2S_QUIRK_16BIT_IDX_OVERRIDE)
idx = 1;
+ dev->i2s_instance = pdata->i2s_instance;
/* Set DMA slaves info */
dev->play_dma_data.pd.data = pdata->play_dma_data;
dev->capture_dma_data.pd.data = pdata->capture_dma_data;
diff --git a/sound/soc/dwc/local.h b/sound/soc/dwc/local.h
index 91dc70a..e89e464 100644
--- a/sound/soc/dwc/local.h
+++ b/sound/soc/dwc/local.h
@@ -98,6 +98,7 @@ struct dw_i2s_dev {
u32 ccr;
u32 xfer_resolution;
u32 fifo_th;
+ u32 i2s_instance;
/* data related to DMA transfers b/w i2s and DMAC */
union dw_i2s_snd_dma_data play_dma_data;
--
2.7.4
3
3
18 Apr '18
The patch
ASoC: topology: Fix build errors
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 24ada03555505205b0c8b8b796d52926600bf947 Mon Sep 17 00:00:00 2001
From: Mark Brown <broonie(a)kernel.org>
Date: Wed, 18 Apr 2018 15:40:41 +0100
Subject: [PATCH] ASoC: topology: Fix build errors
The two commits:
81e9b0a07889 ASoC: topology: Give more data to clients via callbacks
28aa6f7779f7 ASoC: topology: Add callback for DAPM route load/unload
break the build so revert them.
Reported-by: Stephen Rothwell <sfr(a)canb.auug.org.au>
Signed-off-by: Mark Brown <broonie(a)kernel.org>
---
include/sound/soc-topology.h | 30 ++++++------------
sound/soc/intel/skylake/skl-pcm.c | 7 ++--
sound/soc/intel/skylake/skl-topology.c | 5 ++-
sound/soc/intel/skylake/skl-topology.h | 20 +++++++++---
sound/soc/soc-topology.c | 44 ++++++++------------------
5 files changed, 42 insertions(+), 64 deletions(-)
diff --git a/include/sound/soc-topology.h b/include/sound/soc-topology.h
index 401ef2c45d6c..f552c3f56368 100644
--- a/include/sound/soc-topology.h
+++ b/include/sound/soc-topology.h
@@ -30,9 +30,6 @@ struct snd_soc_dapm_context;
struct snd_soc_card;
struct snd_kcontrol_new;
struct snd_soc_dai_link;
-struct snd_soc_dai_driver;
-struct snd_soc_dai;
-struct snd_soc_dapm_route;
/* object scan be loaded and unloaded in groups with identfying indexes */
#define SND_SOC_TPLG_INDEX_ALL 0 /* ID that matches all FW objects */
@@ -112,44 +109,35 @@ struct snd_soc_tplg_widget_events {
struct snd_soc_tplg_ops {
/* external kcontrol init - used for any driver specific init */
- int (*control_load)(struct snd_soc_component *, int index,
+ int (*control_load)(struct snd_soc_component *,
struct snd_kcontrol_new *, struct snd_soc_tplg_ctl_hdr *);
int (*control_unload)(struct snd_soc_component *,
struct snd_soc_dobj *);
- /* DAPM graph route element loading and unloading */
- int (*dapm_route_load)(struct snd_soc_component *, int index,
- struct snd_soc_dapm_route *route);
- int (*dapm_route_unload)(struct snd_soc_component *,
- struct snd_soc_dobj *);
-
/* external widget init - used for any driver specific init */
- int (*widget_load)(struct snd_soc_component *, int index,
+ int (*widget_load)(struct snd_soc_component *,
struct snd_soc_dapm_widget *,
struct snd_soc_tplg_dapm_widget *);
- int (*widget_ready)(struct snd_soc_component *, int index,
+ int (*widget_ready)(struct snd_soc_component *,
struct snd_soc_dapm_widget *,
struct snd_soc_tplg_dapm_widget *);
int (*widget_unload)(struct snd_soc_component *,
struct snd_soc_dobj *);
/* FE DAI - used for any driver specific init */
- int (*dai_load)(struct snd_soc_component *, int index,
- struct snd_soc_dai_driver *dai_drv,
- struct snd_soc_tplg_pcm *pcm, struct snd_soc_dai *dai);
-
+ int (*dai_load)(struct snd_soc_component *,
+ struct snd_soc_dai_driver *dai_drv);
int (*dai_unload)(struct snd_soc_component *,
struct snd_soc_dobj *);
/* DAI link - used for any driver specific init */
- int (*link_load)(struct snd_soc_component *, int index,
- struct snd_soc_dai_link *link,
- struct snd_soc_tplg_link_config *cfg);
+ int (*link_load)(struct snd_soc_component *,
+ struct snd_soc_dai_link *link);
int (*link_unload)(struct snd_soc_component *,
struct snd_soc_dobj *);
/* callback to handle vendor bespoke data */
- int (*vendor_load)(struct snd_soc_component *, int index,
+ int (*vendor_load)(struct snd_soc_component *,
struct snd_soc_tplg_hdr *);
int (*vendor_unload)(struct snd_soc_component *,
struct snd_soc_tplg_hdr *);
@@ -158,7 +146,7 @@ struct snd_soc_tplg_ops {
void (*complete)(struct snd_soc_component *);
/* manifest - optional to inform component of manifest */
- int (*manifest)(struct snd_soc_component *, int index,
+ int (*manifest)(struct snd_soc_component *,
struct snd_soc_tplg_manifest *);
/* vendor specific kcontrol handlers available for binding */
diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c
index 1f4dd08d36c5..afa86b9e4dcf 100644
--- a/sound/soc/intel/skylake/skl-pcm.c
+++ b/sound/soc/intel/skylake/skl-pcm.c
@@ -1017,11 +1017,10 @@ static struct snd_soc_dai_driver skl_platform_dai[] = {
},
};
-int skl_dai_load(struct snd_soc_component *cmp, int index,
- struct snd_soc_dai_driver *dai_drv,
- struct snd_soc_tplg_pcm *pcm, struct snd_soc_dai *dai)
+int skl_dai_load(struct snd_soc_component *cmp,
+ struct snd_soc_dai_driver *pcm_dai)
{
- dai_drv->ops = &skl_pcm_dai_ops;
+ pcm_dai->ops = &skl_pcm_dai_ops;
return 0;
}
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index 6ac081f1f215..3b1dca419883 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -2851,7 +2851,7 @@ void skl_cleanup_resources(struct skl *skl)
* information to the driver about module and pipeline parameters which DSP
* FW expects like ids, resource values, formats etc
*/
-static int skl_tplg_widget_load(struct snd_soc_component *cmpnt, int index,
+static int skl_tplg_widget_load(struct snd_soc_component *cmpnt,
struct snd_soc_dapm_widget *w,
struct snd_soc_tplg_dapm_widget *tplg_w)
{
@@ -2958,7 +2958,6 @@ static int skl_init_enum_data(struct device *dev, struct soc_enum *se,
}
static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
- int index,
struct snd_kcontrol_new *kctl,
struct snd_soc_tplg_ctl_hdr *hdr)
{
@@ -3447,7 +3446,7 @@ static int skl_tplg_get_manifest_data(struct snd_soc_tplg_manifest *manifest,
return 0;
}
-static int skl_manifest_load(struct snd_soc_component *cmpnt, int index,
+static int skl_manifest_load(struct snd_soc_component *cmpnt,
struct snd_soc_tplg_manifest *manifest)
{
struct hdac_ext_bus *ebus = snd_soc_component_get_drvdata(cmpnt);
diff --git a/sound/soc/intel/skylake/skl-topology.h b/sound/soc/intel/skylake/skl-topology.h
index 77857c598eed..b1e0667c0ae0 100644
--- a/sound/soc/intel/skylake/skl-topology.h
+++ b/sound/soc/intel/skylake/skl-topology.h
@@ -221,9 +221,18 @@ struct skl_mod_inst_map {
u16 inst_id;
};
+struct skl_uuid_inst_map {
+ u16 inst_id;
+ u16 reserved;
+ uuid_le mod_uuid;
+} __packed;
+
struct skl_kpb_params {
u32 num_modules;
- struct skl_mod_inst_map map[0];
+ union {
+ struct skl_mod_inst_map map[0];
+ struct skl_uuid_inst_map map_uuid[0];
+ } u;
};
struct skl_module_inst_id {
@@ -460,7 +469,7 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
u32 caps_size, u32 node_id);
void skl_tplg_set_be_dmic_config(struct snd_soc_dai *dai,
struct skl_pipe_params *params, int stream);
-int skl_tplg_init(struct snd_soc_platform *platform,
+int skl_tplg_init(struct snd_soc_component *component,
struct hdac_ext_bus *ebus);
struct skl_module_cfg *skl_tplg_fe_get_cpr_module(
struct snd_soc_dai *dai, int stream);
@@ -503,7 +512,8 @@ int skl_pcm_host_dma_prepare(struct device *dev,
int skl_pcm_link_dma_prepare(struct device *dev,
struct skl_pipe_params *params);
-int skl_dai_load(struct snd_soc_component *, int index,
- struct snd_soc_dai_driver *dai_drv,
- struct snd_soc_tplg_pcm *pcm, struct snd_soc_dai *dai);
+int skl_dai_load(struct snd_soc_component *cmp,
+ struct snd_soc_dai_driver *pcm_dai);
+void skl_tplg_add_moduleid_in_bind_params(struct skl *skl,
+ struct snd_soc_dapm_widget *w);
#endif
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index b95a9ab0b526..de08693be9e1 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -315,7 +315,7 @@ static int soc_tplg_vendor_load_(struct soc_tplg *tplg,
int ret = 0;
if (tplg->comp && tplg->ops && tplg->ops->vendor_load)
- ret = tplg->ops->vendor_load(tplg->comp, tplg->index, hdr);
+ ret = tplg->ops->vendor_load(tplg->comp, hdr);
else {
dev_err(tplg->dev, "ASoC: no vendor load callback for ID %d\n",
hdr->vendor_type);
@@ -347,8 +347,7 @@ static int soc_tplg_widget_load(struct soc_tplg *tplg,
struct snd_soc_dapm_widget *w, struct snd_soc_tplg_dapm_widget *tplg_w)
{
if (tplg->comp && tplg->ops && tplg->ops->widget_load)
- return tplg->ops->widget_load(tplg->comp, tplg->index, w,
- tplg_w);
+ return tplg->ops->widget_load(tplg->comp, w, tplg_w);
return 0;
}
@@ -359,30 +358,27 @@ static int soc_tplg_widget_ready(struct soc_tplg *tplg,
struct snd_soc_dapm_widget *w, struct snd_soc_tplg_dapm_widget *tplg_w)
{
if (tplg->comp && tplg->ops && tplg->ops->widget_ready)
- return tplg->ops->widget_ready(tplg->comp, tplg->index, w,
- tplg_w);
+ return tplg->ops->widget_ready(tplg->comp, w, tplg_w);
return 0;
}
/* pass DAI configurations to component driver for extra initialization */
static int soc_tplg_dai_load(struct soc_tplg *tplg,
- struct snd_soc_dai_driver *dai_drv,
- struct snd_soc_tplg_pcm *pcm, struct snd_soc_dai *dai)
+ struct snd_soc_dai_driver *dai_drv)
{
if (tplg->comp && tplg->ops && tplg->ops->dai_load)
- return tplg->ops->dai_load(tplg->comp, tplg->index, dai_drv,
- pcm, dai);
+ return tplg->ops->dai_load(tplg->comp, dai_drv);
return 0;
}
/* pass link configurations to component driver for extra initialization */
static int soc_tplg_dai_link_load(struct soc_tplg *tplg,
- struct snd_soc_dai_link *link, struct snd_soc_tplg_link_config *cfg)
+ struct snd_soc_dai_link *link)
{
if (tplg->comp && tplg->ops && tplg->ops->link_load)
- return tplg->ops->link_load(tplg->comp, tplg->index, link, cfg);
+ return tplg->ops->link_load(tplg->comp, link);
return 0;
}
@@ -703,8 +699,7 @@ static int soc_tplg_init_kcontrol(struct soc_tplg *tplg,
struct snd_kcontrol_new *k, struct snd_soc_tplg_ctl_hdr *hdr)
{
if (tplg->comp && tplg->ops && tplg->ops->control_load)
- return tplg->ops->control_load(tplg->comp, tplg->index, k,
- hdr);
+ return tplg->ops->control_load(tplg->comp, k, hdr);
return 0;
}
@@ -1161,17 +1156,6 @@ static int soc_tplg_kcontrol_elems_load(struct soc_tplg *tplg,
return 0;
}
-/* optionally pass new dynamic kcontrol to component driver. */
-static int soc_tplg_add_route(struct soc_tplg *tplg,
- struct snd_soc_dapm_route *route)
-{
- if (tplg->comp && tplg->ops && tplg->ops->dapm_route_load)
- return tplg->ops->dapm_route_load(tplg->comp, tplg->index,
- route);
-
- return 0;
-}
-
static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg,
struct snd_soc_tplg_hdr *hdr)
{
@@ -1220,8 +1204,6 @@ static int soc_tplg_dapm_graph_elems_load(struct soc_tplg *tplg,
else
route.control = elem->control;
- soc_tplg_add_route(tplg, &route);
-
/* add route, but keep going if some fail */
snd_soc_dapm_add_routes(dapm, &route, 1);
}
@@ -1776,7 +1758,7 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
dai_drv->compress_new = snd_soc_new_compress;
/* pass control to component driver for optional further init */
- ret = soc_tplg_dai_load(tplg, dai_drv, pcm, NULL);
+ ret = soc_tplg_dai_load(tplg, dai_drv);
if (ret < 0) {
dev_err(tplg->comp->dev, "ASoC: DAI loading failed\n");
kfree(dai_drv);
@@ -1846,7 +1828,7 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
set_link_flags(link, pcm->flag_mask, pcm->flags);
/* pass control to component driver for optional further init */
- ret = soc_tplg_dai_link_load(tplg, link, NULL);
+ ret = soc_tplg_dai_link_load(tplg, link);
if (ret < 0) {
dev_err(tplg->comp->dev, "ASoC: FE link loading failed\n");
kfree(link);
@@ -2154,7 +2136,7 @@ static int soc_tplg_link_config(struct soc_tplg *tplg,
set_link_flags(link, cfg->flag_mask, cfg->flags);
/* pass control to component driver for optional further init */
- ret = soc_tplg_dai_link_load(tplg, link, cfg);
+ ret = soc_tplg_dai_link_load(tplg, link);
if (ret < 0) {
dev_err(tplg->dev, "ASoC: physical link loading failed\n");
return ret;
@@ -2276,7 +2258,7 @@ static int soc_tplg_dai_config(struct soc_tplg *tplg,
set_dai_flags(dai_drv, d->flag_mask, d->flags);
/* pass control to component driver for optional further init */
- ret = soc_tplg_dai_load(tplg, dai_drv, NULL, dai);
+ ret = soc_tplg_dai_load(tplg, dai_drv);
if (ret < 0) {
dev_err(tplg->comp->dev, "ASoC: DAI loading failed\n");
return ret;
@@ -2382,7 +2364,7 @@ static int soc_tplg_manifest_load(struct soc_tplg *tplg,
/* pass control to component driver for optional further init */
if (tplg->comp && tplg->ops && tplg->ops->manifest)
- return tplg->ops->manifest(tplg->comp, tplg->index, _manifest);
+ return tplg->ops->manifest(tplg->comp, _manifest);
if (!abi_match) /* free the duplicated one */
kfree(_manifest);
--
2.17.0
1
0
[alsa-devel] [asoc:for-4.18 48/51] sound/soc/intel/skylake/skl-pcm.c:1351:4: error: implicit declaration of function 'skl_tplg_add_moduleid_in_bind_params'; did you mean 'skl_tplg_update_pipe_params'?
by kbuild test robot 18 Apr '18
by kbuild test robot 18 Apr '18
18 Apr '18
Hi Liam,
FYI, the error/warning still remains.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-4.18
head: 221dd96c30a7c65b24ead7fdd7645abb99506ce2
commit: 81e9b0a078894841a50a8dd666fd64ca452a2a50 [48/51] ASoC: topology: Give more data to clients via callbacks
config: x86_64-federa-25 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
git checkout 81e9b0a078894841a50a8dd666fd64ca452a2a50
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_populate_modules':
>> sound/soc/intel/skylake/skl-pcm.c:1351:4: error: implicit declaration of function 'skl_tplg_add_moduleid_in_bind_params'; did you mean 'skl_tplg_update_pipe_params'? [-Werror=implicit-function-declaration]
skl_tplg_add_moduleid_in_bind_params(skl, w);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skl_tplg_update_pipe_params
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_platform_soc_probe':
>> sound/soc/intel/skylake/skl-pcm.c:1372:23: error: passing argument 1 of 'skl_tplg_init' from incompatible pointer type [-Werror=incompatible-pointer-types]
ret = skl_tplg_init(component, ebus);
^~~~~~~~~
In file included from sound/soc/intel/skylake/skl-pcm.c:28:0:
sound/soc/intel/skylake/skl-topology.h:463:5: note: expected 'struct snd_soc_platform *' but argument is of type 'struct snd_soc_component *'
int skl_tplg_init(struct snd_soc_platform *platform,
^~~~~~~~~~~~~
cc1: some warnings being treated as errors
--
sound/soc/intel/skylake/skl-topology.c: In function 'skl_fill_sink_instance_id':
>> sound/soc/intel/skylake/skl-topology.c:833:45: error: 'struct skl_kpb_params' has no member named 'u'
struct skl_mod_inst_map *inst = kpb_params->u.map;
^~
sound/soc/intel/skylake/skl-topology.c: In function 'skl_tplg_find_moduleid_from_uuid':
sound/soc/intel/skylake/skl-topology.c:953:17: error: 'struct skl_kpb_params' has no member named 'u'
&uuid_params->u.map_uuid[i].mod_uuid);
^~
sound/soc/intel/skylake/skl-topology.c:959:10: error: 'struct skl_kpb_params' has no member named 'u'
params->u.map[i].mod_id = module_id;
^~
sound/soc/intel/skylake/skl-topology.c:960:10: error: 'struct skl_kpb_params' has no member named 'u'
params->u.map[i].inst_id =
^~
sound/soc/intel/skylake/skl-topology.c:961:16: error: 'struct skl_kpb_params' has no member named 'u'
uuid_params->u.map_uuid[i].inst_id;
^~
sound/soc/intel/skylake/skl-topology.c: At top level:
>> sound/soc/intel/skylake/skl-topology.c:3544:5: error: conflicting types for 'skl_tplg_init'
int skl_tplg_init(struct snd_soc_component *component, struct hdac_ext_bus *ebus)
^~~~~~~~~~~~~
In file included from sound/soc/intel/skylake/skl-topology.c:27:0:
sound/soc/intel/skylake/skl-topology.h:463:5: note: previous declaration of 'skl_tplg_init' was here
int skl_tplg_init(struct snd_soc_platform *platform,
^~~~~~~~~~~~~
vim +1351 sound/soc/intel/skylake/skl-pcm.c
b26199ea Jeeja KP 2017-03-24 1330
64cb1d0a Vinod Koul 2016-08-10 1331 static int skl_populate_modules(struct skl *skl)
64cb1d0a Vinod Koul 2016-08-10 1332 {
64cb1d0a Vinod Koul 2016-08-10 1333 struct skl_pipeline *p;
64cb1d0a Vinod Koul 2016-08-10 1334 struct skl_pipe_module *m;
64cb1d0a Vinod Koul 2016-08-10 1335 struct snd_soc_dapm_widget *w;
64cb1d0a Vinod Koul 2016-08-10 1336 struct skl_module_cfg *mconfig;
b26199ea Jeeja KP 2017-03-24 1337 int ret = 0;
64cb1d0a Vinod Koul 2016-08-10 1338
64cb1d0a Vinod Koul 2016-08-10 1339 list_for_each_entry(p, &skl->ppl_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1340 list_for_each_entry(m, &p->pipe->w_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1341 w = m->w;
64cb1d0a Vinod Koul 2016-08-10 1342 mconfig = w->priv;
64cb1d0a Vinod Koul 2016-08-10 1343
b26199ea Jeeja KP 2017-03-24 1344 ret = skl_get_module_info(skl, mconfig);
64cb1d0a Vinod Koul 2016-08-10 1345 if (ret < 0) {
64cb1d0a Vinod Koul 2016-08-10 1346 dev_err(skl->skl_sst->dev,
b26199ea Jeeja KP 2017-03-24 1347 "query module info failed\n");
b26199ea Jeeja KP 2017-03-24 1348 return ret;
64cb1d0a Vinod Koul 2016-08-10 1349 }
f7a9f772 Sriram Periyasamy 2018-01-27 1350
f7a9f772 Sriram Periyasamy 2018-01-27 @1351 skl_tplg_add_moduleid_in_bind_params(skl, w);
64cb1d0a Vinod Koul 2016-08-10 1352 }
64cb1d0a Vinod Koul 2016-08-10 1353 }
b26199ea Jeeja KP 2017-03-24 1354
64cb1d0a Vinod Koul 2016-08-10 1355 return ret;
64cb1d0a Vinod Koul 2016-08-10 1356 }
64cb1d0a Vinod Koul 2016-08-10 1357
56b03b4c Kuninori Morimoto 2018-01-29 1358 static int skl_platform_soc_probe(struct snd_soc_component *component)
b663a8c5 Jeeja KP 2015-10-07 1359 {
56b03b4c Kuninori Morimoto 2018-01-29 1360 struct hdac_ext_bus *ebus = dev_get_drvdata(component->dev);
fe3f4442 Dharageswari R 2016-06-03 1361 struct skl *skl = ebus_to_skl(ebus);
78cdbbda Vinod Koul 2016-07-26 1362 const struct skl_dsp_ops *ops;
fe3f4442 Dharageswari R 2016-06-03 1363 int ret;
b663a8c5 Jeeja KP 2015-10-07 1364
56b03b4c Kuninori Morimoto 2018-01-29 1365 pm_runtime_get_sync(component->dev);
ec8ae570 Vinod Koul 2016-08-04 1366 if ((ebus_to_hbus(ebus))->ppcap) {
56b03b4c Kuninori Morimoto 2018-01-29 1367 skl->component = component;
5cdf6c09 Vinod Koul 2017-06-30 1368
5cdf6c09 Vinod Koul 2017-06-30 1369 /* init debugfs */
5cdf6c09 Vinod Koul 2017-06-30 1370 skl->debugfs = skl_debugfs_init(skl);
5cdf6c09 Vinod Koul 2017-06-30 1371
56b03b4c Kuninori Morimoto 2018-01-29 @1372 ret = skl_tplg_init(component, ebus);
fe3f4442 Dharageswari R 2016-06-03 1373 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1374 dev_err(component->dev, "Failed to init topology!\n");
fe3f4442 Dharageswari R 2016-06-03 1375 return ret;
fe3f4442 Dharageswari R 2016-06-03 1376 }
78cdbbda Vinod Koul 2016-07-26 1377
78cdbbda Vinod Koul 2016-07-26 1378 /* load the firmwares, since all is set */
78cdbbda Vinod Koul 2016-07-26 1379 ops = skl_get_dsp_ops(skl->pci->device);
78cdbbda Vinod Koul 2016-07-26 1380 if (!ops)
78cdbbda Vinod Koul 2016-07-26 1381 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1382
78cdbbda Vinod Koul 2016-07-26 1383 if (skl->skl_sst->is_first_boot == false) {
56b03b4c Kuninori Morimoto 2018-01-29 1384 dev_err(component->dev, "DSP reports first boot done!!!\n");
78cdbbda Vinod Koul 2016-07-26 1385 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1386 }
78cdbbda Vinod Koul 2016-07-26 1387
fc9fdd61 Sanyog Kale 2018-03-13 1388 /*
fc9fdd61 Sanyog Kale 2018-03-13 1389 * Disable dynamic clock and power gating during firmware
fc9fdd61 Sanyog Kale 2018-03-13 1390 * and library download
fc9fdd61 Sanyog Kale 2018-03-13 1391 */
56b03b4c Kuninori Morimoto 2018-01-29 1392 skl->skl_sst->enable_miscbdcge(component->dev, false);
fc9fdd61 Sanyog Kale 2018-03-13 1393 skl->skl_sst->clock_power_gating(component->dev, false);
d5cc0a1f Pardha Saradhi K 2018-01-02 1394
56b03b4c Kuninori Morimoto 2018-01-29 1395 ret = ops->init_fw(component->dev, skl->skl_sst);
56b03b4c Kuninori Morimoto 2018-01-29 1396 skl->skl_sst->enable_miscbdcge(component->dev, true);
fc9fdd61 Sanyog Kale 2018-03-13 1397 skl->skl_sst->clock_power_gating(component->dev, true);
78cdbbda Vinod Koul 2016-07-26 1398 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1399 dev_err(component->dev, "Failed to boot first fw: %d\n", ret);
78cdbbda Vinod Koul 2016-07-26 1400 return ret;
78cdbbda Vinod Koul 2016-07-26 1401 }
64cb1d0a Vinod Koul 2016-08-10 1402 skl_populate_modules(skl);
a26a3f53 Pardha Saradhi K 2016-11-03 1403 skl->skl_sst->update_d0i3c = skl_update_d0i3c;
cb729d80 G Kranthi 2017-03-13 1404 skl_dsp_enable_notification(skl->skl_sst, false);
9452314d Pradeep Tewani 2017-12-06 1405
9452314d Pradeep Tewani 2017-12-06 1406 if (skl->cfg.astate_cfg != NULL) {
9452314d Pradeep Tewani 2017-12-06 1407 skl_dsp_set_astate_cfg(skl->skl_sst,
9452314d Pradeep Tewani 2017-12-06 1408 skl->cfg.astate_cfg->count,
9452314d Pradeep Tewani 2017-12-06 1409 skl->cfg.astate_cfg);
9452314d Pradeep Tewani 2017-12-06 1410 }
fe3f4442 Dharageswari R 2016-06-03 1411 }
56b03b4c Kuninori Morimoto 2018-01-29 1412 pm_runtime_mark_last_busy(component->dev);
56b03b4c Kuninori Morimoto 2018-01-29 1413 pm_runtime_put_autosuspend(component->dev);
b663a8c5 Jeeja KP 2015-10-07 1414
b663a8c5 Jeeja KP 2015-10-07 1415 return 0;
b663a8c5 Jeeja KP 2015-10-07 1416 }
56b03b4c Kuninori Morimoto 2018-01-29 1417
:::::: The code at line 1351 was first introduced by commit
:::::: f7a9f77256e7fbd6150651bfab44f60c39f0b7a2 ASoC: Intel: Skylake: Find module id from UUID for bind params
:::::: TO: Sriram Periyasamy <sriramx.periyasamy(a)intel.com>
:::::: CC: Mark Brown <broonie(a)kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
1
0
[alsa-devel] [PATCH v2 3/3] ASoC: amd: enabling bt i2s config after acp reset
by Vijendar Mukunda 18 Apr '18
by Vijendar Mukunda 18 Apr '18
18 Apr '18
On ST/CZ based platforms, for specific platform bt uart
mux to be defined for bt i2s.
By default, these pins will be used for uart.
After acp reset , it requires to reprogram bt i2s config
mux pins to enable bt i2s instance.
added bt i2s enablement sequence during acp init.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda(a)amd.com>
Signed-off-by: Akshu Agrawal <akshu.agrawal(a)amd.com>
---
v1->v2: fixed kbuild errors
sound/soc/amd/acp-da7219-max98357a.c | 2 ++
sound/soc/amd/acp-pcm-dma.c | 9 +++++++++
sound/soc/amd/acp.h | 1 +
3 files changed, 12 insertions(+)
diff --git a/sound/soc/amd/acp-da7219-max98357a.c b/sound/soc/amd/acp-da7219-max98357a.c
index b205c78..9ff2138 100644
--- a/sound/soc/amd/acp-da7219-max98357a.c
+++ b/sound/soc/amd/acp-da7219-max98357a.c
@@ -44,6 +44,7 @@
static struct snd_soc_jack cz_jack;
struct clk *da7219_dai_clk;
+extern int bt_pad_enable;
static int cz_da7219_init(struct snd_soc_pcm_runtime *rtd)
{
@@ -251,6 +252,7 @@ static int cz_probe(struct platform_device *pdev)
cz_card.name, ret);
return ret;
}
+ bt_pad_enable = device_property_read_bool(&pdev->dev, "bt-pad-enable");
return 0;
}
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
index 7c392fe..b52c660 100644
--- a/sound/soc/amd/acp-pcm-dma.c
+++ b/sound/soc/amd/acp-pcm-dma.c
@@ -46,6 +46,8 @@
#define DRV_NAME "acp_audio_dma"
+bool bt_pad_enable = false;
+EXPORT_SYMBOL(bt_pad_enable);
static const struct snd_pcm_hardware acp_pcm_hardware_playback = {
.info = SNDRV_PCM_INFO_INTERLEAVED |
@@ -525,6 +527,13 @@ static int acp_init(void __iomem *acp_mmio, u32 asic_type)
val &= ~ACP_SOFT_RESET__SoftResetAud_MASK;
acp_reg_write(val, acp_mmio, mmACP_SOFT_RESET);
+ /* For BT instance change pins from UART to BT */
+ if (bt_pad_enable) {
+ val = acp_reg_read(acp_mmio, mmACP_BT_UART_PAD_SEL);
+ val |= ACP_BT_UART_PAD_SELECT_MASK;
+ acp_reg_write(val, acp_mmio, mmACP_BT_UART_PAD_SEL);
+ }
+
/* initiailize Onion control DAGB register */
acp_reg_write(ACP_ONION_CNTL_DEFAULT, acp_mmio,
mmACP_AXI2DAGB_ONION_CNTL);
diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h
index 95c39a3..520a08f 100644
--- a/sound/soc/amd/acp.h
+++ b/sound/soc/amd/acp.h
@@ -110,6 +110,7 @@
#define ACP_I2S_MIC_16BIT_RESOLUTION_EN 0x01
#define ACP_I2S_SP_16BIT_RESOLUTION_EN 0x02
#define ACP_I2S_BT_16BIT_RESOLUTION_EN 0x04
+#define ACP_BT_UART_PAD_SELECT_MASK 0x1
enum acp_dma_priority_level {
/* 0x0 Specifies the DMA channel is given normal priority */
--
2.7.4
1
0
[alsa-devel] [PATCH 1/4] ASoC: dwc: I2S Controller instance param added
by Vijendar Mukunda 18 Apr '18
by Vijendar Mukunda 18 Apr '18
18 Apr '18
When multiple I2S controller instances created,
i2s_instance parameter refers to i2s controller instance value.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda(a)amd.com>
Reviewed-by: Alex Deucher <alexander.deucher(a)amd.com>
---
include/sound/designware_i2s.h | 6 ++++++
sound/soc/dwc/dwc-i2s.c | 1 +
sound/soc/dwc/local.h | 1 +
3 files changed, 8 insertions(+)
diff --git a/include/sound/designware_i2s.h b/include/sound/designware_i2s.h
index 830f5ca..8113759 100644
--- a/include/sound/designware_i2s.h
+++ b/include/sound/designware_i2s.h
@@ -44,6 +44,10 @@ struct i2s_platform_data {
int channel;
u32 snd_fmts;
u32 snd_rates;
+ /* i2s_instance parameter returns I2S controller instance value
+ * when multiple I2S controllers instantiated
+ */
+ u32 i2s_instance;
#define DW_I2S_QUIRK_COMP_REG_OFFSET (1 << 0)
#define DW_I2S_QUIRK_COMP_PARAM1 (1 << 1)
@@ -74,5 +78,7 @@ struct i2s_dma_data {
#define FOUR_CHANNEL_SUPPORT 4 /* up to 3.1 */
#define SIX_CHANNEL_SUPPORT 6 /* up to 5.1 */
#define EIGHT_CHANNEL_SUPPORT 8 /* up to 7.1 */
+#define I2S_SP_INSTANCE 1
+#define I2S_BT_INSTANCE 2
#endif /* __SOUND_DESIGNWARE_I2S_H */
diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c
index 65112b9..58f81a4 100644
--- a/sound/soc/dwc/dwc-i2s.c
+++ b/sound/soc/dwc/dwc-i2s.c
@@ -553,6 +553,7 @@ static int dw_configure_dai_by_pd(struct dw_i2s_dev *dev,
if (dev->quirks & DW_I2S_QUIRK_16BIT_IDX_OVERRIDE)
idx = 1;
+ dev->i2s_instance = pdata->i2s_instance;
/* Set DMA slaves info */
dev->play_dma_data.pd.data = pdata->play_dma_data;
dev->capture_dma_data.pd.data = pdata->capture_dma_data;
diff --git a/sound/soc/dwc/local.h b/sound/soc/dwc/local.h
index 91dc70a..e89e464 100644
--- a/sound/soc/dwc/local.h
+++ b/sound/soc/dwc/local.h
@@ -98,6 +98,7 @@ struct dw_i2s_dev {
u32 ccr;
u32 xfer_resolution;
u32 fifo_th;
+ u32 i2s_instance;
/* data related to DMA transfers b/w i2s and DMAC */
union dw_i2s_snd_dma_data play_dma_data;
--
2.7.4
3
2
[alsa-devel] [asoc:for-4.18 48/50] sound/soc/intel/skylake/skl-pcm.c:1372:37: sparse: incorrect type in argument 1 (different base types)
by kbuild test robot 17 Apr '18
by kbuild test robot 17 Apr '18
17 Apr '18
tree: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-4.18
head: 5db6aab6f36f7560dc95f7ca340d5632b7a3be6a
commit: 81e9b0a078894841a50a8dd666fd64ca452a2a50 [48/50] ASoC: topology: Give more data to clients via callbacks
reproduce:
# apt-get install sparse
git checkout 81e9b0a078894841a50a8dd666fd64ca452a2a50
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
sound/soc/intel/skylake/skl-pcm.c:159:43: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned int [unsigned] format @@ got restricted snd_unsigned int [unsigned] format @@
sound/soc/intel/skylake/skl-pcm.c:159:43: expected unsigned int [unsigned] format
sound/soc/intel/skylake/skl-pcm.c:159:43: got restricted snd_pcm_format_t [usertype] format
sound/soc/intel/skylake/skl-pcm.c:195:47: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned int [unsigned] format @@ got restricted snd_unsigned int [unsigned] format @@
sound/soc/intel/skylake/skl-pcm.c:195:47: expected unsigned int [unsigned] format
sound/soc/intel/skylake/skl-pcm.c:195:47: got restricted snd_pcm_format_t [usertype] format
sound/soc/intel/skylake/skl-pcm.c:1351:25: sparse: undefined identifier 'skl_tplg_add_moduleid_in_bind_params'
>> sound/soc/intel/skylake/skl-pcm.c:1372:37: sparse: incorrect type in argument 1 (different base types) @@ expected struct snd_soc_platform *platform @@ got sstruct snd_soc_platform *platform @@
sound/soc/intel/skylake/skl-pcm.c:1372:37: expected struct snd_soc_platform *platform
sound/soc/intel/skylake/skl-pcm.c:1372:37: got struct snd_soc_component *component
>> sound/soc/intel/skylake/skl-pcm.c:1351:61: sparse: call with no type!
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_populate_modules':
sound/soc/intel/skylake/skl-pcm.c:1351:4: error: implicit declaration of function 'skl_tplg_add_moduleid_in_bind_params'; did you mean 'skl_tplg_update_pipe_params'? [-Werror=implicit-function-declaration]
skl_tplg_add_moduleid_in_bind_params(skl, w);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skl_tplg_update_pipe_params
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_platform_soc_probe':
sound/soc/intel/skylake/skl-pcm.c:1372:23: error: passing argument 1 of 'skl_tplg_init' from incompatible pointer type [-Werror=incompatible-pointer-types]
ret = skl_tplg_init(component, ebus);
^~~~~~~~~
In file included from sound/soc/intel/skylake/skl-pcm.c:28:0:
sound/soc/intel/skylake/skl-topology.h:463:5: note: expected 'struct snd_soc_platform *' but argument is of type 'struct snd_soc_component *'
int skl_tplg_init(struct snd_soc_platform *platform,
^~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +1372 sound/soc/intel/skylake/skl-pcm.c
b26199ea Jeeja KP 2017-03-24 1330
64cb1d0a Vinod Koul 2016-08-10 1331 static int skl_populate_modules(struct skl *skl)
64cb1d0a Vinod Koul 2016-08-10 1332 {
64cb1d0a Vinod Koul 2016-08-10 1333 struct skl_pipeline *p;
64cb1d0a Vinod Koul 2016-08-10 1334 struct skl_pipe_module *m;
64cb1d0a Vinod Koul 2016-08-10 1335 struct snd_soc_dapm_widget *w;
64cb1d0a Vinod Koul 2016-08-10 1336 struct skl_module_cfg *mconfig;
b26199ea Jeeja KP 2017-03-24 1337 int ret = 0;
64cb1d0a Vinod Koul 2016-08-10 1338
64cb1d0a Vinod Koul 2016-08-10 1339 list_for_each_entry(p, &skl->ppl_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1340 list_for_each_entry(m, &p->pipe->w_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1341 w = m->w;
64cb1d0a Vinod Koul 2016-08-10 1342 mconfig = w->priv;
64cb1d0a Vinod Koul 2016-08-10 1343
b26199ea Jeeja KP 2017-03-24 1344 ret = skl_get_module_info(skl, mconfig);
64cb1d0a Vinod Koul 2016-08-10 1345 if (ret < 0) {
64cb1d0a Vinod Koul 2016-08-10 1346 dev_err(skl->skl_sst->dev,
b26199ea Jeeja KP 2017-03-24 1347 "query module info failed\n");
b26199ea Jeeja KP 2017-03-24 1348 return ret;
64cb1d0a Vinod Koul 2016-08-10 1349 }
f7a9f772 Sriram Periyasamy 2018-01-27 1350
f7a9f772 Sriram Periyasamy 2018-01-27 @1351 skl_tplg_add_moduleid_in_bind_params(skl, w);
64cb1d0a Vinod Koul 2016-08-10 1352 }
64cb1d0a Vinod Koul 2016-08-10 1353 }
b26199ea Jeeja KP 2017-03-24 1354
64cb1d0a Vinod Koul 2016-08-10 1355 return ret;
64cb1d0a Vinod Koul 2016-08-10 1356 }
64cb1d0a Vinod Koul 2016-08-10 1357
56b03b4c Kuninori Morimoto 2018-01-29 1358 static int skl_platform_soc_probe(struct snd_soc_component *component)
b663a8c5 Jeeja KP 2015-10-07 1359 {
56b03b4c Kuninori Morimoto 2018-01-29 1360 struct hdac_ext_bus *ebus = dev_get_drvdata(component->dev);
fe3f4442 Dharageswari R 2016-06-03 1361 struct skl *skl = ebus_to_skl(ebus);
78cdbbda Vinod Koul 2016-07-26 1362 const struct skl_dsp_ops *ops;
fe3f4442 Dharageswari R 2016-06-03 1363 int ret;
b663a8c5 Jeeja KP 2015-10-07 1364
56b03b4c Kuninori Morimoto 2018-01-29 1365 pm_runtime_get_sync(component->dev);
ec8ae570 Vinod Koul 2016-08-04 1366 if ((ebus_to_hbus(ebus))->ppcap) {
56b03b4c Kuninori Morimoto 2018-01-29 1367 skl->component = component;
5cdf6c09 Vinod Koul 2017-06-30 1368
5cdf6c09 Vinod Koul 2017-06-30 1369 /* init debugfs */
5cdf6c09 Vinod Koul 2017-06-30 1370 skl->debugfs = skl_debugfs_init(skl);
5cdf6c09 Vinod Koul 2017-06-30 1371
56b03b4c Kuninori Morimoto 2018-01-29 @1372 ret = skl_tplg_init(component, ebus);
fe3f4442 Dharageswari R 2016-06-03 1373 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1374 dev_err(component->dev, "Failed to init topology!\n");
fe3f4442 Dharageswari R 2016-06-03 1375 return ret;
fe3f4442 Dharageswari R 2016-06-03 1376 }
78cdbbda Vinod Koul 2016-07-26 1377
78cdbbda Vinod Koul 2016-07-26 1378 /* load the firmwares, since all is set */
78cdbbda Vinod Koul 2016-07-26 1379 ops = skl_get_dsp_ops(skl->pci->device);
78cdbbda Vinod Koul 2016-07-26 1380 if (!ops)
78cdbbda Vinod Koul 2016-07-26 1381 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1382
78cdbbda Vinod Koul 2016-07-26 1383 if (skl->skl_sst->is_first_boot == false) {
56b03b4c Kuninori Morimoto 2018-01-29 1384 dev_err(component->dev, "DSP reports first boot done!!!\n");
78cdbbda Vinod Koul 2016-07-26 1385 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1386 }
78cdbbda Vinod Koul 2016-07-26 1387
fc9fdd61 Sanyog Kale 2018-03-13 1388 /*
fc9fdd61 Sanyog Kale 2018-03-13 1389 * Disable dynamic clock and power gating during firmware
fc9fdd61 Sanyog Kale 2018-03-13 1390 * and library download
fc9fdd61 Sanyog Kale 2018-03-13 1391 */
56b03b4c Kuninori Morimoto 2018-01-29 1392 skl->skl_sst->enable_miscbdcge(component->dev, false);
fc9fdd61 Sanyog Kale 2018-03-13 1393 skl->skl_sst->clock_power_gating(component->dev, false);
d5cc0a1f Pardha Saradhi K 2018-01-02 1394
56b03b4c Kuninori Morimoto 2018-01-29 1395 ret = ops->init_fw(component->dev, skl->skl_sst);
56b03b4c Kuninori Morimoto 2018-01-29 1396 skl->skl_sst->enable_miscbdcge(component->dev, true);
fc9fdd61 Sanyog Kale 2018-03-13 1397 skl->skl_sst->clock_power_gating(component->dev, true);
78cdbbda Vinod Koul 2016-07-26 1398 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1399 dev_err(component->dev, "Failed to boot first fw: %d\n", ret);
78cdbbda Vinod Koul 2016-07-26 1400 return ret;
78cdbbda Vinod Koul 2016-07-26 1401 }
64cb1d0a Vinod Koul 2016-08-10 1402 skl_populate_modules(skl);
a26a3f53 Pardha Saradhi K 2016-11-03 1403 skl->skl_sst->update_d0i3c = skl_update_d0i3c;
cb729d80 G Kranthi 2017-03-13 1404 skl_dsp_enable_notification(skl->skl_sst, false);
9452314d Pradeep Tewani 2017-12-06 1405
9452314d Pradeep Tewani 2017-12-06 1406 if (skl->cfg.astate_cfg != NULL) {
9452314d Pradeep Tewani 2017-12-06 1407 skl_dsp_set_astate_cfg(skl->skl_sst,
9452314d Pradeep Tewani 2017-12-06 1408 skl->cfg.astate_cfg->count,
9452314d Pradeep Tewani 2017-12-06 1409 skl->cfg.astate_cfg);
9452314d Pradeep Tewani 2017-12-06 1410 }
fe3f4442 Dharageswari R 2016-06-03 1411 }
56b03b4c Kuninori Morimoto 2018-01-29 1412 pm_runtime_mark_last_busy(component->dev);
56b03b4c Kuninori Morimoto 2018-01-29 1413 pm_runtime_put_autosuspend(component->dev);
b663a8c5 Jeeja KP 2015-10-07 1414
b663a8c5 Jeeja KP 2015-10-07 1415 return 0;
b663a8c5 Jeeja KP 2015-10-07 1416 }
56b03b4c Kuninori Morimoto 2018-01-29 1417
:::::: The code at line 1372 was first introduced by commit
:::::: 56b03b4c4f5e8e1a44328b2df75bfb31fc4c3609 ASoC: intel: skylake: replace platform to component
:::::: TO: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
:::::: CC: Mark Brown <broonie(a)kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
1
0
Re: [alsa-devel] [PATCH v2 00/21] Allow compile-testing NO_DMA (drivers)
by Geert Uytterhoeven 17 Apr '18
by Geert Uytterhoeven 17 Apr '18
17 Apr '18
Hi Rob,
On Thu, Apr 5, 2018 at 2:32 AM, Rob Herring <robherring2(a)gmail.com> wrote:
> On Fri, Mar 16, 2018 at 8:51 AM, Geert Uytterhoeven
> <geert(a)linux-m68k.org> wrote:
>> If NO_DMA=y, get_dma_ops() returns a reference to the non-existing
>> symbol bad_dma_ops, thus causing a link failure if it is ever used.
>>
>> The intention of this is twofold:
>> 1. To catch users of the DMA API on systems that do no support the DMA
>> mapping API,
>> 2. To avoid building drivers that cannot work on such systems anyway.
>>
>> However, the disadvantage is that we have to keep on adding dependencies
>> on HAS_DMA all over the place.
>>
>> Thanks to the COMPILE_TEST symbol, lots of drivers now depend on one or
>> more platform dependencies (that imply HAS_DMA) || COMPILE_TEST, thus
>> already covering intention #2. Having to add an explicit dependency on
>> HAS_DMA here is cumbersome, and hinders compile-testing.
>
> The same can be said for CONFIG_IOMEM and CONFIG_OF. Any plans to
> remove those too? CONFIG_IOMEM is mostly just a !CONFIG_UM option.
Perhaps, if time permits...
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert(a)linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
1
0
[alsa-devel] [asoc:for-4.18 48/50] sound/soc/intel/skylake/skl-pcm.c:1351:4: error: implicit declaration of function 'skl_tplg_add_moduleid_in_bind_params'; did you mean 'skl_tplg_update_pipe_params'?
by kbuild test robot 17 Apr '18
by kbuild test robot 17 Apr '18
17 Apr '18
tree: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-4.18
head: 5db6aab6f36f7560dc95f7ca340d5632b7a3be6a
commit: 81e9b0a078894841a50a8dd666fd64ca452a2a50 [48/50] ASoC: topology: Give more data to clients via callbacks
config: i386-randconfig-x014-201815 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
git checkout 81e9b0a078894841a50a8dd666fd64ca452a2a50
# save the attached .config to linux build tree
make ARCH=i386
All errors (new ones prefixed by >>):
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_populate_modules':
>> sound/soc/intel/skylake/skl-pcm.c:1351:4: error: implicit declaration of function 'skl_tplg_add_moduleid_in_bind_params'; did you mean 'skl_tplg_update_pipe_params'? [-Werror=implicit-function-declaration]
skl_tplg_add_moduleid_in_bind_params(skl, w);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
skl_tplg_update_pipe_params
sound/soc/intel/skylake/skl-pcm.c: In function 'skl_platform_soc_probe':
>> sound/soc/intel/skylake/skl-pcm.c:1372:23: error: passing argument 1 of 'skl_tplg_init' from incompatible pointer type [-Werror=incompatible-pointer-types]
ret = skl_tplg_init(component, ebus);
^~~~~~~~~
In file included from sound/soc/intel/skylake/skl-pcm.c:28:0:
sound/soc/intel/skylake/skl-topology.h:463:5: note: expected 'struct snd_soc_platform *' but argument is of type 'struct snd_soc_component *'
int skl_tplg_init(struct snd_soc_platform *platform,
^~~~~~~~~~~~~
Cyclomatic Complexity 5 include/linux/compiler.h:__read_once_size
Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
Cyclomatic Complexity 4 include/linux/string.h:memcpy
Cyclomatic Complexity 4 include/linux/string.h:memcmp
Cyclomatic Complexity 3 include/linux/string.h:kmemdup
Cyclomatic Complexity 1 include/linux/uuid.h:uuid_le_cmp
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:__ffs
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls
Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u32
Cyclomatic Complexity 2 arch/x86/include/asm/div64.h:div_u64_rem
Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
Cyclomatic Complexity 1 include/linux/list.h:__list_del
Cyclomatic Complexity 1 include/linux/list.h:list_empty
Cyclomatic Complexity 1 include/asm-generic/getorder.h:__get_order
Cyclomatic Complexity 1 include/linux/math64.h:div_u64
Cyclomatic Complexity 1 include/linux/spinlock.h:spinlock_check
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_unlock_irqrestore
Cyclomatic Complexity 1 include/linux/time32.h:timespec64_to_timespec
Cyclomatic Complexity 1 include/linux/device.h:dev_get_drvdata
Cyclomatic Complexity 1 arch/x86/include/asm/io.h:readl
Cyclomatic Complexity 67 include/linux/slab.h:kmalloc_large
Cyclomatic Complexity 3 include/linux/slab.h:kmalloc
Cyclomatic Complexity 1 include/linux/slab.h:kzalloc
Cyclomatic Complexity 1 include/linux/pm_runtime.h:pm_runtime_mark_last_busy
Cyclomatic Complexity 1 include/sound/pcm.h:bytes_to_frames
Cyclomatic Complexity 1 include/sound/pcm.h:snd_pcm_trigger_done
Cyclomatic Complexity 1 include/sound/pcm.h:hw_param_mask_c
Cyclomatic Complexity 1 include/sound/pcm.h:hw_param_interval_c
Cyclomatic Complexity 1 include/sound/pcm.h:params_channels
Cyclomatic Complexity 1 include/sound/pcm.h:params_rate
Cyclomatic Complexity 1 include/sound/pcm.h:params_buffer_bytes
Cyclomatic Complexity 3 include/sound/pcm_params.h:snd_mask_min
Cyclomatic Complexity 1 include/sound/pcm_params.h:params_format
Cyclomatic Complexity 2 include/sound/soc-dai.h:snd_soc_dai_get_dma_data
Cyclomatic Complexity 2 include/sound/soc-dai.h:snd_soc_dai_set_dma_data
Cyclomatic Complexity 1 include/sound/hda_register.h:snd_hdac_stream_get_pos_lpib
Cyclomatic Complexity 1 include/sound/hda_register.h:snd_hdac_stream_get_pos_posbuf
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:get_hdac_ext_stream
Cyclomatic Complexity 2 sound/soc/intel/skylake/skl-pcm.c:skl_get_host_stream_type
Cyclomatic Complexity 4 sound/soc/intel/skylake/skl-pcm.c:skl_adjust_codec_delay
Cyclomatic Complexity 2 sound/soc/intel/skylake/skl-topology.h:get_skl_ctx
Cyclomatic Complexity 2 sound/soc/intel/skylake/skl-pcm.c:get_bus_ctx
Cyclomatic Complexity 5 sound/soc/intel/skylake/skl-pcm.c:skl_decoupled_trigger
Cyclomatic Complexity 11 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_trigger
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_substream_free_pages
Cyclomatic Complexity 4 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_hw_free
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_substream_alloc_pages
Cyclomatic Complexity 7 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_hw_params
Cyclomatic Complexity 7 sound/soc/intel/skylake/skl-pcm.c:skl_set_suspend_active
Cyclomatic Complexity 6 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_close
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_set_pcm_constrains
Cyclomatic Complexity 7 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_open
Cyclomatic Complexity 1 include/linux/timekeeping32.h:ktime_get_ts
Cyclomatic Complexity 1 include/linux/timekeeping32.h:getrawmonotonic
Cyclomatic Complexity 1 include/linux/timekeeping32.h:getnstimeofday
Cyclomatic Complexity 3 include/sound/pcm.h:snd_pcm_gettime
Cyclomatic Complexity 4 sound/soc/intel/skylake/skl-pcm.c:skl_get_time_info
Cyclomatic Complexity 3 sound/soc/intel/skylake/skl-pcm.c:skl_platform_pcm_pointer
Cyclomatic Complexity 15 sound/soc/intel/skylake/skl-pcm.c:skl_coupled_trigger
Cyclomatic Complexity 2 sound/soc/intel/skylake/skl-pcm.c:skl_platform_pcm_trigger
Cyclomatic Complexity 2 sound/soc/intel/skylake/skl-pcm.c:skl_platform_open
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_free
Cyclomatic Complexity 6 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_new
Cyclomatic Complexity 1 include/linux/pm_runtime.h:pm_runtime_get_sync
Cyclomatic Complexity 19 sound/soc/intel/skylake/skl-pcm.c:skl_get_module_info
Cyclomatic Complexity 8 sound/soc/intel/skylake/skl-pcm.c:skl_populate_modules
Cyclomatic Complexity 1 include/linux/pm_runtime.h:pm_runtime_put_autosuspend
Cyclomatic Complexity 8 sound/soc/intel/skylake/skl-pcm.c:skl_platform_soc_probe
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_be_hw_params
Cyclomatic Complexity 5 sound/soc/intel/skylake/skl-pcm.c:skl_link_pcm_trigger
Cyclomatic Complexity 4 sound/soc/intel/skylake/skl-pcm.c:skl_link_pcm_prepare
Cyclomatic Complexity 3 sound/soc/intel/skylake/skl-pcm.c:skl_link_hw_free
Cyclomatic Complexity 4 sound/soc/intel/skylake/skl-pcm.c:skl_link_hw_params
Cyclomatic Complexity 2 include/linux/list.h:__list_del_entry
Cyclomatic Complexity 1 include/linux/list.h:list_del
Cyclomatic Complexity 6 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_host_dma_prepare
Cyclomatic Complexity 8 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_prepare
Cyclomatic Complexity 8 sound/soc/intel/skylake/skl-pcm.c:skl_pcm_link_dma_prepare
Cyclomatic Complexity 1 sound/soc/intel/skylake/skl-pcm.c:skl_dai_load
Cyclomatic Complexity 6 sound/soc/intel/skylake/skl-pcm.c:skl_platform_register
Cyclomatic Complexity 7 sound/soc/intel/skylake/skl-pcm.c:skl_platform_unregister
cc1: some warnings being treated as errors
--
sound/soc/intel/skylake/skl-topology.c: In function 'skl_fill_sink_instance_id':
>> sound/soc/intel/skylake/skl-topology.c:833:45: error: 'struct skl_kpb_params' has no member named 'u'
struct skl_mod_inst_map *inst = kpb_params->u.map;
^~
sound/soc/intel/skylake/skl-topology.c: In function 'skl_tplg_find_moduleid_from_uuid':
sound/soc/intel/skylake/skl-topology.c:953:17: error: 'struct skl_kpb_params' has no member named 'u'
&uuid_params->u.map_uuid[i].mod_uuid);
^~
sound/soc/intel/skylake/skl-topology.c:959:10: error: 'struct skl_kpb_params' has no member named 'u'
params->u.map[i].mod_id = module_id;
^~
sound/soc/intel/skylake/skl-topology.c:960:10: error: 'struct skl_kpb_params' has no member named 'u'
params->u.map[i].inst_id =
^~
sound/soc/intel/skylake/skl-topology.c:961:16: error: 'struct skl_kpb_params' has no member named 'u'
uuid_params->u.map_uuid[i].inst_id;
^~
sound/soc/intel/skylake/skl-topology.c: At top level:
>> sound/soc/intel/skylake/skl-topology.c:3544:5: error: conflicting types for 'skl_tplg_init'
int skl_tplg_init(struct snd_soc_component *component, struct hdac_ext_bus *ebus)
^~~~~~~~~~~~~
In file included from sound/soc/intel/skylake/skl-topology.c:27:0:
sound/soc/intel/skylake/skl-topology.h:463:5: note: previous declaration of 'skl_tplg_init' was here
int skl_tplg_init(struct snd_soc_platform *platform,
^~~~~~~~~~~~~
vim +1351 sound/soc/intel/skylake/skl-pcm.c
b26199ea Jeeja KP 2017-03-24 1330
64cb1d0a Vinod Koul 2016-08-10 1331 static int skl_populate_modules(struct skl *skl)
64cb1d0a Vinod Koul 2016-08-10 1332 {
64cb1d0a Vinod Koul 2016-08-10 1333 struct skl_pipeline *p;
64cb1d0a Vinod Koul 2016-08-10 1334 struct skl_pipe_module *m;
64cb1d0a Vinod Koul 2016-08-10 1335 struct snd_soc_dapm_widget *w;
64cb1d0a Vinod Koul 2016-08-10 1336 struct skl_module_cfg *mconfig;
b26199ea Jeeja KP 2017-03-24 1337 int ret = 0;
64cb1d0a Vinod Koul 2016-08-10 1338
64cb1d0a Vinod Koul 2016-08-10 1339 list_for_each_entry(p, &skl->ppl_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1340 list_for_each_entry(m, &p->pipe->w_list, node) {
64cb1d0a Vinod Koul 2016-08-10 1341 w = m->w;
64cb1d0a Vinod Koul 2016-08-10 1342 mconfig = w->priv;
64cb1d0a Vinod Koul 2016-08-10 1343
b26199ea Jeeja KP 2017-03-24 1344 ret = skl_get_module_info(skl, mconfig);
64cb1d0a Vinod Koul 2016-08-10 1345 if (ret < 0) {
64cb1d0a Vinod Koul 2016-08-10 1346 dev_err(skl->skl_sst->dev,
b26199ea Jeeja KP 2017-03-24 1347 "query module info failed\n");
b26199ea Jeeja KP 2017-03-24 1348 return ret;
64cb1d0a Vinod Koul 2016-08-10 1349 }
f7a9f772 Sriram Periyasamy 2018-01-27 1350
f7a9f772 Sriram Periyasamy 2018-01-27 @1351 skl_tplg_add_moduleid_in_bind_params(skl, w);
64cb1d0a Vinod Koul 2016-08-10 1352 }
64cb1d0a Vinod Koul 2016-08-10 1353 }
b26199ea Jeeja KP 2017-03-24 1354
64cb1d0a Vinod Koul 2016-08-10 1355 return ret;
64cb1d0a Vinod Koul 2016-08-10 1356 }
64cb1d0a Vinod Koul 2016-08-10 1357
56b03b4c Kuninori Morimoto 2018-01-29 1358 static int skl_platform_soc_probe(struct snd_soc_component *component)
b663a8c5 Jeeja KP 2015-10-07 1359 {
56b03b4c Kuninori Morimoto 2018-01-29 1360 struct hdac_ext_bus *ebus = dev_get_drvdata(component->dev);
fe3f4442 Dharageswari R 2016-06-03 1361 struct skl *skl = ebus_to_skl(ebus);
78cdbbda Vinod Koul 2016-07-26 1362 const struct skl_dsp_ops *ops;
fe3f4442 Dharageswari R 2016-06-03 1363 int ret;
b663a8c5 Jeeja KP 2015-10-07 1364
56b03b4c Kuninori Morimoto 2018-01-29 1365 pm_runtime_get_sync(component->dev);
ec8ae570 Vinod Koul 2016-08-04 1366 if ((ebus_to_hbus(ebus))->ppcap) {
56b03b4c Kuninori Morimoto 2018-01-29 1367 skl->component = component;
5cdf6c09 Vinod Koul 2017-06-30 1368
5cdf6c09 Vinod Koul 2017-06-30 1369 /* init debugfs */
5cdf6c09 Vinod Koul 2017-06-30 1370 skl->debugfs = skl_debugfs_init(skl);
5cdf6c09 Vinod Koul 2017-06-30 1371
56b03b4c Kuninori Morimoto 2018-01-29 @1372 ret = skl_tplg_init(component, ebus);
fe3f4442 Dharageswari R 2016-06-03 1373 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1374 dev_err(component->dev, "Failed to init topology!\n");
fe3f4442 Dharageswari R 2016-06-03 1375 return ret;
fe3f4442 Dharageswari R 2016-06-03 1376 }
78cdbbda Vinod Koul 2016-07-26 1377
78cdbbda Vinod Koul 2016-07-26 1378 /* load the firmwares, since all is set */
78cdbbda Vinod Koul 2016-07-26 1379 ops = skl_get_dsp_ops(skl->pci->device);
78cdbbda Vinod Koul 2016-07-26 1380 if (!ops)
78cdbbda Vinod Koul 2016-07-26 1381 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1382
78cdbbda Vinod Koul 2016-07-26 1383 if (skl->skl_sst->is_first_boot == false) {
56b03b4c Kuninori Morimoto 2018-01-29 1384 dev_err(component->dev, "DSP reports first boot done!!!\n");
78cdbbda Vinod Koul 2016-07-26 1385 return -EIO;
78cdbbda Vinod Koul 2016-07-26 1386 }
78cdbbda Vinod Koul 2016-07-26 1387
fc9fdd61 Sanyog Kale 2018-03-13 1388 /*
fc9fdd61 Sanyog Kale 2018-03-13 1389 * Disable dynamic clock and power gating during firmware
fc9fdd61 Sanyog Kale 2018-03-13 1390 * and library download
fc9fdd61 Sanyog Kale 2018-03-13 1391 */
56b03b4c Kuninori Morimoto 2018-01-29 1392 skl->skl_sst->enable_miscbdcge(component->dev, false);
fc9fdd61 Sanyog Kale 2018-03-13 1393 skl->skl_sst->clock_power_gating(component->dev, false);
d5cc0a1f Pardha Saradhi K 2018-01-02 1394
56b03b4c Kuninori Morimoto 2018-01-29 1395 ret = ops->init_fw(component->dev, skl->skl_sst);
56b03b4c Kuninori Morimoto 2018-01-29 1396 skl->skl_sst->enable_miscbdcge(component->dev, true);
fc9fdd61 Sanyog Kale 2018-03-13 1397 skl->skl_sst->clock_power_gating(component->dev, true);
78cdbbda Vinod Koul 2016-07-26 1398 if (ret < 0) {
56b03b4c Kuninori Morimoto 2018-01-29 1399 dev_err(component->dev, "Failed to boot first fw: %d\n", ret);
78cdbbda Vinod Koul 2016-07-26 1400 return ret;
78cdbbda Vinod Koul 2016-07-26 1401 }
64cb1d0a Vinod Koul 2016-08-10 1402 skl_populate_modules(skl);
a26a3f53 Pardha Saradhi K 2016-11-03 1403 skl->skl_sst->update_d0i3c = skl_update_d0i3c;
cb729d80 G Kranthi 2017-03-13 1404 skl_dsp_enable_notification(skl->skl_sst, false);
9452314d Pradeep Tewani 2017-12-06 1405
9452314d Pradeep Tewani 2017-12-06 1406 if (skl->cfg.astate_cfg != NULL) {
9452314d Pradeep Tewani 2017-12-06 1407 skl_dsp_set_astate_cfg(skl->skl_sst,
9452314d Pradeep Tewani 2017-12-06 1408 skl->cfg.astate_cfg->count,
9452314d Pradeep Tewani 2017-12-06 1409 skl->cfg.astate_cfg);
9452314d Pradeep Tewani 2017-12-06 1410 }
fe3f4442 Dharageswari R 2016-06-03 1411 }
56b03b4c Kuninori Morimoto 2018-01-29 1412 pm_runtime_mark_last_busy(component->dev);
56b03b4c Kuninori Morimoto 2018-01-29 1413 pm_runtime_put_autosuspend(component->dev);
b663a8c5 Jeeja KP 2015-10-07 1414
b663a8c5 Jeeja KP 2015-10-07 1415 return 0;
b663a8c5 Jeeja KP 2015-10-07 1416 }
56b03b4c Kuninori Morimoto 2018-01-29 1417
:::::: The code at line 1351 was first introduced by commit
:::::: f7a9f77256e7fbd6150651bfab44f60c39f0b7a2 ASoC: Intel: Skylake: Find module id from UUID for bind params
:::::: TO: Sriram Periyasamy <sriramx.periyasamy(a)intel.com>
:::::: CC: Mark Brown <broonie(a)kernel.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
1
0
17 Apr '18
fixed checkpatch pl warnings.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda(a)amd.com>
---
sound/soc/amd/acp-pcm-dma.c | 259 ++++++++++++++++++++++++--------------------
sound/soc/amd/acp.h | 22 ++--
2 files changed, 153 insertions(+), 128 deletions(-)
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c
index 540088d..5ffe2ef 100644
--- a/sound/soc/amd/acp-pcm-dma.c
+++ b/sound/soc/amd/acp-pcm-dma.c
@@ -130,7 +130,8 @@ static void acp_reg_write(u32 val, void __iomem *acp_mmio, u32 reg)
writel(val, acp_mmio + (reg * 4));
}
-/* Configure a given dma channel parameters - enable/disable,
+/*
+ * Configure a given dma channel parameters - enable/disable,
* number of descriptors, priority
*/
static void config_acp_dma_channel(void __iomem *acp_mmio, u8 ch_num,
@@ -149,11 +150,12 @@ static void config_acp_dma_channel(void __iomem *acp_mmio, u8 ch_num,
& dscr_strt_idx),
acp_mmio, mmACP_DMA_DSCR_STRT_IDX_0 + ch_num);
- /* program a DMA channel with the number of descriptors to be
+ /*
+ * program a DMA channel with the number of descriptors to be
* processed in the transfer
- */
+ */
acp_reg_write(ACP_DMA_DSCR_CNT_0__DMAChDscrCnt_MASK & num_dscrs,
- acp_mmio, mmACP_DMA_DSCR_CNT_0 + ch_num);
+ acp_mmio, mmACP_DMA_DSCR_CNT_0 + ch_num);
/* set DMA channel priority */
acp_reg_write(priority_level, acp_mmio, mmACP_DMA_PRIO_0 + ch_num);
@@ -180,13 +182,15 @@ static void config_dma_descriptor_in_sram(void __iomem *acp_mmio,
acp_reg_write(descr_info->xfer_val, acp_mmio, mmACP_SRBM_Targ_Idx_Data);
}
-/* Initialize the DMA descriptor information for transfer between
+/*
+ * Initialize the DMA descriptor information for transfer between
* system memory <-> ACP SRAM
*/
static void set_acp_sysmem_dma_descriptors(void __iomem *acp_mmio,
- u32 size, int direction, u32 pte_offset,
- u16 ch, u32 sram_bank,
- u16 dma_dscr_idx, u32 asic_type)
+ u32 size, int direction,
+ u32 pte_offset, u16 ch,
+ u32 sram_bank, u16 dma_dscr_idx,
+ u32 asic_type)
{
u16 i;
acp_dma_dscr_transfer_t dmadscr[NUM_DSCRS_PER_CHANNEL];
@@ -195,58 +199,58 @@ static void set_acp_sysmem_dma_descriptors(void __iomem *acp_mmio,
dmadscr[i].xfer_val = 0;
if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
dma_dscr_idx = dma_dscr_idx + i;
- dmadscr[i].dest = sram_bank + (i * (size/2));
+ dmadscr[i].dest = sram_bank + (i * (size / 2));
dmadscr[i].src = ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS
- + (pte_offset * SZ_4K) + (i * (size/2));
+ + (pte_offset * SZ_4K) + (i * (size / 2));
switch (asic_type) {
case CHIP_STONEY:
dmadscr[i].xfer_val |=
- (ACP_DMA_ATTRIBUTES_DAGB_GARLIC_TO_SHAREDMEM << 16) |
+ (ACP_DMA_ATTR_DAGB_GARLIC_TO_SHAREDMEM << 16) |
(size / 2);
break;
default:
dmadscr[i].xfer_val |=
- (ACP_DMA_ATTRIBUTES_DAGB_ONION_TO_SHAREDMEM << 16) |
+ (ACP_DMA_ATTR_DAGB_ONION_TO_SHAREDMEM << 16) |
(size / 2);
}
} else {
dma_dscr_idx = dma_dscr_idx + i;
- dmadscr[i].src = sram_bank + (i * (size/2));
+ dmadscr[i].src = sram_bank + (i * (size / 2));
dmadscr[i].dest =
ACP_INTERNAL_APERTURE_WINDOW_0_ADDRESS +
- (pte_offset * SZ_4K) + (i * (size/2));
+ (pte_offset * SZ_4K) + (i * (size / 2));
switch (asic_type) {
case CHIP_STONEY:
dmadscr[i].xfer_val |=
BIT(22) |
- (ACP_DMA_ATTRIBUTES_SHARED_MEM_TO_DAGB_GARLIC << 16) |
+ (ACP_DMA_ATTR_SHARED_MEM_TO_DAGB_GARLIC << 16) |
(size / 2);
break;
default:
dmadscr[i].xfer_val |=
BIT(22) |
- (ACP_DMA_ATTRIBUTES_SHAREDMEM_TO_DAGB_ONION << 16) |
+ (ACP_DMA_ATTR_SHAREDMEM_TO_DAGB_ONION << 16) |
(size / 2);
}
}
config_dma_descriptor_in_sram(acp_mmio, dma_dscr_idx,
- &dmadscr[i]);
+ &dmadscr[i]);
}
config_acp_dma_channel(acp_mmio, ch,
- dma_dscr_idx - 1,
- NUM_DSCRS_PER_CHANNEL,
- ACP_DMA_PRIORITY_LEVEL_NORMAL);
+ dma_dscr_idx - 1,
+ NUM_DSCRS_PER_CHANNEL,
+ ACP_DMA_PRIORITY_LEVEL_NORMAL);
}
-/* Initialize the DMA descriptor information for transfer between
+/*
+ * Initialize the DMA descriptor information for transfer between
* ACP SRAM <-> I2S
*/
static void set_acp_to_i2s_dma_descriptors(void __iomem *acp_mmio, u32 size,
- int direction, u32 sram_bank,
- u16 destination, u16 ch,
- u16 dma_dscr_idx, u32 asic_type)
+ int direction, u32 sram_bank,
+ u16 destination, u16 ch,
+ u16 dma_dscr_idx, u32 asic_type)
{
-
u16 i;
acp_dma_dscr_transfer_t dmadscr[NUM_DSCRS_PER_CHANNEL];
@@ -254,7 +258,7 @@ static void set_acp_to_i2s_dma_descriptors(void __iomem *acp_mmio, u32 size,
dmadscr[i].xfer_val = 0;
if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
dma_dscr_idx = dma_dscr_idx + i;
- dmadscr[i].src = sram_bank + (i * (size/2));
+ dmadscr[i].src = sram_bank + (i * (size / 2));
/* dmadscr[i].dest is unused by hardware. */
dmadscr[i].dest = 0;
dmadscr[i].xfer_val |= BIT(22) | (destination << 16) |
@@ -269,12 +273,12 @@ static void set_acp_to_i2s_dma_descriptors(void __iomem *acp_mmio, u32 size,
(destination << 16) | (size / 2);
}
config_dma_descriptor_in_sram(acp_mmio, dma_dscr_idx,
- &dmadscr[i]);
+ &dmadscr[i]);
}
/* Configure the DMA channel with the above descriptore */
config_acp_dma_channel(acp_mmio, ch, dma_dscr_idx - 1,
- NUM_DSCRS_PER_CHANNEL,
- ACP_DMA_PRIORITY_LEVEL_NORMAL);
+ NUM_DSCRS_PER_CHANNEL,
+ ACP_DMA_PRIORITY_LEVEL_NORMAL);
}
/* Create page table entries in ACP SRAM for the allocated memory */
@@ -291,7 +295,7 @@ static void acp_pte_config(void __iomem *acp_mmio, struct page *pg,
for (page_idx = 0; page_idx < (num_of_pages); page_idx++) {
/* Load the low address of page int ACP SRAM through SRBM */
acp_reg_write((offset + (page_idx * 8)),
- acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
+ acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
addr = page_to_phys(pg);
low = lower_32_bits(addr);
@@ -301,7 +305,7 @@ static void acp_pte_config(void __iomem *acp_mmio, struct page *pg,
/* Load the High address of page int ACP SRAM through SRBM */
acp_reg_write((offset + (page_idx * 8) + 4),
- acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
+ acp_mmio, mmACP_SRBM_Targ_Idx_Addr);
/* page enable in ACP */
high |= BIT(31);
@@ -313,8 +317,8 @@ static void acp_pte_config(void __iomem *acp_mmio, struct page *pg,
}
static void config_acp_dma(void __iomem *acp_mmio,
- struct audio_substream_data *audio_config,
- u32 asic_type)
+ struct audio_substream_data *audio_config,
+ u32 asic_type)
{
u32 pte_offset, sram_bank;
u16 ch1, ch2, destination, dma_dscr_idx;
@@ -341,7 +345,7 @@ static void config_acp_dma(void __iomem *acp_mmio,
}
acp_pte_config(acp_mmio, audio_config->pg, audio_config->num_of_pages,
- pte_offset);
+ pte_offset);
if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK)
dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH12;
else
@@ -349,8 +353,8 @@ static void config_acp_dma(void __iomem *acp_mmio,
/* Configure System memory <-> ACP SRAM DMA descriptors */
set_acp_sysmem_dma_descriptors(acp_mmio, audio_config->size,
- audio_config->direction, pte_offset,
- ch1, sram_bank, dma_dscr_idx, asic_type);
+ audio_config->direction, pte_offset, ch1,
+ sram_bank, dma_dscr_idx, asic_type);
if (audio_config->direction == SNDRV_PCM_STREAM_PLAYBACK)
dma_dscr_idx = PLAYBACK_START_DMA_DESCR_CH13;
@@ -358,14 +362,14 @@ static void config_acp_dma(void __iomem *acp_mmio,
dma_dscr_idx = CAPTURE_START_DMA_DESCR_CH15;
/* Configure ACP SRAM <-> I2S DMA descriptors */
set_acp_to_i2s_dma_descriptors(acp_mmio, audio_config->size,
- audio_config->direction, sram_bank,
- destination, ch2, dma_dscr_idx,
- asic_type);
+ audio_config->direction, sram_bank,
+ destination, ch2, dma_dscr_idx,
+ asic_type);
}
/* Start a given DMA channel transfer */
static void acp_dma_start(void __iomem *acp_mmio,
- u16 ch_num, bool is_circular)
+ u16 ch_num, bool is_circular)
{
u32 dma_ctrl;
@@ -375,7 +379,8 @@ static void acp_dma_start(void __iomem *acp_mmio,
/* Invalidating the DAGB cache */
acp_reg_write(1, acp_mmio, mmACP_DAGB_ATU_CTRL);
- /* configure the DMA channel and start the DMA transfer
+ /*
+ * configure the DMA channel and start the DMA transfer
* set dmachrun bit to start the transfer and enable the
* interrupt on completion of the dma transfer
*/
@@ -410,9 +415,10 @@ static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num)
dma_ctrl = acp_reg_read(acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
- /* clear the dma control register fields before writing zero
+ /*
+ * clear the dma control register fields before writing zero
* in reset bit
- */
+ */
dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChRun_MASK;
dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChIOCEn_MASK;
@@ -420,9 +426,10 @@ static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num)
dma_ch_sts = acp_reg_read(acp_mmio, mmACP_DMA_CH_STS);
if (dma_ch_sts & BIT(ch_num)) {
- /* set the reset bit for this channel to stop the dma
- * transfer
- */
+ /*
+ * set the reset bit for this channel to stop the dma
+ * transfer
+ */
dma_ctrl |= ACP_DMA_CNTL_0__DMAChRst_MASK;
acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0 + ch_num);
}
@@ -431,13 +438,14 @@ static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num)
while (true) {
dma_ch_sts = acp_reg_read(acp_mmio, mmACP_DMA_CH_STS);
if (!(dma_ch_sts & BIT(ch_num))) {
- /* clear the reset flag after successfully stopping
- * the dma transfer and break from the loop
- */
+ /*
+ * clear the reset flag after successfully stopping
+ * the dma transfer and break from the loop
+ */
dma_ctrl &= ~ACP_DMA_CNTL_0__DMAChRst_MASK;
acp_reg_write(dma_ctrl, acp_mmio, mmACP_DMA_CNTL_0
- + ch_num);
+ + ch_num);
break;
}
if (--count == 0) {
@@ -450,7 +458,7 @@ static int acp_dma_stop(void __iomem *acp_mmio, u8 ch_num)
}
static void acp_set_sram_bank_state(void __iomem *acp_mmio, u16 bank,
- bool power_on)
+ bool power_on)
{
u32 val, req_reg, sts_reg, sts_reg_mask;
u32 loops = 1000;
@@ -530,7 +538,7 @@ static int acp_init(void __iomem *acp_mmio, u32 asic_type)
while (true) {
val = acp_reg_read(acp_mmio, mmACP_STATUS);
- if (val & (u32) 0x1)
+ if (val & (u32)0x1)
break;
if (--count == 0) {
pr_err("Failed to reset ACP\n");
@@ -546,11 +554,11 @@ static int acp_init(void __iomem *acp_mmio, u32 asic_type)
/* initiailize Onion control DAGB register */
acp_reg_write(ACP_ONION_CNTL_DEFAULT, acp_mmio,
- mmACP_AXI2DAGB_ONION_CNTL);
+ mmACP_AXI2DAGB_ONION_CNTL);
/* initiailize Garlic control DAGB registers */
acp_reg_write(ACP_GARLIC_CNTL_DEFAULT, acp_mmio,
- mmACP_AXI2DAGB_GARLIC_CNTL);
+ mmACP_AXI2DAGB_GARLIC_CNTL);
sram_pte_offset = ACP_DAGB_GRP_SRAM_BASE_ADDRESS |
ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBSnoopSel_MASK |
@@ -558,17 +566,18 @@ static int acp_init(void __iomem *acp_mmio, u32 asic_type)
ACP_DAGB_BASE_ADDR_GRP_1__AXI2DAGBGrpEnable_MASK;
acp_reg_write(sram_pte_offset, acp_mmio, mmACP_DAGB_BASE_ADDR_GRP_1);
acp_reg_write(ACP_PAGE_SIZE_4K_ENABLE, acp_mmio,
- mmACP_DAGB_PAGE_SIZE_GRP_1);
+ mmACP_DAGB_PAGE_SIZE_GRP_1);
acp_reg_write(ACP_SRAM_BASE_ADDRESS, acp_mmio,
- mmACP_DMA_DESC_BASE_ADDR);
+ mmACP_DMA_DESC_BASE_ADDR);
/* Num of descriptiors in SRAM 0x4, means 256 descriptors;(64 * 4) */
acp_reg_write(0x4, acp_mmio, mmACP_DMA_DESC_MAX_NUM_DSCR);
acp_reg_write(ACP_EXTERNAL_INTR_CNTL__DMAIOCMask_MASK,
- acp_mmio, mmACP_EXTERNAL_INTR_CNTL);
+ acp_mmio, mmACP_EXTERNAL_INTR_CNTL);
- /* When ACP_TILE_P1 is turned on, all SRAM banks get turned on.
+ /*
+ * When ACP_TILE_P1 is turned on, all SRAM banks get turned on.
* Now, turn off all of them. This can't be done in 'poweron' of
* ACP pm domain, as this requires ACP to be initialized.
* For Stoney, Memory gating is disabled,i.e SRAM Banks
@@ -606,7 +615,7 @@ static int acp_deinit(void __iomem *acp_mmio)
}
udelay(100);
}
- /** Disable ACP clock */
+ /* Disable ACP clock */
val = acp_reg_read(acp_mmio, mmACP_CONTROL);
val &= ~ACP_CONTROL__ClkEn_MASK;
acp_reg_write(val, acp_mmio, mmACP_CONTROL);
@@ -615,7 +624,7 @@ static int acp_deinit(void __iomem *acp_mmio)
while (true) {
val = acp_reg_read(acp_mmio, mmACP_STATUS);
- if (!(val & (u32) 0x1))
+ if (!(val & (u32)0x1))
break;
if (--count == 0) {
pr_err("Failed to reset ACP\n");
@@ -658,7 +667,7 @@ static irqreturn_t dma_irq_handler(int irq, void *arg)
snd_pcm_period_elapsed(irq_data->play_i2ssp_stream);
acp_reg_write((intr_flag & BIT(ACP_TO_I2S_DMA_CH_NUM)) << 16,
- acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
}
if ((intr_flag & BIT(I2S_TO_ACP_DMA_CH_NUM)) != 0) {
@@ -673,14 +682,14 @@ static irqreturn_t dma_irq_handler(int irq, void *arg)
acp_dma_start(acp_mmio, ACP_TO_SYSRAM_CH_NUM, false);
acp_reg_write((intr_flag & BIT(I2S_TO_ACP_DMA_CH_NUM)) << 16,
- acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
}
if ((intr_flag & BIT(ACP_TO_SYSRAM_CH_NUM)) != 0) {
valid_irq = true;
snd_pcm_period_elapsed(irq_data->capture_i2ssp_stream);
acp_reg_write((intr_flag & BIT(ACP_TO_SYSRAM_CH_NUM)) << 16,
- acp_mmio, mmACP_EXTERNAL_INTR_STAT);
+ acp_mmio, mmACP_EXTERNAL_INTR_STAT);
}
if (valid_irq)
@@ -695,11 +704,12 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
int ret = 0;
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *prtd = substream->private_data;
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
+ struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd,
+ DRV_NAME);
struct audio_drv_data *intr_data = dev_get_drvdata(component->dev);
struct audio_substream_data *adata =
kzalloc(sizeof(struct audio_substream_data), GFP_KERNEL);
- if (adata == NULL)
+ if (!adata)
return -ENOMEM;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
@@ -731,17 +741,19 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
adata->acp_mmio = intr_data->acp_mmio;
runtime->private_data = adata;
- /* Enable ACP irq, when neither playback or capture streams are
+ /*
+ * Enable ACP irq, when neither playback or capture streams are
* active by the time when a new stream is being opened.
* This enablement is not required for another stream, if current
* stream is not closed
- */
+ */
if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream)
acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
intr_data->play_i2ssp_stream = substream;
- /* For Stoney, Memory gating is disabled,i.e SRAM Banks
+ /*
+ * For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
*/
@@ -772,7 +784,8 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_runtime *runtime;
struct audio_substream_data *rtd;
struct snd_soc_pcm_runtime *prtd = substream->private_data;
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
+ struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd,
+ DRV_NAME);
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
runtime = substream->runtime;
@@ -782,12 +795,14 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
return -EINVAL;
if (adata->asic_type == CHIP_STONEY) {
- val = acp_reg_read(adata->acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN);
+ val = acp_reg_read(adata->acp_mmio,
+ mmACP_I2S_16BIT_RESOLUTION_EN);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
val |= ACP_I2S_SP_16BIT_RESOLUTION_EN;
else
val |= ACP_I2S_MIC_16BIT_RESOLUTION_EN;
- acp_reg_write(val, adata->acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN);
+ acp_reg_write(val, adata->acp_mmio,
+ mmACP_I2S_16BIT_RESOLUTION_EN);
}
size = params_buffer_bytes(params);
status = snd_pcm_lib_malloc_pages(substream, size);
@@ -797,7 +812,7 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
memset(substream->runtime->dma_area, 0, params_buffer_bytes(params));
pg = virt_to_page(substream->dma_buffer.area);
- if (pg != NULL) {
+ if (pg) {
acp_set_sram_bank_state(rtd->acp_mmio, 0, true);
/* Save for runtime private data */
rtd->pg = pg;
@@ -885,18 +900,18 @@ static int acp_dma_prepare(struct snd_pcm_substream *substream)
return -EINVAL;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
config_acp_dma_channel(rtd->acp_mmio, SYSRAM_TO_ACP_CH_NUM,
- PLAYBACK_START_DMA_DESCR_CH12,
- NUM_DSCRS_PER_CHANNEL, 0);
+ PLAYBACK_START_DMA_DESCR_CH12,
+ NUM_DSCRS_PER_CHANNEL, 0);
config_acp_dma_channel(rtd->acp_mmio, ACP_TO_I2S_DMA_CH_NUM,
- PLAYBACK_START_DMA_DESCR_CH13,
- NUM_DSCRS_PER_CHANNEL, 0);
+ PLAYBACK_START_DMA_DESCR_CH13,
+ NUM_DSCRS_PER_CHANNEL, 0);
} else {
config_acp_dma_channel(rtd->acp_mmio, ACP_TO_SYSRAM_CH_NUM,
- CAPTURE_START_DMA_DESCR_CH14,
- NUM_DSCRS_PER_CHANNEL, 0);
+ CAPTURE_START_DMA_DESCR_CH14,
+ NUM_DSCRS_PER_CHANNEL, 0);
config_acp_dma_channel(rtd->acp_mmio, I2S_TO_ACP_DMA_CH_NUM,
- CAPTURE_START_DMA_DESCR_CH15,
- NUM_DSCRS_PER_CHANNEL, 0);
+ CAPTURE_START_DMA_DESCR_CH15,
+ NUM_DSCRS_PER_CHANNEL, 0);
}
return 0;
}
@@ -910,7 +925,8 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *prtd = substream->private_data;
struct audio_substream_data *rtd = runtime->private_data;
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
+ struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd,
+ DRV_NAME);
if (!rtd)
return -EINVAL;
@@ -924,7 +940,7 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
if (rtd->i2ssp_renderbytescount == 0)
rtd->i2ssp_renderbytescount = bytescount;
acp_dma_start(rtd->acp_mmio,
- SYSRAM_TO_ACP_CH_NUM, false);
+ SYSRAM_TO_ACP_CH_NUM, false);
while (acp_reg_read(rtd->acp_mmio, mmACP_DMA_CH_STS) &
BIT(SYSRAM_TO_ACP_CH_NUM)) {
if (!loops--) {
@@ -936,41 +952,41 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
}
acp_dma_start(rtd->acp_mmio,
- ACP_TO_I2S_DMA_CH_NUM, true);
+ ACP_TO_I2S_DMA_CH_NUM, true);
} else {
if (rtd->i2ssp_capturebytescount == 0)
rtd->i2ssp_capturebytescount = bytescount;
acp_dma_start(rtd->acp_mmio,
- I2S_TO_ACP_DMA_CH_NUM, true);
+ I2S_TO_ACP_DMA_CH_NUM, true);
}
ret = 0;
break;
case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
case SNDRV_PCM_TRIGGER_SUSPEND:
- /* Need to stop only circular DMA channels :
+ /*
+ * Need to stop only circular DMA channels :
* ACP_TO_I2S_DMA_CH_NUM / I2S_TO_ACP_DMA_CH_NUM. Non-circular
* channels will stopped automatically after its transfer
* completes : SYSRAM_TO_ACP_CH_NUM / ACP_TO_SYSRAM_CH_NUM
*/
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
ret = acp_dma_stop(rtd->acp_mmio,
- SYSRAM_TO_ACP_CH_NUM);
+ SYSRAM_TO_ACP_CH_NUM);
ret = acp_dma_stop(rtd->acp_mmio,
- ACP_TO_I2S_DMA_CH_NUM);
+ ACP_TO_I2S_DMA_CH_NUM);
rtd->i2ssp_renderbytescount = 0;
} else {
ret = acp_dma_stop(rtd->acp_mmio,
- I2S_TO_ACP_DMA_CH_NUM);
+ I2S_TO_ACP_DMA_CH_NUM);
ret = acp_dma_stop(rtd->acp_mmio,
- ACP_TO_SYSRAM_CH_NUM);
+ ACP_TO_SYSRAM_CH_NUM);
rtd->i2ssp_capturebytescount = 0;
}
break;
default:
ret = -EINVAL;
-
}
return ret;
}
@@ -978,26 +994,27 @@ static int acp_dma_trigger(struct snd_pcm_substream *substream, int cmd)
static int acp_dma_new(struct snd_soc_pcm_runtime *rtd)
{
int ret;
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+ struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd,
+ DRV_NAME);
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
switch (adata->asic_type) {
case CHIP_STONEY:
ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
- SNDRV_DMA_TYPE_DEV,
- NULL, ST_MIN_BUFFER,
- ST_MAX_BUFFER);
+ SNDRV_DMA_TYPE_DEV,
+ NULL, ST_MIN_BUFFER,
+ ST_MAX_BUFFER);
break;
default:
ret = snd_pcm_lib_preallocate_pages_for_all(rtd->pcm,
- SNDRV_DMA_TYPE_DEV,
- NULL, MIN_BUFFER,
- MAX_BUFFER);
+ SNDRV_DMA_TYPE_DEV,
+ NULL, MIN_BUFFER,
+ MAX_BUFFER);
break;
}
if (ret < 0)
dev_err(component->dev,
- "buffer preallocation failer error:%d\n", ret);
+ "buffer preallocation failer error:%d\n", ret);
return ret;
}
@@ -1007,14 +1024,16 @@ static int acp_dma_close(struct snd_pcm_substream *substream)
struct snd_pcm_runtime *runtime = substream->runtime;
struct audio_substream_data *rtd = runtime->private_data;
struct snd_soc_pcm_runtime *prtd = substream->private_data;
- struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME);
+ struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd,
+ DRV_NAME);
struct audio_drv_data *adata = dev_get_drvdata(component->dev);
kfree(rtd);
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
adata->play_i2ssp_stream = NULL;
- /* For Stoney, Memory gating is disabled,i.e SRAM Banks
+ /*
+ * For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
* added condition checks for Carrizo platform only
@@ -1022,20 +1041,21 @@ static int acp_dma_close(struct snd_pcm_substream *substream)
if (adata->asic_type != CHIP_STONEY) {
for (bank = 1; bank <= 4; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank,
- false);
+ false);
}
} else {
adata->capture_i2ssp_stream = NULL;
if (adata->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank,
- false);
+ false);
}
}
- /* Disable ACP irq, when the current stream is being closed and
+ /*
+ * Disable ACP irq, when the current stream is being closed and
* another stream is also not active.
- */
+ */
if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream)
acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
@@ -1054,7 +1074,7 @@ static const struct snd_pcm_ops acp_dma_ops = {
.prepare = acp_dma_prepare,
};
-static struct snd_soc_component_driver acp_asoc_platform = {
+static const struct snd_soc_component_driver acp_asoc_platform = {
.name = DRV_NAME,
.ops = &acp_dma_ops,
.pcm_new = acp_dma_new,
@@ -1073,8 +1093,8 @@ static int acp_audio_probe(struct platform_device *pdev)
}
audio_drv_data = devm_kzalloc(&pdev->dev, sizeof(struct audio_drv_data),
- GFP_KERNEL);
- if (audio_drv_data == NULL)
+ GFP_KERNEL);
+ if (!audio_drv_data)
return -ENOMEM;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1082,7 +1102,8 @@ static int acp_audio_probe(struct platform_device *pdev)
if (IS_ERR(audio_drv_data->acp_mmio))
return PTR_ERR(audio_drv_data->acp_mmio);
- /* The following members gets populated in device 'open'
+ /*
+ * The following members gets populated in device 'open'
* function. Till then interrupts are disabled in 'acp_init'
* and device doesn't generate any interrupts.
*/
@@ -1099,7 +1120,7 @@ static int acp_audio_probe(struct platform_device *pdev)
}
status = devm_request_irq(&pdev->dev, res->start, dma_irq_handler,
- 0, "ACP_IRQ", &pdev->dev);
+ 0, "ACP_IRQ", &pdev->dev);
if (status) {
dev_err(&pdev->dev, "ACP IRQ request failed\n");
return status;
@@ -1115,7 +1136,7 @@ static int acp_audio_probe(struct platform_device *pdev)
}
status = devm_snd_soc_register_component(&pdev->dev,
- &acp_asoc_platform, NULL, 0);
+ &acp_asoc_platform, NULL, 0);
if (status != 0) {
dev_err(&pdev->dev, "Fail to register ALSA platform device\n");
return status;
@@ -1154,28 +1175,30 @@ static int acp_pcm_resume(struct device *dev)
}
if (adata->play_i2ssp_stream && adata->play_i2ssp_stream->runtime) {
- /* For Stoney, Memory gating is disabled,i.e SRAM Banks
+ /*
+ * For Stoney, Memory gating is disabled,i.e SRAM Banks
* won't be turned off. The default state for SRAM banks is ON.
* Setting SRAM bank state code skipped for STONEY platform.
*/
if (adata->asic_type != CHIP_STONEY) {
for (bank = 1; bank <= 4; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank,
- true);
+ true);
}
config_acp_dma(adata->acp_mmio,
- adata->play_i2ssp_stream->runtime->private_data,
- adata->asic_type);
+ adata->play_i2ssp_stream->runtime->private_data,
+ adata->asic_type);
}
- if (adata->capture_i2ssp_stream && adata->capture_i2ssp_stream->runtime) {
+ if (adata->capture_i2ssp_stream &&
+ adata->capture_i2ssp_stream->runtime) {
if (adata->asic_type != CHIP_STONEY) {
for (bank = 5; bank <= 8; bank++)
acp_set_sram_bank_state(adata->acp_mmio, bank,
- true);
+ true);
}
config_acp_dma(adata->acp_mmio,
- adata->capture_i2ssp_stream->runtime->private_data,
- adata->asic_type);
+ adata->capture_i2ssp_stream->runtime->private_data,
+ adata->asic_type);
}
acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB);
return 0;
diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h
index ba01510..0e6089b 100644
--- a/sound/soc/amd/acp.h
+++ b/sound/soc/amd/acp.h
@@ -115,23 +115,25 @@ enum {
};
enum {
- ACP_DMA_ATTRIBUTES_SHAREDMEM_TO_DAGB_ONION = 0x0,
- ACP_DMA_ATTRIBUTES_SHARED_MEM_TO_DAGB_GARLIC = 0x1,
- ACP_DMA_ATTRIBUTES_DAGB_ONION_TO_SHAREDMEM = 0x8,
- ACP_DMA_ATTRIBUTES_DAGB_GARLIC_TO_SHAREDMEM = 0x9,
- ACP_DMA_ATTRIBUTES_FORCE_SIZE = 0xF
+ ACP_DMA_ATTR_SHAREDMEM_TO_DAGB_ONION = 0x0,
+ ACP_DMA_ATTR_SHARED_MEM_TO_DAGB_GARLIC = 0x1,
+ ACP_DMA_ATTR_DAGB_ONION_TO_SHAREDMEM = 0x8,
+ ACP_DMA_ATTR_DAGB_GARLIC_TO_SHAREDMEM = 0x9,
+ ACP_DMA_ATTR_FORCE_SIZE = 0xF
};
typedef struct acp_dma_dscr_transfer {
/* Specifies the source memory location for the DMA data transfer. */
u32 src;
- /* Specifies the destination memory location to where the data will
+ /*
+ * Specifies the destination memory location to where the data will
* be transferred.
- */
+ */
u32 dest;
- /* Specifies the number of bytes need to be transferred
- * from source to destination memory.Transfer direction & IOC enable
- */
+ /*
+ * Specifies the number of bytes need to be transferred
+ * from source to destination memory.Transfer direction & IOC enable
+ */
u32 xfer_val;
/* Reserved for future use */
u32 reserved;
--
2.7.4
2
2