Merge branch 'topic/component-platform' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-intel
这个提交包含在:
@@ -1414,11 +1414,11 @@ static int sst_fill_module_list(struct snd_kcontrol *kctl,
|
||||
* name. First part of control name contains the pipe name (widget name).
|
||||
*/
|
||||
static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w,
|
||||
struct snd_soc_platform *platform)
|
||||
struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_kcontrol *kctl;
|
||||
int index, ret = 0;
|
||||
struct snd_card *card = platform->component.card->snd_card;
|
||||
struct snd_card *card = component->card->snd_card;
|
||||
char *idx;
|
||||
|
||||
down_read(&card->controls_rwsem);
|
||||
@@ -1468,13 +1468,13 @@ static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w,
|
||||
/**
|
||||
* sst_fill_linked_widgets - fill the parent pointer for the linked widget
|
||||
*/
|
||||
static void sst_fill_linked_widgets(struct snd_soc_platform *platform,
|
||||
static void sst_fill_linked_widgets(struct snd_soc_component *component,
|
||||
struct sst_ids *ids)
|
||||
{
|
||||
struct snd_soc_dapm_widget *w;
|
||||
unsigned int len = strlen(ids->parent_wname);
|
||||
|
||||
list_for_each_entry(w, &platform->component.card->widgets, list) {
|
||||
list_for_each_entry(w, &component->card->widgets, list) {
|
||||
if (!strncmp(ids->parent_wname, w->name, len)) {
|
||||
ids->parent_w = w;
|
||||
break;
|
||||
@@ -1485,41 +1485,41 @@ static void sst_fill_linked_widgets(struct snd_soc_platform *platform,
|
||||
/**
|
||||
* sst_map_modules_to_pipe - fill algo/gains list for all pipes
|
||||
*/
|
||||
static int sst_map_modules_to_pipe(struct snd_soc_platform *platform)
|
||||
static int sst_map_modules_to_pipe(struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_soc_dapm_widget *w;
|
||||
int ret = 0;
|
||||
|
||||
list_for_each_entry(w, &platform->component.card->widgets, list) {
|
||||
list_for_each_entry(w, &component->card->widgets, list) {
|
||||
if (is_sst_dapm_widget(w) && (w->priv)) {
|
||||
struct sst_ids *ids = w->priv;
|
||||
|
||||
dev_dbg(platform->dev, "widget type=%d name=%s\n",
|
||||
dev_dbg(component->dev, "widget type=%d name=%s\n",
|
||||
w->id, w->name);
|
||||
INIT_LIST_HEAD(&ids->algo_list);
|
||||
INIT_LIST_HEAD(&ids->gain_list);
|
||||
ret = sst_fill_widget_module_info(w, platform);
|
||||
ret = sst_fill_widget_module_info(w, component);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* fill linked widgets */
|
||||
if (ids->parent_wname != NULL)
|
||||
sst_fill_linked_widgets(platform, ids);
|
||||
sst_fill_linked_widgets(component, ids);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sst_dsp_init_v2_dpcm(struct snd_soc_platform *platform)
|
||||
int sst_dsp_init_v2_dpcm(struct snd_soc_component *component)
|
||||
{
|
||||
int i, ret = 0;
|
||||
struct snd_soc_dapm_context *dapm =
|
||||
snd_soc_component_get_dapm(&platform->component);
|
||||
struct sst_data *drv = snd_soc_platform_get_drvdata(platform);
|
||||
snd_soc_component_get_dapm(component);
|
||||
struct sst_data *drv = snd_soc_component_get_drvdata(component);
|
||||
unsigned int gains = ARRAY_SIZE(sst_gain_controls)/3;
|
||||
|
||||
drv->byte_stream = devm_kzalloc(platform->dev,
|
||||
drv->byte_stream = devm_kzalloc(component->dev,
|
||||
SST_MAX_BIN_BYTES, GFP_KERNEL);
|
||||
if (!drv->byte_stream)
|
||||
return -ENOMEM;
|
||||
@@ -1537,26 +1537,26 @@ int sst_dsp_init_v2_dpcm(struct snd_soc_platform *platform)
|
||||
sst_gains[i].ramp_duration = SST_GAIN_RAMP_DURATION_DEFAULT;
|
||||
}
|
||||
|
||||
ret = snd_soc_add_platform_controls(platform, sst_gain_controls,
|
||||
ret = snd_soc_add_component_controls(component, sst_gain_controls,
|
||||
ARRAY_SIZE(sst_gain_controls));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Initialize algo control params */
|
||||
ret = sst_algo_control_init(platform->dev);
|
||||
ret = sst_algo_control_init(component->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = snd_soc_add_platform_controls(platform, sst_algo_controls,
|
||||
ret = snd_soc_add_component_controls(component, sst_algo_controls,
|
||||
ARRAY_SIZE(sst_algo_controls));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = snd_soc_add_platform_controls(platform, sst_slot_controls,
|
||||
ret = snd_soc_add_component_controls(component, sst_slot_controls,
|
||||
ARRAY_SIZE(sst_slot_controls));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = sst_map_modules_to_pipe(platform);
|
||||
ret = sst_map_modules_to_pipe(component);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@@ -107,8 +107,8 @@ static int sst_platform_compr_set_params(struct snd_compr_stream *cstream,
|
||||
struct snd_sst_params str_params;
|
||||
struct sst_compress_cb cb;
|
||||
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
|
||||
struct snd_soc_platform *platform = rtd->platform;
|
||||
struct sst_data *ctx = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_data *ctx = snd_soc_component_get_drvdata(component);
|
||||
|
||||
stream = cstream->runtime->private_data;
|
||||
/* construct fw structure for this*/
|
||||
|
@@ -697,26 +697,22 @@ static int sst_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int sst_soc_probe(struct snd_soc_platform *platform)
|
||||
static int sst_soc_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct sst_data *drv = dev_get_drvdata(platform->dev);
|
||||
struct sst_data *drv = dev_get_drvdata(component->dev);
|
||||
|
||||
drv->soc_card = platform->component.card;
|
||||
return sst_dsp_init_v2_dpcm(platform);
|
||||
drv->soc_card = component->card;
|
||||
return sst_dsp_init_v2_dpcm(component);
|
||||
}
|
||||
|
||||
static const struct snd_soc_platform_driver sst_soc_platform_drv = {
|
||||
static const struct snd_soc_component_driver sst_soc_platform_drv = {
|
||||
.name = DRV_NAME,
|
||||
.probe = sst_soc_probe,
|
||||
.ops = &sst_platform_ops,
|
||||
.compr_ops = &sst_platform_compr_ops,
|
||||
.pcm_new = sst_pcm_new,
|
||||
};
|
||||
|
||||
static const struct snd_soc_component_driver sst_component = {
|
||||
.name = "sst",
|
||||
};
|
||||
|
||||
|
||||
static int sst_platform_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct sst_data *drv;
|
||||
@@ -740,26 +736,16 @@ static int sst_platform_probe(struct platform_device *pdev)
|
||||
mutex_init(&drv->lock);
|
||||
dev_set_drvdata(&pdev->dev, drv);
|
||||
|
||||
ret = snd_soc_register_platform(&pdev->dev, &sst_soc_platform_drv);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "registering soc platform failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = snd_soc_register_component(&pdev->dev, &sst_component,
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &sst_soc_platform_drv,
|
||||
sst_platform_dai, ARRAY_SIZE(sst_platform_dai));
|
||||
if (ret) {
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "registering cpu dais failed\n");
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int sst_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
|
||||
snd_soc_unregister_component(&pdev->dev);
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
dev_dbg(&pdev->dev, "sst_platform_remove success\n");
|
||||
return 0;
|
||||
}
|
||||
|
@@ -27,6 +27,8 @@
|
||||
extern struct sst_device *sst;
|
||||
extern const struct snd_compr_ops sst_platform_compr_ops;
|
||||
|
||||
#define DRV_NAME "sst"
|
||||
|
||||
#define SST_MONO 1
|
||||
#define SST_STEREO 2
|
||||
#define SST_MAX_CAP 5
|
||||
@@ -155,7 +157,7 @@ struct sst_device {
|
||||
|
||||
struct sst_data;
|
||||
|
||||
int sst_dsp_init_v2_dpcm(struct snd_soc_platform *platform);
|
||||
int sst_dsp_init_v2_dpcm(struct snd_soc_component *component);
|
||||
int sst_send_pipe_gains(struct snd_soc_dai *dai, int stream, int mute);
|
||||
int send_ssp_cmd(struct snd_soc_dai *dai, const char *id, bool enable);
|
||||
int sst_handle_vb_timer(struct snd_soc_dai *dai, bool enable);
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "../common/sst-dsp-priv.h"
|
||||
#include "../common/sst-dsp.h"
|
||||
|
||||
#define DRV_NAME "byt-dai"
|
||||
#define BYT_PCM_COUNT 2
|
||||
|
||||
static const struct snd_pcm_hardware sst_byt_pcm_hardware = {
|
||||
@@ -69,8 +70,8 @@ static int sst_byt_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
u32 rate, bits;
|
||||
@@ -141,8 +142,8 @@ static int sst_byt_pcm_hw_free(struct snd_pcm_substream *substream)
|
||||
static int sst_byt_pcm_restore_stream_context(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
int ret;
|
||||
@@ -174,8 +175,8 @@ static void sst_byt_pcm_work(struct work_struct *work)
|
||||
static int sst_byt_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
|
||||
@@ -216,8 +217,8 @@ static u32 byt_notify_pointer(struct sst_byt_stream *stream, void *data)
|
||||
struct snd_pcm_substream *substream = pcm_data->substream;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
u32 pos, hw_pos;
|
||||
|
||||
@@ -238,8 +239,8 @@ static snd_pcm_uframes_t sst_byt_pcm_pointer(struct snd_pcm_substream *substream
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
|
||||
dev_dbg(rtd->dev, "PCM: DMA pointer %u bytes\n", pcm_data->hw_ptr);
|
||||
@@ -250,8 +251,8 @@ static snd_pcm_uframes_t sst_byt_pcm_pointer(struct snd_pcm_substream *substream
|
||||
static int sst_byt_pcm_open(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
|
||||
@@ -278,8 +279,8 @@ static int sst_byt_pcm_open(struct snd_pcm_substream *substream)
|
||||
static int sst_byt_pcm_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct sst_byt_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_byt_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_byt_pcm_data *pcm_data = &pdata->pcm[substream->stream];
|
||||
struct sst_byt *byt = pdata->byt;
|
||||
int ret;
|
||||
@@ -324,8 +325,8 @@ static int sst_byt_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_pcm *pcm = rtd->pcm;
|
||||
size_t size;
|
||||
struct snd_soc_platform *platform = rtd->platform;
|
||||
struct sst_pdata *pdata = dev_get_platdata(platform->dev);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
int ret = 0;
|
||||
|
||||
if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream ||
|
||||
@@ -366,21 +367,21 @@ static struct snd_soc_dai_driver byt_dais[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static int sst_byt_pcm_probe(struct snd_soc_platform *platform)
|
||||
static int sst_byt_pcm_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct sst_pdata *plat_data = dev_get_platdata(platform->dev);
|
||||
struct sst_pdata *plat_data = dev_get_platdata(component->dev);
|
||||
struct sst_byt_priv_data *priv_data;
|
||||
int i;
|
||||
|
||||
if (!plat_data)
|
||||
return -ENODEV;
|
||||
|
||||
priv_data = devm_kzalloc(platform->dev, sizeof(*priv_data),
|
||||
priv_data = devm_kzalloc(component->dev, sizeof(*priv_data),
|
||||
GFP_KERNEL);
|
||||
if (!priv_data)
|
||||
return -ENOMEM;
|
||||
priv_data->byt = plat_data->dsp;
|
||||
snd_soc_platform_set_drvdata(platform, priv_data);
|
||||
snd_soc_component_set_drvdata(component, priv_data);
|
||||
|
||||
for (i = 0; i < BYT_PCM_COUNT; i++) {
|
||||
mutex_init(&priv_data->pcm[i].mutex);
|
||||
@@ -390,22 +391,13 @@ static int sst_byt_pcm_probe(struct snd_soc_platform *platform)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sst_byt_pcm_remove(struct snd_soc_platform *platform)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_platform_driver byt_soc_platform = {
|
||||
static const struct snd_soc_component_driver byt_dai_component = {
|
||||
.name = DRV_NAME,
|
||||
.probe = sst_byt_pcm_probe,
|
||||
.remove = sst_byt_pcm_remove,
|
||||
.ops = &sst_byt_pcm_ops,
|
||||
.pcm_new = sst_byt_pcm_new,
|
||||
};
|
||||
|
||||
static const struct snd_soc_component_driver byt_dai_component = {
|
||||
.name = "byt-dai",
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int sst_byt_pcm_dev_suspend_late(struct device *dev)
|
||||
{
|
||||
@@ -461,19 +453,13 @@ static int sst_byt_pcm_dev_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
return -ENODEV;
|
||||
|
||||
ret = snd_soc_register_platform(&pdev->dev, &byt_soc_platform);
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &byt_dai_component,
|
||||
byt_dais, ARRAY_SIZE(byt_dais));
|
||||
if (ret < 0)
|
||||
goto err_plat;
|
||||
|
||||
ret = snd_soc_register_component(&pdev->dev, &byt_dai_component,
|
||||
byt_dais, ARRAY_SIZE(byt_dais));
|
||||
if (ret < 0)
|
||||
goto err_comp;
|
||||
|
||||
return 0;
|
||||
|
||||
err_comp:
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
err_plat:
|
||||
sst_byt_dsp_free(&pdev->dev, sst_pdata);
|
||||
return ret;
|
||||
@@ -483,8 +469,6 @@ static int sst_byt_pcm_dev_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct sst_pdata *sst_pdata = dev_get_platdata(&pdev->dev);
|
||||
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
snd_soc_unregister_component(&pdev->dev);
|
||||
sst_byt_dsp_free(&pdev->dev, sst_pdata);
|
||||
|
||||
return 0;
|
||||
|
@@ -183,7 +183,8 @@ static const struct snd_soc_ops bdw_rt5677_ops = {
|
||||
|
||||
static int bdw_rt5677_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct sst_pdata *pdata = dev_get_platdata(rtd->platform->dev);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
struct sst_hsw *broadwell = pdata->dsp;
|
||||
int ret;
|
||||
|
||||
|
@@ -132,7 +132,8 @@ static const struct snd_soc_ops broadwell_rt286_ops = {
|
||||
|
||||
static int broadwell_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct sst_pdata *pdata = dev_get_platdata(rtd->platform->dev);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
struct sst_hsw *broadwell = pdata->dsp;
|
||||
int ret;
|
||||
|
||||
|
@@ -87,7 +87,8 @@ static const struct snd_soc_ops haswell_rt5640_ops = {
|
||||
|
||||
static int haswell_rtd_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct sst_pdata *pdata = dev_get_platdata(rtd->platform->dev);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
struct sst_hsw *haswell = pdata->dsp;
|
||||
int ret;
|
||||
|
||||
|
@@ -22,6 +22,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <sound/asound.h>
|
||||
|
||||
#define DRV_NAME "haswell-dai"
|
||||
|
||||
#define SST_HSW_NO_CHANNELS 4
|
||||
#define SST_HSW_MAX_DX_REGIONS 14
|
||||
#define SST_HSW_DX_CONTEXT_SIZE (640 * 1024)
|
||||
|
@@ -181,11 +181,11 @@ static inline unsigned int hsw_ipc_to_mixer(u32 value)
|
||||
static int hsw_stream_volume_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct soc_mixer_control *mc =
|
||||
(struct soc_mixer_control *)kcontrol->private_value;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(platform);
|
||||
snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
u32 volume;
|
||||
@@ -230,11 +230,11 @@ static int hsw_stream_volume_put(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_stream_volume_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct soc_mixer_control *mc =
|
||||
(struct soc_mixer_control *)kcontrol->private_value;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(platform);
|
||||
snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
u32 volume;
|
||||
@@ -273,8 +273,8 @@ static int hsw_stream_volume_get(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_volume_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
u32 volume;
|
||||
|
||||
@@ -302,8 +302,8 @@ static int hsw_volume_put(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_volume_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
unsigned int volume = 0;
|
||||
|
||||
@@ -322,8 +322,8 @@ static int hsw_volume_get(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_waves_switch_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
enum sst_hsw_module_id id = SST_HSW_MODULE_WAVES;
|
||||
|
||||
@@ -336,8 +336,8 @@ static int hsw_waves_switch_get(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_waves_switch_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
int ret = 0;
|
||||
enum sst_hsw_module_id id = SST_HSW_MODULE_WAVES;
|
||||
@@ -370,8 +370,8 @@ static int hsw_waves_switch_put(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_waves_param_get(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
|
||||
/* return a matching line from param buffer */
|
||||
@@ -381,8 +381,8 @@ static int hsw_waves_param_get(struct snd_kcontrol *kcontrol,
|
||||
static int hsw_waves_param_put(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_platform *platform = snd_soc_kcontrol_platform(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_platform_get_drvdata(platform);
|
||||
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
int ret;
|
||||
enum sst_hsw_module_id id = SST_HSW_MODULE_WAVES;
|
||||
@@ -472,8 +472,8 @@ static int hsw_pcm_hw_params(struct snd_pcm_substream *substream,
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
struct sst_module *module_data;
|
||||
@@ -674,8 +674,8 @@ static int hsw_pcm_hw_free(struct snd_pcm_substream *substream)
|
||||
static int hsw_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw_stream *sst_stream;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
@@ -718,8 +718,8 @@ static u32 hsw_notify_pointer(struct sst_hsw_stream *stream, void *data)
|
||||
struct snd_pcm_substream *substream = pcm_data->substream;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
u32 pos;
|
||||
snd_pcm_uframes_t position = bytes_to_frames(runtime,
|
||||
@@ -783,8 +783,8 @@ static snd_pcm_uframes_t hsw_pcm_pointer(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
snd_pcm_uframes_t offset;
|
||||
@@ -807,8 +807,8 @@ static snd_pcm_uframes_t hsw_pcm_pointer(struct snd_pcm_substream *substream)
|
||||
static int hsw_pcm_open(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
int dai;
|
||||
@@ -840,8 +840,8 @@ static int hsw_pcm_open(struct snd_pcm_substream *substream)
|
||||
static int hsw_pcm_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct hsw_priv_data *pdata =
|
||||
snd_soc_platform_get_drvdata(rtd->platform);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct hsw_priv_data *pdata = snd_soc_component_get_drvdata(component);
|
||||
struct hsw_pcm_data *pcm_data;
|
||||
struct sst_hsw *hsw = pdata->hsw;
|
||||
int ret, dai;
|
||||
@@ -942,9 +942,9 @@ static void hsw_pcm_free_modules(struct hsw_priv_data *pdata)
|
||||
static int hsw_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_pcm *pcm = rtd->pcm;
|
||||
struct snd_soc_platform *platform = rtd->platform;
|
||||
struct sst_pdata *pdata = dev_get_platdata(platform->dev);
|
||||
struct hsw_priv_data *priv_data = dev_get_drvdata(platform->dev);
|
||||
struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
struct hsw_priv_data *priv_data = dev_get_drvdata(component->dev);
|
||||
struct device *dev = pdata->dma_dev;
|
||||
int ret = 0;
|
||||
|
||||
@@ -1052,23 +1052,23 @@ static const struct snd_soc_dapm_route graph[] = {
|
||||
{"Analog Capture", NULL, "SSP0 CODEC IN"},
|
||||
};
|
||||
|
||||
static int hsw_pcm_probe(struct snd_soc_platform *platform)
|
||||
static int hsw_pcm_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct hsw_priv_data *priv_data = snd_soc_platform_get_drvdata(platform);
|
||||
struct sst_pdata *pdata = dev_get_platdata(platform->dev);
|
||||
struct hsw_priv_data *priv_data = snd_soc_component_get_drvdata(component);
|
||||
struct sst_pdata *pdata = dev_get_platdata(component->dev);
|
||||
struct device *dma_dev, *dev;
|
||||
int i, ret = 0;
|
||||
|
||||
if (!pdata)
|
||||
return -ENODEV;
|
||||
|
||||
dev = platform->dev;
|
||||
dev = component->dev;
|
||||
dma_dev = pdata->dma_dev;
|
||||
|
||||
priv_data->hsw = pdata->dsp;
|
||||
priv_data->dev = platform->dev;
|
||||
priv_data->dev = dev;
|
||||
priv_data->pm_state = HSW_PM_STATE_D0;
|
||||
priv_data->soc_card = platform->component.card;
|
||||
priv_data->soc_card = component->card;
|
||||
|
||||
/* allocate DSP buffer page tables */
|
||||
for (i = 0; i < ARRAY_SIZE(hsw_dais); i++) {
|
||||
@@ -1098,11 +1098,10 @@ static int hsw_pcm_probe(struct snd_soc_platform *platform)
|
||||
goto err;
|
||||
|
||||
/* enable runtime PM with auto suspend */
|
||||
pm_runtime_set_autosuspend_delay(platform->dev,
|
||||
SST_RUNTIME_SUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(platform->dev);
|
||||
pm_runtime_enable(platform->dev);
|
||||
pm_runtime_idle(platform->dev);
|
||||
pm_runtime_set_autosuspend_delay(dev, SST_RUNTIME_SUSPEND_DELAY);
|
||||
pm_runtime_use_autosuspend(dev);
|
||||
pm_runtime_enable(dev);
|
||||
pm_runtime_idle(dev);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1116,13 +1115,13 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hsw_pcm_remove(struct snd_soc_platform *platform)
|
||||
static void hsw_pcm_remove(struct snd_soc_component *component)
|
||||
{
|
||||
struct hsw_priv_data *priv_data =
|
||||
snd_soc_platform_get_drvdata(platform);
|
||||
snd_soc_component_get_drvdata(component);
|
||||
int i;
|
||||
|
||||
pm_runtime_disable(platform->dev);
|
||||
pm_runtime_disable(component->dev);
|
||||
hsw_pcm_free_modules(priv_data);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hsw_dais); i++) {
|
||||
@@ -1131,24 +1130,19 @@ static int hsw_pcm_remove(struct snd_soc_platform *platform)
|
||||
if (hsw_dais[i].capture.channels_min)
|
||||
snd_dma_free_pages(&priv_data->dmab[i][1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_platform_driver hsw_soc_platform = {
|
||||
static const struct snd_soc_component_driver hsw_dai_component = {
|
||||
.name = DRV_NAME,
|
||||
.probe = hsw_pcm_probe,
|
||||
.remove = hsw_pcm_remove,
|
||||
.ops = &hsw_pcm_ops,
|
||||
.pcm_new = hsw_pcm_new,
|
||||
};
|
||||
|
||||
static const struct snd_soc_component_driver hsw_dai_component = {
|
||||
.name = "haswell-dai",
|
||||
.controls = hsw_volume_controls,
|
||||
.num_controls = ARRAY_SIZE(hsw_volume_controls),
|
||||
.dapm_widgets = widgets,
|
||||
.controls = hsw_volume_controls,
|
||||
.num_controls = ARRAY_SIZE(hsw_volume_controls),
|
||||
.dapm_widgets = widgets,
|
||||
.num_dapm_widgets = ARRAY_SIZE(widgets),
|
||||
.dapm_routes = graph,
|
||||
.dapm_routes = graph,
|
||||
.num_dapm_routes = ARRAY_SIZE(graph),
|
||||
};
|
||||
|
||||
@@ -1172,19 +1166,13 @@ static int hsw_pcm_dev_probe(struct platform_device *pdev)
|
||||
priv_data->hsw = sst_pdata->dsp;
|
||||
platform_set_drvdata(pdev, priv_data);
|
||||
|
||||
ret = snd_soc_register_platform(&pdev->dev, &hsw_soc_platform);
|
||||
ret = devm_snd_soc_register_component(&pdev->dev, &hsw_dai_component,
|
||||
hsw_dais, ARRAY_SIZE(hsw_dais));
|
||||
if (ret < 0)
|
||||
goto err_plat;
|
||||
|
||||
ret = snd_soc_register_component(&pdev->dev, &hsw_dai_component,
|
||||
hsw_dais, ARRAY_SIZE(hsw_dais));
|
||||
if (ret < 0)
|
||||
goto err_comp;
|
||||
|
||||
return 0;
|
||||
|
||||
err_comp:
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
err_plat:
|
||||
sst_hsw_dsp_free(&pdev->dev, sst_pdata);
|
||||
return 0;
|
||||
@@ -1194,8 +1182,6 @@ static int hsw_pcm_dev_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct sst_pdata *sst_pdata = dev_get_platdata(&pdev->dev);
|
||||
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
snd_soc_unregister_component(&pdev->dev);
|
||||
sst_hsw_dsp_free(&pdev->dev, sst_pdata);
|
||||
|
||||
return 0;
|
||||
|
@@ -231,7 +231,7 @@ struct skl_debug *skl_debugfs_init(struct skl *skl)
|
||||
|
||||
/* create the debugfs dir with platform component's debugfs as parent */
|
||||
d->fs = debugfs_create_dir("dsp",
|
||||
skl->platform->component.debugfs_root);
|
||||
skl->component->debugfs_root);
|
||||
if (IS_ERR(d->fs) || !d->fs) {
|
||||
dev_err(&skl->pci->dev, "debugfs root creation failed\n");
|
||||
return NULL;
|
||||
|
@@ -1326,23 +1326,23 @@ static int skl_populate_modules(struct skl *skl)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int skl_platform_soc_probe(struct snd_soc_platform *platform)
|
||||
static int skl_platform_soc_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct hdac_ext_bus *ebus = dev_get_drvdata(platform->dev);
|
||||
struct hdac_ext_bus *ebus = dev_get_drvdata(component->dev);
|
||||
struct skl *skl = ebus_to_skl(ebus);
|
||||
const struct skl_dsp_ops *ops;
|
||||
int ret;
|
||||
|
||||
pm_runtime_get_sync(platform->dev);
|
||||
pm_runtime_get_sync(component->dev);
|
||||
if ((ebus_to_hbus(ebus))->ppcap) {
|
||||
skl->platform = platform;
|
||||
skl->component = component;
|
||||
|
||||
/* init debugfs */
|
||||
skl->debugfs = skl_debugfs_init(skl);
|
||||
|
||||
ret = skl_tplg_init(platform, ebus);
|
||||
ret = skl_tplg_init(component, ebus);
|
||||
if (ret < 0) {
|
||||
dev_err(platform->dev, "Failed to init topology!\n");
|
||||
dev_err(component->dev, "Failed to init topology!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1352,17 +1352,17 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
|
||||
return -EIO;
|
||||
|
||||
if (skl->skl_sst->is_first_boot == false) {
|
||||
dev_err(platform->dev, "DSP reports first boot done!!!\n");
|
||||
dev_err(component->dev, "DSP reports first boot done!!!\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
/* disable dynamic clock gating during fw and lib download */
|
||||
skl->skl_sst->enable_miscbdcge(platform->dev, false);
|
||||
skl->skl_sst->enable_miscbdcge(component->dev, false);
|
||||
|
||||
ret = ops->init_fw(platform->dev, skl->skl_sst);
|
||||
skl->skl_sst->enable_miscbdcge(platform->dev, true);
|
||||
ret = ops->init_fw(component->dev, skl->skl_sst);
|
||||
skl->skl_sst->enable_miscbdcge(component->dev, true);
|
||||
if (ret < 0) {
|
||||
dev_err(platform->dev, "Failed to boot first fw: %d\n", ret);
|
||||
dev_err(component->dev, "Failed to boot first fw: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
skl_populate_modules(skl);
|
||||
@@ -1375,22 +1375,20 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)
|
||||
skl->cfg.astate_cfg);
|
||||
}
|
||||
}
|
||||
pm_runtime_mark_last_busy(platform->dev);
|
||||
pm_runtime_put_autosuspend(platform->dev);
|
||||
pm_runtime_mark_last_busy(component->dev);
|
||||
pm_runtime_put_autosuspend(component->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static const struct snd_soc_platform_driver skl_platform_drv = {
|
||||
|
||||
static const struct snd_soc_component_driver skl_component = {
|
||||
.name = "pcm",
|
||||
.probe = skl_platform_soc_probe,
|
||||
.ops = &skl_platform_ops,
|
||||
.pcm_new = skl_pcm_new,
|
||||
.pcm_free = skl_pcm_free,
|
||||
};
|
||||
|
||||
static const struct snd_soc_component_driver skl_component = {
|
||||
.name = "pcm",
|
||||
};
|
||||
|
||||
int skl_platform_register(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
@@ -1402,12 +1400,6 @@ int skl_platform_register(struct device *dev)
|
||||
INIT_LIST_HEAD(&skl->ppl_list);
|
||||
INIT_LIST_HEAD(&skl->bind_list);
|
||||
|
||||
ret = snd_soc_register_platform(dev, &skl_platform_drv);
|
||||
if (ret) {
|
||||
dev_err(dev, "soc platform registration failed %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
skl->dais = kmemdup(skl_platform_dai, sizeof(skl_platform_dai),
|
||||
GFP_KERNEL);
|
||||
if (!skl->dais) {
|
||||
@@ -1429,18 +1421,12 @@ int skl_platform_register(struct device *dev)
|
||||
num_dais += ARRAY_SIZE(skl_fe_dai);
|
||||
}
|
||||
|
||||
ret = snd_soc_register_component(dev, &skl_component,
|
||||
ret = devm_snd_soc_register_component(dev, &skl_component,
|
||||
skl->dais, num_dais);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
dev_err(dev, "soc component registration failed %d\n", ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
snd_soc_unregister_platform(dev);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
int skl_platform_unregister(struct device *dev)
|
||||
@@ -1456,8 +1442,6 @@ int skl_platform_unregister(struct device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
snd_soc_unregister_component(dev);
|
||||
snd_soc_unregister_platform(dev);
|
||||
kfree(skl->dais);
|
||||
|
||||
return 0;
|
||||
|
@@ -2795,15 +2795,15 @@ static int skl_tplg_get_pvt_data(struct snd_soc_tplg_dapm_widget *tplg_w,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void skl_clear_pin_config(struct snd_soc_platform *platform,
|
||||
static void skl_clear_pin_config(struct snd_soc_component *component,
|
||||
struct snd_soc_dapm_widget *w)
|
||||
{
|
||||
int i;
|
||||
struct skl_module_cfg *mconfig;
|
||||
struct skl_pipe *pipe;
|
||||
|
||||
if (!strncmp(w->dapm->component->name, platform->component.name,
|
||||
strlen(platform->component.name))) {
|
||||
if (!strncmp(w->dapm->component->name, component->name,
|
||||
strlen(component->name))) {
|
||||
mconfig = w->priv;
|
||||
pipe = mconfig->pipe;
|
||||
for (i = 0; i < mconfig->module->max_input_pins; i++) {
|
||||
@@ -2822,14 +2822,14 @@ static void skl_clear_pin_config(struct snd_soc_platform *platform,
|
||||
void skl_cleanup_resources(struct skl *skl)
|
||||
{
|
||||
struct skl_sst *ctx = skl->skl_sst;
|
||||
struct snd_soc_platform *soc_platform = skl->platform;
|
||||
struct snd_soc_component *soc_component = skl->component;
|
||||
struct snd_soc_dapm_widget *w;
|
||||
struct snd_soc_card *card;
|
||||
|
||||
if (soc_platform == NULL)
|
||||
if (soc_component == NULL)
|
||||
return;
|
||||
|
||||
card = soc_platform->component.card;
|
||||
card = soc_component->card;
|
||||
if (!card || !card->instantiated)
|
||||
return;
|
||||
|
||||
@@ -2838,7 +2838,7 @@ void skl_cleanup_resources(struct skl *skl)
|
||||
|
||||
list_for_each_entry(w, &card->widgets, list) {
|
||||
if (is_skl_dsp_widget_type(w, ctx->dev) && w->priv != NULL)
|
||||
skl_clear_pin_config(soc_platform, w);
|
||||
skl_clear_pin_config(soc_component, w);
|
||||
}
|
||||
|
||||
skl_clear_module_cnt(ctx->dsp);
|
||||
@@ -3485,19 +3485,19 @@ static struct snd_soc_tplg_ops skl_tplg_ops = {
|
||||
* widgets in a pipelines, so this helper - skl_tplg_create_pipe_widget_list()
|
||||
* helps to get the SKL type widgets in that pipeline
|
||||
*/
|
||||
static int skl_tplg_create_pipe_widget_list(struct snd_soc_platform *platform)
|
||||
static int skl_tplg_create_pipe_widget_list(struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_soc_dapm_widget *w;
|
||||
struct skl_module_cfg *mcfg = NULL;
|
||||
struct skl_pipe_module *p_module = NULL;
|
||||
struct skl_pipe *pipe;
|
||||
|
||||
list_for_each_entry(w, &platform->component.card->widgets, list) {
|
||||
if (is_skl_dsp_widget_type(w, platform->dev) && w->priv) {
|
||||
list_for_each_entry(w, &component->card->widgets, list) {
|
||||
if (is_skl_dsp_widget_type(w, component->dev) && w->priv) {
|
||||
mcfg = w->priv;
|
||||
pipe = mcfg->pipe;
|
||||
|
||||
p_module = devm_kzalloc(platform->dev,
|
||||
p_module = devm_kzalloc(component->dev,
|
||||
sizeof(*p_module), GFP_KERNEL);
|
||||
if (!p_module)
|
||||
return -ENOMEM;
|
||||
@@ -3540,7 +3540,7 @@ static void skl_tplg_set_pipe_type(struct skl *skl, struct skl_pipe *pipe)
|
||||
/*
|
||||
* SKL topology init routine
|
||||
*/
|
||||
int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
|
||||
int skl_tplg_init(struct snd_soc_component *component, struct hdac_ext_bus *ebus)
|
||||
{
|
||||
int ret;
|
||||
const struct firmware *fw;
|
||||
@@ -3564,7 +3564,7 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
|
||||
* The complete tplg for SKL is loaded as index 0, we don't use
|
||||
* any other index
|
||||
*/
|
||||
ret = snd_soc_tplg_component_load(&platform->component,
|
||||
ret = snd_soc_tplg_component_load(component,
|
||||
&skl_tplg_ops, fw, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(bus->dev, "tplg component load failed%d\n", ret);
|
||||
@@ -3576,7 +3576,7 @@ int skl_tplg_init(struct snd_soc_platform *platform, struct hdac_ext_bus *ebus)
|
||||
skl->resource.max_mem = SKL_FW_MAX_MEM;
|
||||
|
||||
skl->tplg = fw;
|
||||
ret = skl_tplg_create_pipe_widget_list(platform);
|
||||
ret = skl_tplg_create_pipe_widget_list(component);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@@ -469,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);
|
||||
|
@@ -74,7 +74,7 @@ struct skl {
|
||||
struct platform_device *dmic_dev;
|
||||
struct platform_device *i2s_dev;
|
||||
struct platform_device *clk_dev;
|
||||
struct snd_soc_platform *platform;
|
||||
struct snd_soc_component *component;
|
||||
struct snd_soc_dai_driver *dais;
|
||||
|
||||
struct nhlt_acpi_table *nhlt; /* nhlt ptr */
|
||||
|
在新工单中引用
屏蔽一个用户