Merge branch 'fix/intel' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-intel
This commit is contained in:
@@ -32,19 +32,25 @@ config SND_SOC_ACPI_INTEL_MATCH
|
||||
config SND_SOC_INTEL_SST_TOPLEVEL
|
||||
tristate "Intel ASoC SST drivers"
|
||||
depends on X86 || COMPILE_TEST
|
||||
depends on DMADEVICES
|
||||
select SND_SOC_INTEL_MACH
|
||||
select SND_SOC_INTEL_COMMON
|
||||
help
|
||||
Intel ASoC Audio Drivers. If you have a Intel machine that
|
||||
has audio controller with a DSP and I2S or DMIC port, then
|
||||
enable this option by saying Y or M
|
||||
If unsure select "N".
|
||||
|
||||
config SND_SOC_INTEL_HASWELL
|
||||
tristate "Intel ASoC SST driver for Haswell/Broadwell"
|
||||
depends on SND_SOC_INTEL_SST_TOPLEVEL && SND_DMA_SGBUF
|
||||
depends on DMADEVICES
|
||||
select SND_SOC_INTEL_SST
|
||||
select SND_SOC_INTEL_SST_FIRMWARE
|
||||
|
||||
config SND_SOC_INTEL_BAYTRAIL
|
||||
tristate "Intel ASoC SST driver for Baytrail (legacy)"
|
||||
depends on SND_SOC_INTEL_SST_TOPLEVEL
|
||||
depends on DMADEVICES
|
||||
select SND_SOC_INTEL_SST
|
||||
select SND_SOC_INTEL_SST_FIRMWARE
|
||||
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Core support
|
||||
obj-$(CONFIG_SND_SOC_INTEL_COMMON) += common/
|
||||
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
snd-soc-sst-atom-hifi2-platform-objs := sst-mfld-platform-pcm.o \
|
||||
sst-mfld-platform-compress.o \
|
||||
sst-atom-controls.o
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
snd-intel-sst-core-objs := sst.o sst_ipc.o sst_stream.o sst_drv_interface.o sst_loader.o sst_pvt.o
|
||||
snd-intel-sst-pci-objs += sst_pci.o
|
||||
snd-intel-sst-acpi-objs += sst_acpi.o
|
||||
|
@@ -1,10 +1,12 @@
|
||||
config SND_SOC_INTEL_MACH
|
||||
tristate "Intel Audio machine drivers"
|
||||
depends on SND_SOC_INTEL_SST_TOPLEVEL
|
||||
select SND_SOC_ACPI_INTEL_MATCH if ACPI
|
||||
|
||||
if SND_SOC_INTEL_MACH
|
||||
|
||||
config SND_MFLD_MACHINE
|
||||
tristate "SOC Machine Audio driver for Intel Medfield MID platform"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on INTEL_SCU_IPC
|
||||
select SND_SOC_SN95031
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -17,9 +19,7 @@ config SND_MFLD_MACHINE
|
||||
|
||||
config SND_SOC_INTEL_HASWELL_MACH
|
||||
tristate "ASoC Audio DSP support for Intel Haswell Lynxpoint"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && I2C_DESIGNWARE_PLATFORM
|
||||
depends on DMADEVICES
|
||||
depends on SND_SOC_INTEL_HASWELL
|
||||
select SND_SOC_RT5640
|
||||
help
|
||||
@@ -30,9 +30,7 @@ config SND_SOC_INTEL_HASWELL_MACH
|
||||
|
||||
config SND_SOC_INTEL_BDW_RT5677_MACH
|
||||
tristate "ASoC Audio driver for Intel Broadwell with RT5677 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && GPIOLIB && I2C
|
||||
depends on DMADEVICES
|
||||
depends on SND_SOC_INTEL_HASWELL
|
||||
select SND_SOC_RT5677
|
||||
help
|
||||
@@ -41,9 +39,7 @@ config SND_SOC_INTEL_BDW_RT5677_MACH
|
||||
|
||||
config SND_SOC_INTEL_BROADWELL_MACH
|
||||
tristate "ASoC Audio DSP support for Intel Broadwell Wildcatpoint"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && I2C_DESIGNWARE_PLATFORM
|
||||
depends on DMADEVICES
|
||||
depends on SND_SOC_INTEL_HASWELL
|
||||
select SND_SOC_RT286
|
||||
help
|
||||
@@ -54,9 +50,7 @@ config SND_SOC_INTEL_BROADWELL_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYT_MAX98090_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail with MAX98090 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C
|
||||
depends on DMADEVICES
|
||||
depends on SND_SST_IPC_ACPI = n
|
||||
depends on SND_SOC_INTEL_BAYTRAIL
|
||||
select SND_SOC_MAX98090
|
||||
@@ -66,9 +60,7 @@ config SND_SOC_INTEL_BYT_MAX98090_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYT_RT5640_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail with RT5640 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C
|
||||
depends on DMADEVICES
|
||||
depends on SND_SST_IPC_ACPI = n
|
||||
depends on SND_SOC_INTEL_BAYTRAIL
|
||||
select SND_SOC_RT5640
|
||||
@@ -79,7 +71,6 @@ config SND_SOC_INTEL_BYT_RT5640_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYTCR_RT5640_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail and Baytrail-CR with RT5640 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86 && I2C && ACPI
|
||||
select SND_SOC_RT5640
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -92,7 +83,6 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYTCR_RT5651_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail and Baytrail-CR with RT5651 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86 && I2C && ACPI
|
||||
select SND_SOC_RT5651
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -105,7 +95,6 @@ config SND_SOC_INTEL_BYTCR_RT5651_MACH
|
||||
|
||||
config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
|
||||
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
select SND_SOC_RT5670
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -118,7 +107,6 @@ config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
|
||||
|
||||
config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
|
||||
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5645/5650 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
select SND_SOC_RT5645
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -130,7 +118,6 @@ config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
|
||||
|
||||
config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH
|
||||
tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with MAX98090 & TI codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
select SND_SOC_MAX98090
|
||||
select SND_SOC_TS3A227E
|
||||
@@ -143,7 +130,6 @@ config SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYT_CHT_DA7213_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail with DA7212/7213 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
select SND_SOC_DA7213
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -155,7 +141,6 @@ config SND_SOC_INTEL_BYT_CHT_DA7213_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYT_CHT_ES8316_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail with ES8316 codec"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
select SND_SOC_ES8316
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
@@ -167,7 +152,6 @@ config SND_SOC_INTEL_BYT_CHT_ES8316_MACH
|
||||
|
||||
config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH
|
||||
tristate "ASoC Audio driver for Intel Baytrail & Cherrytrail platform with no codec (MinnowBoard MAX, Up)"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && ACPI
|
||||
depends on SND_SST_ATOM_HIFI2_PLATFORM
|
||||
select SND_SST_IPC_ACPI
|
||||
@@ -179,7 +163,6 @@ config SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH
|
||||
|
||||
config SND_SOC_INTEL_SKL_RT286_MACH
|
||||
tristate "ASoC Audio driver for SKL with RT286 I2S mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86 && ACPI && I2C
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
select SND_SOC_RT286
|
||||
@@ -193,7 +176,6 @@ config SND_SOC_INTEL_SKL_RT286_MACH
|
||||
|
||||
config SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH
|
||||
tristate "ASoC Audio driver for SKL with NAU88L25 and SSM4567 in I2S Mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
select SND_SOC_NAU8825
|
||||
@@ -208,7 +190,6 @@ config SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH
|
||||
|
||||
config SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH
|
||||
tristate "ASoC Audio driver for SKL with NAU88L25 and MAX98357A in I2S Mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
select SND_SOC_NAU8825
|
||||
@@ -223,7 +204,6 @@ config SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH
|
||||
|
||||
config SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH
|
||||
tristate "ASoC Audio driver for Broxton with DA7219 and MAX98357A in I2S Mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86 && ACPI && I2C
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
select SND_SOC_DA7219
|
||||
@@ -239,7 +219,6 @@ config SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH
|
||||
|
||||
config SND_SOC_INTEL_BXT_RT298_MACH
|
||||
tristate "ASoC Audio driver for Broxton with RT298 I2S mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86 && ACPI && I2C
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
select SND_SOC_RT298
|
||||
@@ -254,7 +233,6 @@ config SND_SOC_INTEL_BXT_RT298_MACH
|
||||
|
||||
config SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH
|
||||
tristate "ASoC Audio driver for KBL with RT5663 and MAX98927 in I2S Mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C
|
||||
select SND_SOC_INTEL_SST
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
@@ -270,7 +248,6 @@ config SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH
|
||||
|
||||
config SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH
|
||||
tristate "ASoC Audio driver for KBL with RT5663, RT5514 and MAX98927 in I2S Mode"
|
||||
depends on SND_SOC_INTEL_MACH
|
||||
depends on X86_INTEL_LPSS && I2C && SPI
|
||||
select SND_SOC_INTEL_SST
|
||||
depends on SND_SOC_INTEL_SKYLAKE
|
||||
@@ -284,3 +261,5 @@ config SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH
|
||||
create an alsa sound card for RT5663 + RT5514 + MAX98927.
|
||||
Say Y if you have such a device.
|
||||
If unsure select "N".
|
||||
|
||||
endif
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
snd-soc-sst-haswell-objs := haswell.o
|
||||
snd-soc-sst-byt-rt5640-mach-objs := byt-rt5640.o
|
||||
snd-soc-sst-byt-max98090-mach-objs := byt-max98090.o
|
||||
|
@@ -257,7 +257,7 @@ static int cht_codec_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF
|
||||
fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
|
||||
| SND_SOC_DAIFMT_CBS_CFS;
|
||||
|
||||
ret = snd_soc_dai_set_fmt(rtd->cpu_dai, fmt);
|
||||
@@ -270,8 +270,8 @@ static int cht_codec_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||
rate->min = rate->max = 48000;
|
||||
channels->min = channels->max = 2;
|
||||
|
||||
/* set SSP2 to 24-bit */
|
||||
params_set_format(params, SNDRV_PCM_FORMAT_S24_LE);
|
||||
/* set SSP2 to 16-bit */
|
||||
params_set_format(params, SNDRV_PCM_FORMAT_S16_LE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -605,6 +605,8 @@ static int kabylake_card_late_probe(struct snd_soc_card *card)
|
||||
|
||||
list_for_each_entry(pcm, &ctx->hdmi_pcm_list, head) {
|
||||
codec = pcm->codec_dai->codec;
|
||||
snprintf(jack_name, sizeof(jack_name),
|
||||
"HDMI/DP,pcm=%d Jack", pcm->device);
|
||||
err = snd_soc_card_jack_new(card, jack_name,
|
||||
SND_JACK_AVOUT, &ctx->kabylake_hdmi[i],
|
||||
NULL, 0);
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
snd-soc-sst-dsp-objs := sst-dsp.o
|
||||
snd-soc-sst-acpi-objs := sst-acpi.o
|
||||
snd-soc-sst-ipc-objs := sst-ipc.o
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
snd-soc-skl-objs := skl.o skl-pcm.o skl-nhlt.o skl-messages.o \
|
||||
skl-topology.o
|
||||
|
||||
|
@@ -729,18 +729,11 @@ static void skl_set_updown_mixer_format(struct skl_sst *ctx,
|
||||
struct skl_module *module = mconfig->module;
|
||||
struct skl_module_iface *iface = &module->formats[mconfig->fmt_idx];
|
||||
struct skl_module_fmt *fmt = &iface->outputs[0].fmt;
|
||||
int i = 0;
|
||||
|
||||
skl_set_base_module_format(ctx, mconfig,
|
||||
(struct skl_base_cfg *)mixer_mconfig);
|
||||
mixer_mconfig->out_ch_cfg = fmt->ch_cfg;
|
||||
|
||||
/* Select F/W default coefficient */
|
||||
mixer_mconfig->coeff_sel = 0x0;
|
||||
|
||||
/* User coeff, don't care since we are selecting F/W defaults */
|
||||
for (i = 0; i < UP_DOWN_MIXER_MAX_COEFF; i++)
|
||||
mixer_mconfig->coeff[i] = 0xDEADBEEF;
|
||||
mixer_mconfig->ch_map = fmt->ch_map;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -21,6 +21,8 @@
|
||||
#include "skl.h"
|
||||
#include "skl-i2s.h"
|
||||
|
||||
#define NHLT_ACPI_HEADER_SIG "NHLT"
|
||||
|
||||
/* Unique identification for getting NHLT blobs */
|
||||
static guid_t osc_guid =
|
||||
GUID_INIT(0xA69F886E, 0x6CEB, 0x4594,
|
||||
@@ -42,10 +44,18 @@ struct nhlt_acpi_table *skl_nhlt_init(struct device *dev)
|
||||
obj = acpi_evaluate_dsm(handle, &osc_guid, 1, 1, NULL);
|
||||
if (obj && obj->type == ACPI_TYPE_BUFFER) {
|
||||
nhlt_ptr = (struct nhlt_resource_desc *)obj->buffer.pointer;
|
||||
nhlt_table = (struct nhlt_acpi_table *)
|
||||
if (nhlt_ptr->length)
|
||||
nhlt_table = (struct nhlt_acpi_table *)
|
||||
memremap(nhlt_ptr->min_addr, nhlt_ptr->length,
|
||||
MEMREMAP_WB);
|
||||
ACPI_FREE(obj);
|
||||
if (nhlt_table && (strncmp(nhlt_table->header.signature,
|
||||
NHLT_ACPI_HEADER_SIG,
|
||||
strlen(NHLT_ACPI_HEADER_SIG)) != 0)) {
|
||||
memunmap(nhlt_table);
|
||||
dev_err(dev, "NHLT ACPI header signature incorrect\n");
|
||||
return NULL;
|
||||
}
|
||||
return nhlt_table;
|
||||
}
|
||||
|
||||
|
@@ -355,7 +355,8 @@ static void skl_pcm_close(struct snd_pcm_substream *substream,
|
||||
}
|
||||
|
||||
mconfig = skl_tplg_fe_get_cpr_module(dai, substream->stream);
|
||||
skl_tplg_d0i3_put(skl, mconfig->d0i3_caps);
|
||||
if (mconfig)
|
||||
skl_tplg_d0i3_put(skl, mconfig->d0i3_caps);
|
||||
|
||||
kfree(dma_params);
|
||||
}
|
||||
|
@@ -253,6 +253,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
struct uuid_module *module;
|
||||
struct firmware stripped_fw;
|
||||
unsigned int safe_file;
|
||||
int ret = 0;
|
||||
|
||||
/* Get the FW pointer to derive ADSP header */
|
||||
stripped_fw.data = fw->data;
|
||||
@@ -301,8 +302,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
|
||||
for (i = 0; i < num_entry; i++, mod_entry++) {
|
||||
module = kzalloc(sizeof(*module), GFP_KERNEL);
|
||||
if (!module)
|
||||
return -ENOMEM;
|
||||
if (!module) {
|
||||
ret = -ENOMEM;
|
||||
goto free_uuid_list;
|
||||
}
|
||||
|
||||
uuid_bin = (uuid_le *)mod_entry->uuid.id;
|
||||
memcpy(&module->uuid, uuid_bin, sizeof(module->uuid));
|
||||
@@ -313,8 +316,8 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
size = sizeof(int) * mod_entry->instance_max_count;
|
||||
module->instance_id = devm_kzalloc(ctx->dev, size, GFP_KERNEL);
|
||||
if (!module->instance_id) {
|
||||
kfree(module);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto free_uuid_list;
|
||||
}
|
||||
|
||||
list_add_tail(&module->list, &skl->uuid_list);
|
||||
@@ -325,6 +328,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
free_uuid_list:
|
||||
skl_freeup_uuid_list(skl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void skl_freeup_uuid_list(struct skl_sst *ctx)
|
||||
|
@@ -2036,21 +2036,45 @@ static int skl_tplg_add_pipe(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int skl_tplg_fill_pin(struct device *dev, u32 tkn,
|
||||
struct skl_module_pin *m_pin,
|
||||
int pin_index, u32 value)
|
||||
static int skl_tplg_get_uuid(struct device *dev, u8 *guid,
|
||||
struct snd_soc_tplg_vendor_uuid_elem *uuid_tkn)
|
||||
{
|
||||
switch (tkn) {
|
||||
if (uuid_tkn->token == SKL_TKN_UUID) {
|
||||
memcpy(guid, &uuid_tkn->uuid, 16);
|
||||
return 0;
|
||||
}
|
||||
|
||||
dev_err(dev, "Not an UUID token %d\n", uuid_tkn->token);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int skl_tplg_fill_pin(struct device *dev,
|
||||
struct snd_soc_tplg_vendor_value_elem *tkn_elem,
|
||||
struct skl_module_pin *m_pin,
|
||||
int pin_index)
|
||||
{
|
||||
int ret;
|
||||
|
||||
switch (tkn_elem->token) {
|
||||
case SKL_TKN_U32_PIN_MOD_ID:
|
||||
m_pin[pin_index].id.module_id = value;
|
||||
m_pin[pin_index].id.module_id = tkn_elem->value;
|
||||
break;
|
||||
|
||||
case SKL_TKN_U32_PIN_INST_ID:
|
||||
m_pin[pin_index].id.instance_id = value;
|
||||
m_pin[pin_index].id.instance_id = tkn_elem->value;
|
||||
break;
|
||||
|
||||
case SKL_TKN_UUID:
|
||||
ret = skl_tplg_get_uuid(dev, m_pin[pin_index].id.mod_uuid.b,
|
||||
(struct snd_soc_tplg_vendor_uuid_elem *)tkn_elem);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(dev, "%d Not a pin token\n", value);
|
||||
dev_err(dev, "%d Not a pin token\n", tkn_elem->token);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -2083,9 +2107,7 @@ static int skl_tplg_fill_pins_info(struct device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = skl_tplg_fill_pin(dev, tkn_elem->token,
|
||||
m_pin, pin_count, tkn_elem->value);
|
||||
|
||||
ret = skl_tplg_fill_pin(dev, tkn_elem, m_pin, pin_count);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -2170,19 +2192,6 @@ static int skl_tplg_widget_fill_fmt(struct device *dev,
|
||||
return skl_tplg_fill_fmt(dev, dst_fmt, tkn, val);
|
||||
}
|
||||
|
||||
static int skl_tplg_get_uuid(struct device *dev, struct skl_module_cfg *mconfig,
|
||||
struct snd_soc_tplg_vendor_uuid_elem *uuid_tkn)
|
||||
{
|
||||
if (uuid_tkn->token == SKL_TKN_UUID)
|
||||
memcpy(&mconfig->guid, &uuid_tkn->uuid, 16);
|
||||
else {
|
||||
dev_err(dev, "Not an UUID token tkn %d\n", uuid_tkn->token);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void skl_tplg_fill_pin_dynamic_val(
|
||||
struct skl_module_pin *mpin, u32 pin_count, u32 value)
|
||||
{
|
||||
@@ -2382,7 +2391,7 @@ static int skl_tplg_get_token(struct device *dev,
|
||||
case SKL_TKN_U32_MAX_MCPS:
|
||||
case SKL_TKN_U32_OBS:
|
||||
case SKL_TKN_U32_IBS:
|
||||
ret = skl_tplg_fill_res_tkn(dev, tkn_elem, res, dir, pin_index);
|
||||
ret = skl_tplg_fill_res_tkn(dev, tkn_elem, res, pin_index, dir);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -2488,6 +2497,7 @@ static int skl_tplg_get_token(struct device *dev,
|
||||
|
||||
case SKL_TKN_U32_PIN_MOD_ID:
|
||||
case SKL_TKN_U32_PIN_INST_ID:
|
||||
case SKL_TKN_UUID:
|
||||
ret = skl_tplg_fill_pins_info(dev,
|
||||
mconfig, tkn_elem, dir,
|
||||
pin_index);
|
||||
@@ -2550,6 +2560,7 @@ static int skl_tplg_get_tokens(struct device *dev,
|
||||
struct snd_soc_tplg_vendor_value_elem *tkn_elem;
|
||||
int tkn_count = 0, ret;
|
||||
int off = 0, tuple_size = 0;
|
||||
bool is_module_guid = true;
|
||||
|
||||
if (block_size <= 0)
|
||||
return -EINVAL;
|
||||
@@ -2565,7 +2576,15 @@ static int skl_tplg_get_tokens(struct device *dev,
|
||||
continue;
|
||||
|
||||
case SND_SOC_TPLG_TUPLE_TYPE_UUID:
|
||||
ret = skl_tplg_get_uuid(dev, mconfig, array->uuid);
|
||||
if (is_module_guid) {
|
||||
ret = skl_tplg_get_uuid(dev, mconfig->guid,
|
||||
array->uuid);
|
||||
is_module_guid = false;
|
||||
} else {
|
||||
ret = skl_tplg_get_token(dev, array->value, skl,
|
||||
mconfig);
|
||||
}
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@@ -34,7 +34,7 @@
|
||||
#define MAX_FIXED_DMIC_PARAMS_SIZE 727
|
||||
|
||||
/* Maximum number of coefficients up down mixer module */
|
||||
#define UP_DOWN_MIXER_MAX_COEFF 6
|
||||
#define UP_DOWN_MIXER_MAX_COEFF 8
|
||||
|
||||
#define MODULE_MAX_IN_PINS 8
|
||||
#define MODULE_MAX_OUT_PINS 8
|
||||
@@ -161,6 +161,7 @@ struct skl_up_down_mixer_cfg {
|
||||
u32 coeff_sel;
|
||||
/* Pass the user coeff in this array */
|
||||
s32 coeff[UP_DOWN_MIXER_MAX_COEFF];
|
||||
u32 ch_map;
|
||||
} __packed;
|
||||
|
||||
struct skl_algo_cfg {
|
||||
|
Reference in New Issue
Block a user