ASoC: SOF: remove const qualifier for 'struct snd_sof_dsp_ops'
Now that we start having multiple platforms with minor variants, the use of the const qualifier for 'dsp_ops' is starting to be sub-optimal: the structures are copied across platforms, with only a couple of members that differ. This patch removes the const qualifier without any functionality changes, and adds an optional initialization callback. In follow-up patches, the dsp_ops will revisited for Intel HDaudio platforms, with the differences added programmatically over a common baseline. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20220414184817.362215-9-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
53fe24c2c7
commit
856601e5a7
|
@ -16,6 +16,7 @@
|
||||||
#include <sound/soc-acpi.h>
|
#include <sound/soc-acpi.h>
|
||||||
|
|
||||||
struct snd_sof_dsp_ops;
|
struct snd_sof_dsp_ops;
|
||||||
|
struct snd_sof_dev;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum sof_fw_state - DSP firmware state definitions
|
* enum sof_fw_state - DSP firmware state definitions
|
||||||
|
@ -135,7 +136,8 @@ struct sof_dev_desc {
|
||||||
/* default firmware name */
|
/* default firmware name */
|
||||||
const char *default_fw_filename[SOF_IPC_TYPE_COUNT];
|
const char *default_fw_filename[SOF_IPC_TYPE_COUNT];
|
||||||
|
|
||||||
const struct snd_sof_dsp_ops *ops;
|
struct snd_sof_dsp_ops *ops;
|
||||||
|
int (*ops_init)(struct snd_sof_dev *sdev);
|
||||||
};
|
};
|
||||||
|
|
||||||
int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd);
|
int sof_dai_get_mclk(struct snd_soc_pcm_runtime *rtd);
|
||||||
|
|
|
@ -204,7 +204,7 @@ int acp_pcm_hw_params(struct snd_sof_dev *sdev, struct snd_pcm_substream *substr
|
||||||
struct snd_pcm_hw_params *params,
|
struct snd_pcm_hw_params *params,
|
||||||
struct snd_sof_platform_stream_params *platform_params);
|
struct snd_sof_platform_stream_params *platform_params);
|
||||||
|
|
||||||
extern const struct snd_sof_dsp_ops sof_renoir_ops;
|
extern struct snd_sof_dsp_ops sof_renoir_ops;
|
||||||
|
|
||||||
/* Machine configuration */
|
/* Machine configuration */
|
||||||
int snd_amd_acp_find_config(struct pci_dev *pci);
|
int snd_amd_acp_find_config(struct pci_dev *pci);
|
||||||
|
|
|
@ -123,7 +123,7 @@ static struct snd_soc_acpi_mach *amd_sof_machine_select(struct snd_sof_dev *sdev
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AMD Renoir DSP ops */
|
/* AMD Renoir DSP ops */
|
||||||
const struct snd_sof_dsp_ops sof_renoir_ops = {
|
struct snd_sof_dsp_ops sof_renoir_ops = {
|
||||||
/* probe and remove */
|
/* probe and remove */
|
||||||
.probe = amd_sof_acp_probe,
|
.probe = amd_sof_acp_probe,
|
||||||
.remove = amd_sof_acp_remove,
|
.remove = amd_sof_acp_remove,
|
||||||
|
|
|
@ -357,6 +357,9 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
|
||||||
sdev->first_boot = true;
|
sdev->first_boot = true;
|
||||||
dev_set_drvdata(dev, sdev);
|
dev_set_drvdata(dev, sdev);
|
||||||
|
|
||||||
|
/* init ops, if necessary */
|
||||||
|
sof_ops_init(sdev);
|
||||||
|
|
||||||
/* check all mandatory ops */
|
/* check all mandatory ops */
|
||||||
if (!sof_ops(sdev) || !sof_ops(sdev)->probe || !sof_ops(sdev)->run ||
|
if (!sof_ops(sdev) || !sof_ops(sdev)->probe || !sof_ops(sdev)->run ||
|
||||||
!sof_ops(sdev)->block_read || !sof_ops(sdev)->block_write ||
|
!sof_ops(sdev)->block_read || !sof_ops(sdev)->block_write ||
|
||||||
|
|
|
@ -331,7 +331,7 @@ EXPORT_SYMBOL_GPL(snd_sof_dbg_memory_info_init);
|
||||||
|
|
||||||
int snd_sof_dbg_init(struct snd_sof_dev *sdev)
|
int snd_sof_dbg_init(struct snd_sof_dev *sdev)
|
||||||
{
|
{
|
||||||
const struct snd_sof_dsp_ops *ops = sof_ops(sdev);
|
struct snd_sof_dsp_ops *ops = sof_ops(sdev);
|
||||||
const struct snd_sof_debugfs_map *map;
|
const struct snd_sof_debugfs_map *map;
|
||||||
int i;
|
int i;
|
||||||
int err;
|
int err;
|
||||||
|
|
|
@ -487,7 +487,7 @@ static int imx8_dsp_set_power_state(struct snd_sof_dev *sdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* i.MX8 ops */
|
/* i.MX8 ops */
|
||||||
static const struct snd_sof_dsp_ops sof_imx8_ops = {
|
static struct snd_sof_dsp_ops sof_imx8_ops = {
|
||||||
/* probe and remove */
|
/* probe and remove */
|
||||||
.probe = imx8_probe,
|
.probe = imx8_probe,
|
||||||
.remove = imx8_remove,
|
.remove = imx8_remove,
|
||||||
|
@ -550,7 +550,7 @@ static const struct snd_sof_dsp_ops sof_imx8_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* i.MX8X ops */
|
/* i.MX8X ops */
|
||||||
static const struct snd_sof_dsp_ops sof_imx8x_ops = {
|
static struct snd_sof_dsp_ops sof_imx8x_ops = {
|
||||||
/* probe and remove */
|
/* probe and remove */
|
||||||
.probe = imx8_probe,
|
.probe = imx8_probe,
|
||||||
.remove = imx8_remove,
|
.remove = imx8_remove,
|
||||||
|
|
|
@ -412,7 +412,7 @@ static int imx8m_dsp_suspend(struct snd_sof_dev *sdev, unsigned int target_state
|
||||||
}
|
}
|
||||||
|
|
||||||
/* i.MX8 ops */
|
/* i.MX8 ops */
|
||||||
static const struct snd_sof_dsp_ops sof_imx8m_ops = {
|
static struct snd_sof_dsp_ops sof_imx8m_ops = {
|
||||||
/* probe and remove */
|
/* probe and remove */
|
||||||
.probe = imx8m_probe,
|
.probe = imx8m_probe,
|
||||||
.remove = imx8m_remove,
|
.remove = imx8m_remove,
|
||||||
|
|
|
@ -26,7 +26,7 @@ static const struct snd_sof_debugfs_map apl_dsp_debugfs[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* apollolake ops */
|
/* apollolake ops */
|
||||||
const struct snd_sof_dsp_ops sof_apl_ops = {
|
struct snd_sof_dsp_ops sof_apl_ops = {
|
||||||
/* probe/remove/shutdown */
|
/* probe/remove/shutdown */
|
||||||
.probe = hda_dsp_probe,
|
.probe = hda_dsp_probe,
|
||||||
.remove = hda_dsp_remove,
|
.remove = hda_dsp_remove,
|
||||||
|
|
|
@ -567,7 +567,7 @@ static struct snd_soc_dai_driver bdw_dai[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* broadwell ops */
|
/* broadwell ops */
|
||||||
static const struct snd_sof_dsp_ops sof_bdw_ops = {
|
static struct snd_sof_dsp_ops sof_bdw_ops = {
|
||||||
/*Device init */
|
/*Device init */
|
||||||
.probe = bdw_probe,
|
.probe = bdw_probe,
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ static int byt_acpi_probe(struct snd_sof_dev *sdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* baytrail ops */
|
/* baytrail ops */
|
||||||
static const struct snd_sof_dsp_ops sof_byt_ops = {
|
static struct snd_sof_dsp_ops sof_byt_ops = {
|
||||||
/* device init */
|
/* device init */
|
||||||
.probe = byt_acpi_probe,
|
.probe = byt_acpi_probe,
|
||||||
.remove = byt_remove,
|
.remove = byt_remove,
|
||||||
|
@ -298,7 +298,7 @@ static const struct sof_intel_dsp_desc byt_chip_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* cherrytrail and braswell ops */
|
/* cherrytrail and braswell ops */
|
||||||
static const struct snd_sof_dsp_ops sof_cht_ops = {
|
static struct snd_sof_dsp_ops sof_cht_ops = {
|
||||||
/* device init */
|
/* device init */
|
||||||
.probe = byt_acpi_probe,
|
.probe = byt_acpi_probe,
|
||||||
.remove = byt_remove,
|
.remove = byt_remove,
|
||||||
|
|
|
@ -244,7 +244,7 @@ void cnl_ipc_dump(struct snd_sof_dev *sdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cannonlake ops */
|
/* cannonlake ops */
|
||||||
const struct snd_sof_dsp_ops sof_cnl_ops = {
|
struct snd_sof_dsp_ops sof_cnl_ops = {
|
||||||
/* probe/remove/shutdown */
|
/* probe/remove/shutdown */
|
||||||
.probe = hda_dsp_probe,
|
.probe = hda_dsp_probe,
|
||||||
.remove = hda_dsp_remove,
|
.remove = hda_dsp_remove,
|
||||||
|
|
|
@ -687,10 +687,10 @@ extern struct snd_soc_dai_driver skl_dai[];
|
||||||
/*
|
/*
|
||||||
* Platform Specific HW abstraction Ops.
|
* Platform Specific HW abstraction Ops.
|
||||||
*/
|
*/
|
||||||
extern const struct snd_sof_dsp_ops sof_apl_ops;
|
extern struct snd_sof_dsp_ops sof_apl_ops;
|
||||||
extern const struct snd_sof_dsp_ops sof_cnl_ops;
|
extern struct snd_sof_dsp_ops sof_cnl_ops;
|
||||||
extern const struct snd_sof_dsp_ops sof_tgl_ops;
|
extern struct snd_sof_dsp_ops sof_tgl_ops;
|
||||||
extern const struct snd_sof_dsp_ops sof_icl_ops;
|
extern struct snd_sof_dsp_ops sof_icl_ops;
|
||||||
|
|
||||||
extern const struct sof_intel_dsp_desc apl_chip_info;
|
extern const struct sof_intel_dsp_desc apl_chip_info;
|
||||||
extern const struct sof_intel_dsp_desc cnl_chip_info;
|
extern const struct sof_intel_dsp_desc cnl_chip_info;
|
||||||
|
|
|
@ -88,7 +88,7 @@ static int icl_dsp_post_fw_run(struct snd_sof_dev *sdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Icelake ops */
|
/* Icelake ops */
|
||||||
const struct snd_sof_dsp_ops sof_icl_ops = {
|
struct snd_sof_dsp_ops sof_icl_ops = {
|
||||||
/* probe/remove/shutdown */
|
/* probe/remove/shutdown */
|
||||||
.probe = hda_dsp_probe,
|
.probe = hda_dsp_probe,
|
||||||
.remove = hda_dsp_remove,
|
.remove = hda_dsp_remove,
|
||||||
|
|
|
@ -136,7 +136,7 @@ static int tangier_pci_probe(struct snd_sof_dev *sdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct snd_sof_dsp_ops sof_tng_ops = {
|
struct snd_sof_dsp_ops sof_tng_ops = {
|
||||||
/* device init */
|
/* device init */
|
||||||
.probe = tangier_pci_probe,
|
.probe = tangier_pci_probe,
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ struct sof_intel_dsp_desc {
|
||||||
bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
|
bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct snd_sof_dsp_ops sof_tng_ops;
|
extern struct snd_sof_dsp_ops sof_tng_ops;
|
||||||
|
|
||||||
extern const struct sof_intel_dsp_desc tng_chip_info;
|
extern const struct sof_intel_dsp_desc tng_chip_info;
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ static int tgl_dsp_core_put(struct snd_sof_dev *sdev, int core)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tigerlake ops */
|
/* Tigerlake ops */
|
||||||
const struct snd_sof_dsp_ops sof_tgl_ops = {
|
struct snd_sof_dsp_ops sof_tgl_ops = {
|
||||||
/* probe/remove/shutdown */
|
/* probe/remove/shutdown */
|
||||||
.probe = hda_dsp_probe,
|
.probe = hda_dsp_probe,
|
||||||
.remove = hda_dsp_remove,
|
.remove = hda_dsp_remove,
|
||||||
|
|
|
@ -393,7 +393,7 @@ static struct snd_soc_dai_driver mt8195_dai[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* mt8195 ops */
|
/* mt8195 ops */
|
||||||
static const struct snd_sof_dsp_ops sof_mt8195_ops = {
|
static struct snd_sof_dsp_ops sof_mt8195_ops = {
|
||||||
/* probe and remove */
|
/* probe and remove */
|
||||||
.probe = mt8195_dsp_probe,
|
.probe = mt8195_dsp_probe,
|
||||||
.remove = mt8195_dsp_remove,
|
.remove = mt8195_dsp_remove,
|
||||||
|
|
|
@ -21,6 +21,12 @@
|
||||||
#define sof_ops(sdev) \
|
#define sof_ops(sdev) \
|
||||||
((sdev)->pdata->desc->ops)
|
((sdev)->pdata->desc->ops)
|
||||||
|
|
||||||
|
static inline void sof_ops_init(struct snd_sof_dev *sdev)
|
||||||
|
{
|
||||||
|
if (sdev->pdata->desc->ops_init)
|
||||||
|
sdev->pdata->desc->ops_init(sdev);
|
||||||
|
}
|
||||||
|
|
||||||
/* Mandatory operations are verified during probing */
|
/* Mandatory operations are verified during probing */
|
||||||
|
|
||||||
/* init */
|
/* init */
|
||||||
|
|
|
@ -393,7 +393,7 @@ static int sof_pcm_open(struct snd_soc_component *component,
|
||||||
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
|
||||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
|
||||||
const struct snd_sof_dsp_ops *ops = sof_ops(sdev);
|
struct snd_sof_dsp_ops *ops = sof_ops(sdev);
|
||||||
struct snd_sof_pcm *spcm;
|
struct snd_sof_pcm *spcm;
|
||||||
struct snd_soc_tplg_stream_caps *caps;
|
struct snd_soc_tplg_stream_caps *caps;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
Loading…
Reference in New Issue