Merge remote-tracking branch 'asoc/topic/intel' into asoc-next
This commit is contained in:
@@ -613,8 +613,10 @@ skip_buf_size_calc:
|
||||
}
|
||||
|
||||
#define DMA_CONTROL_ID 5
|
||||
#define DMA_I2S_BLOB_SIZE 21
|
||||
|
||||
int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig)
|
||||
int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
|
||||
u32 caps_size, u32 node_id)
|
||||
{
|
||||
struct skl_dma_control *dma_ctrl;
|
||||
struct skl_ipc_large_config_msg msg = {0};
|
||||
@@ -624,24 +626,27 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, struct skl_module_cfg *mconfig)
|
||||
/*
|
||||
* if blob size zero, then return
|
||||
*/
|
||||
if (mconfig->formats_config.caps_size == 0)
|
||||
if (caps_size == 0)
|
||||
return 0;
|
||||
|
||||
msg.large_param_id = DMA_CONTROL_ID;
|
||||
msg.param_data_size = sizeof(struct skl_dma_control) +
|
||||
mconfig->formats_config.caps_size;
|
||||
msg.param_data_size = sizeof(struct skl_dma_control) + caps_size;
|
||||
|
||||
dma_ctrl = kzalloc(msg.param_data_size, GFP_KERNEL);
|
||||
if (dma_ctrl == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
dma_ctrl->node_id = skl_get_node_id(ctx, mconfig);
|
||||
dma_ctrl->node_id = node_id;
|
||||
|
||||
/* size in dwords */
|
||||
dma_ctrl->config_length = mconfig->formats_config.caps_size / 4;
|
||||
/*
|
||||
* NHLT blob may contain additional configs along with i2s blob.
|
||||
* firmware expects only the i2s blob size as the config_length.
|
||||
* So fix to i2s blob size.
|
||||
* size in dwords.
|
||||
*/
|
||||
dma_ctrl->config_length = DMA_I2S_BLOB_SIZE;
|
||||
|
||||
memcpy(dma_ctrl->config_data, mconfig->formats_config.caps,
|
||||
mconfig->formats_config.caps_size);
|
||||
memcpy(dma_ctrl->config_data, caps, caps_size);
|
||||
|
||||
err = skl_ipc_set_large_config(&ctx->ipc, &msg, (u32 *)dma_ctrl);
|
||||
|
||||
|
@@ -653,7 +653,7 @@ static const struct snd_soc_dai_ops skl_link_dai_ops = {
|
||||
.trigger = skl_link_pcm_trigger,
|
||||
};
|
||||
|
||||
static struct snd_soc_dai_driver skl_platform_dai[] = {
|
||||
static struct snd_soc_dai_driver skl_fe_dai[] = {
|
||||
{
|
||||
.name = "System Pin",
|
||||
.ops = &skl_pcm_dai_ops,
|
||||
@@ -797,8 +797,10 @@ static struct snd_soc_dai_driver skl_platform_dai[] = {
|
||||
.sig_bits = 32,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
/* BE CPU Dais */
|
||||
static struct snd_soc_dai_driver skl_platform_dai[] = {
|
||||
{
|
||||
.name = "SSP0 Pin",
|
||||
.ops = &skl_be_ssp_dai_ops,
|
||||
@@ -976,6 +978,14 @@ static struct snd_soc_dai_driver skl_platform_dai[] = {
|
||||
},
|
||||
};
|
||||
|
||||
int skl_dai_load(struct snd_soc_component *cmp,
|
||||
struct snd_soc_dai_driver *pcm_dai)
|
||||
{
|
||||
pcm_dai->ops = &skl_pcm_dai_ops;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int skl_platform_open(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
@@ -1363,6 +1373,8 @@ int skl_platform_register(struct device *dev)
|
||||
int ret;
|
||||
struct hdac_ext_bus *ebus = dev_get_drvdata(dev);
|
||||
struct skl *skl = ebus_to_skl(ebus);
|
||||
struct snd_soc_dai_driver *dais;
|
||||
int num_dais = ARRAY_SIZE(skl_platform_dai);
|
||||
|
||||
INIT_LIST_HEAD(&skl->ppl_list);
|
||||
INIT_LIST_HEAD(&skl->bind_list);
|
||||
@@ -1372,14 +1384,38 @@ int skl_platform_register(struct device *dev)
|
||||
dev_err(dev, "soc platform registration failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
ret = snd_soc_register_component(dev, &skl_component,
|
||||
skl_platform_dai,
|
||||
ARRAY_SIZE(skl_platform_dai));
|
||||
if (ret) {
|
||||
dev_err(dev, "soc component registration failed %d\n", ret);
|
||||
snd_soc_unregister_platform(dev);
|
||||
|
||||
skl->dais = kmemdup(skl_platform_dai, sizeof(skl_platform_dai),
|
||||
GFP_KERNEL);
|
||||
if (!skl->dais) {
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!skl->use_tplg_pcm) {
|
||||
dais = krealloc(skl->dais, sizeof(skl_fe_dai) +
|
||||
sizeof(skl_platform_dai), GFP_KERNEL);
|
||||
if (!dais) {
|
||||
ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
|
||||
skl->dais = dais;
|
||||
memcpy(&skl->dais[ARRAY_SIZE(skl_platform_dai)], skl_fe_dai,
|
||||
sizeof(skl_fe_dai));
|
||||
num_dais += ARRAY_SIZE(skl_fe_dai);
|
||||
}
|
||||
|
||||
ret = snd_soc_register_component(dev, &skl_component,
|
||||
skl->dais, num_dais);
|
||||
if (ret) {
|
||||
dev_err(dev, "soc component registration failed %d\n", ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
snd_soc_unregister_platform(dev);
|
||||
return ret;
|
||||
|
||||
}
|
||||
@@ -1399,5 +1435,7 @@ int skl_platform_unregister(struct device *dev)
|
||||
|
||||
snd_soc_unregister_component(dev);
|
||||
snd_soc_unregister_platform(dev);
|
||||
kfree(skl->dais);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -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)
|
||||
{
|
||||
@@ -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;
|
||||
|
||||
@@ -3331,6 +3350,7 @@ static struct snd_soc_tplg_ops skl_tplg_ops = {
|
||||
.io_ops = skl_tplg_kcontrol_ops,
|
||||
.io_ops_count = ARRAY_SIZE(skl_tplg_kcontrol_ops),
|
||||
.manifest = skl_manifest_load,
|
||||
.dai_load = skl_dai_load,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -3404,7 +3424,7 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
|
||||
|
||||
ret = request_firmware(&fw, skl->tplg_name, bus->dev);
|
||||
if (ret < 0) {
|
||||
dev_err(bus->dev, "tplg fw %s load failed with %d\n",
|
||||
dev_info(bus->dev, "tplg fw %s load failed with %d, falling back to dfw_sst.bin",
|
||||
skl->tplg_name, ret);
|
||||
ret = request_firmware(&fw, "dfw_sst.bin", bus->dev);
|
||||
if (ret < 0) {
|
||||
|
@@ -456,8 +456,8 @@ static inline struct skl *get_skl_ctx(struct device *dev)
|
||||
|
||||
int skl_tplg_be_update_params(struct snd_soc_dai *dai,
|
||||
struct skl_pipe_params *params);
|
||||
int skl_dsp_set_dma_control(struct skl_sst *ctx,
|
||||
struct skl_module_cfg *mconfig);
|
||||
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,
|
||||
@@ -502,4 +502,7 @@ int skl_pcm_host_dma_prepare(struct device *dev,
|
||||
struct skl_pipe_params *params);
|
||||
int skl_pcm_link_dma_prepare(struct device *dev,
|
||||
struct skl_pipe_params *params);
|
||||
|
||||
int skl_dai_load(struct snd_soc_component *cmp,
|
||||
struct snd_soc_dai_driver *pcm_dai);
|
||||
#endif
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/delay.h>
|
||||
#include <sound/pcm.h>
|
||||
#include "../common/sst-acpi.h"
|
||||
#include <sound/soc-acpi.h>
|
||||
#include <sound/hda_register.h>
|
||||
#include <sound/hdaudio.h>
|
||||
#include <sound/hda_i915.h>
|
||||
@@ -439,10 +439,10 @@ static int skl_machine_device_register(struct skl *skl, void *driver_data)
|
||||
{
|
||||
struct hdac_bus *bus = ebus_to_hbus(&skl->ebus);
|
||||
struct platform_device *pdev;
|
||||
struct sst_acpi_mach *mach = driver_data;
|
||||
struct snd_soc_acpi_mach *mach = driver_data;
|
||||
int ret;
|
||||
|
||||
mach = sst_acpi_find_machine(mach);
|
||||
mach = snd_soc_acpi_find_machine(mach);
|
||||
if (mach == NULL) {
|
||||
dev_err(bus->dev, "No matching machine driver found\n");
|
||||
return -ENODEV;
|
||||
@@ -462,8 +462,11 @@ static int skl_machine_device_register(struct skl *skl, void *driver_data)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (mach->pdata)
|
||||
if (mach->pdata) {
|
||||
skl->use_tplg_pcm =
|
||||
((struct skl_machine_pdata *)mach->pdata)->use_tplg_pcm;
|
||||
dev_set_drvdata(&pdev->dev, mach->pdata);
|
||||
}
|
||||
|
||||
skl->i2s_dev = pdev;
|
||||
|
||||
@@ -875,33 +878,36 @@ static void skl_remove(struct pci_dev *pci)
|
||||
dev_set_drvdata(&pci->dev, NULL);
|
||||
}
|
||||
|
||||
static struct sst_codecs skl_codecs = {
|
||||
static struct snd_soc_acpi_codecs skl_codecs = {
|
||||
.num_codecs = 1,
|
||||
.codecs = {"10508825"}
|
||||
};
|
||||
|
||||
static struct sst_codecs kbl_codecs = {
|
||||
static struct snd_soc_acpi_codecs kbl_codecs = {
|
||||
.num_codecs = 1,
|
||||
.codecs = {"10508825"}
|
||||
};
|
||||
|
||||
static struct sst_codecs bxt_codecs = {
|
||||
static struct snd_soc_acpi_codecs bxt_codecs = {
|
||||
.num_codecs = 1,
|
||||
.codecs = {"MX98357A"}
|
||||
};
|
||||
|
||||
static struct sst_codecs kbl_poppy_codecs = {
|
||||
static struct snd_soc_acpi_codecs kbl_poppy_codecs = {
|
||||
.num_codecs = 1,
|
||||
.codecs = {"10EC5663"}
|
||||
};
|
||||
|
||||
static struct sst_codecs kbl_5663_5514_codecs = {
|
||||
static struct snd_soc_acpi_codecs kbl_5663_5514_codecs = {
|
||||
.num_codecs = 2,
|
||||
.codecs = {"10EC5663", "10EC5514"}
|
||||
};
|
||||
|
||||
static struct skl_machine_pdata cnl_pdata = {
|
||||
.use_tplg_pcm = true,
|
||||
};
|
||||
|
||||
static struct sst_acpi_mach sst_skl_devdata[] = {
|
||||
static struct snd_soc_acpi_mach sst_skl_devdata[] = {
|
||||
{
|
||||
.id = "INT343A",
|
||||
.drv_name = "skl_alc286s_i2s",
|
||||
@@ -911,7 +917,7 @@ static struct sst_acpi_mach sst_skl_devdata[] = {
|
||||
.id = "INT343B",
|
||||
.drv_name = "skl_n88l25_s4567",
|
||||
.fw_filename = "intel/dsp_fw_release.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &skl_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
@@ -919,14 +925,14 @@ static struct sst_acpi_mach sst_skl_devdata[] = {
|
||||
.id = "MX98357A",
|
||||
.drv_name = "skl_n88l25_m98357a",
|
||||
.fw_filename = "intel/dsp_fw_release.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &skl_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct sst_acpi_mach sst_bxtp_devdata[] = {
|
||||
static struct snd_soc_acpi_mach sst_bxtp_devdata[] = {
|
||||
{
|
||||
.id = "INT343A",
|
||||
.drv_name = "bxt_alc298s_i2s",
|
||||
@@ -936,13 +942,13 @@ static struct sst_acpi_mach sst_bxtp_devdata[] = {
|
||||
.id = "DLGS7219",
|
||||
.drv_name = "bxt_da7219_max98357a_i2s",
|
||||
.fw_filename = "intel/dsp_fw_bxtn.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &bxt_codecs,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
static struct snd_soc_acpi_mach sst_kbl_devdata[] = {
|
||||
{
|
||||
.id = "INT343A",
|
||||
.drv_name = "kbl_alc286s_i2s",
|
||||
@@ -952,7 +958,7 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
.id = "INT343B",
|
||||
.drv_name = "kbl_n88l25_s4567",
|
||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &kbl_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
@@ -960,7 +966,7 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
.id = "MX98357A",
|
||||
.drv_name = "kbl_n88l25_m98357a",
|
||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &kbl_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
@@ -968,7 +974,7 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
.id = "MX98927",
|
||||
.drv_name = "kbl_r5514_5663_max",
|
||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &kbl_5663_5514_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
@@ -976,7 +982,7 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
.id = "MX98927",
|
||||
.drv_name = "kbl_rt5663_m98927",
|
||||
.fw_filename = "intel/dsp_fw_kbl.bin",
|
||||
.machine_quirk = sst_acpi_codec_list,
|
||||
.machine_quirk = snd_soc_acpi_codec_list,
|
||||
.quirk_data = &kbl_poppy_codecs,
|
||||
.pdata = &skl_dmic_data
|
||||
},
|
||||
@@ -989,7 +995,7 @@ static struct sst_acpi_mach sst_kbl_devdata[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static struct sst_acpi_mach sst_glk_devdata[] = {
|
||||
static struct snd_soc_acpi_mach sst_glk_devdata[] = {
|
||||
{
|
||||
.id = "INT343A",
|
||||
.drv_name = "glk_alc298s_i2s",
|
||||
@@ -998,12 +1004,14 @@ static struct sst_acpi_mach sst_glk_devdata[] = {
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct sst_acpi_mach sst_cnl_devdata[] = {
|
||||
static const struct snd_soc_acpi_mach sst_cnl_devdata[] = {
|
||||
{
|
||||
.id = "INT34C2",
|
||||
.drv_name = "cnl_rt274",
|
||||
.fw_filename = "intel/dsp_fw_cnl.bin",
|
||||
.pdata = &cnl_pdata,
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
/* PCI IDs */
|
||||
|
@@ -53,6 +53,7 @@ struct skl {
|
||||
struct platform_device *dmic_dev;
|
||||
struct platform_device *i2s_dev;
|
||||
struct snd_soc_platform *platform;
|
||||
struct snd_soc_dai_driver *dais;
|
||||
|
||||
struct nhlt_acpi_table *nhlt; /* nhlt ptr */
|
||||
struct skl_sst *skl_sst; /* sst skl ctx */
|
||||
@@ -73,6 +74,7 @@ struct skl {
|
||||
struct skl_debug *debugfs;
|
||||
u8 nr_modules;
|
||||
struct skl_module **modules;
|
||||
bool use_tplg_pcm;
|
||||
};
|
||||
|
||||
#define skl_to_ebus(s) (&(s)->ebus)
|
||||
@@ -85,9 +87,9 @@ struct skl_dma_params {
|
||||
u8 stream_tag;
|
||||
};
|
||||
|
||||
/* to pass dmic data */
|
||||
struct skl_machine_pdata {
|
||||
u32 dmic_num;
|
||||
bool use_tplg_pcm; /* use dais and dai links from topology */
|
||||
};
|
||||
|
||||
struct skl_dsp_ops {
|
||||
|
Reference in New Issue
Block a user