Commit cb515f10 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Mark Brown

ASoC: SOF: avoid casting "const" attribute away

Casting "const" attribute away is dangerous, obtain a writable
pointer instead to avoid that.
Signed-off-by: default avatarGuennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20211216232422.345164-2-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0f2ee77d
...@@ -104,7 +104,7 @@ static struct snd_soc_dai_driver renoir_sof_dai[] = { ...@@ -104,7 +104,7 @@ static struct snd_soc_dai_driver renoir_sof_dai[] = {
}, },
}; };
static void amd_sof_machine_select(struct snd_sof_dev *sdev) static struct snd_soc_acpi_mach *amd_sof_machine_select(struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *sof_pdata = sdev->pdata; struct snd_sof_pdata *sof_pdata = sdev->pdata;
const struct sof_dev_desc *desc = sof_pdata->desc; const struct sof_dev_desc *desc = sof_pdata->desc;
...@@ -113,12 +113,13 @@ static void amd_sof_machine_select(struct snd_sof_dev *sdev) ...@@ -113,12 +113,13 @@ static void amd_sof_machine_select(struct snd_sof_dev *sdev)
mach = snd_soc_acpi_find_machine(desc->machines); mach = snd_soc_acpi_find_machine(desc->machines);
if (!mach) { if (!mach) {
dev_warn(sdev->dev, "No matching ASoC machine driver found\n"); dev_warn(sdev->dev, "No matching ASoC machine driver found\n");
return; return NULL;
} }
sof_pdata->tplg_filename = mach->sof_tplg_filename; sof_pdata->tplg_filename = mach->sof_tplg_filename;
sof_pdata->fw_filename = mach->fw_filename; sof_pdata->fw_filename = mach->fw_filename;
sof_pdata->machine = mach;
return mach;
} }
/* AMD Renoir DSP ops */ /* AMD Renoir DSP ops */
......
...@@ -293,7 +293,7 @@ static const char *fixup_tplg_name(struct snd_sof_dev *sdev, ...@@ -293,7 +293,7 @@ static const char *fixup_tplg_name(struct snd_sof_dev *sdev,
return tplg_filename; return tplg_filename;
} }
void atom_machine_select(struct snd_sof_dev *sdev) struct snd_soc_acpi_mach *atom_machine_select(struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *sof_pdata = sdev->pdata; struct snd_sof_pdata *sof_pdata = sdev->pdata;
const struct sof_dev_desc *desc = sof_pdata->desc; const struct sof_dev_desc *desc = sof_pdata->desc;
...@@ -304,7 +304,7 @@ void atom_machine_select(struct snd_sof_dev *sdev) ...@@ -304,7 +304,7 @@ void atom_machine_select(struct snd_sof_dev *sdev)
mach = snd_soc_acpi_find_machine(desc->machines); mach = snd_soc_acpi_find_machine(desc->machines);
if (!mach) { if (!mach) {
dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n"); dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n");
return; return NULL;
} }
pdev = to_platform_device(sdev->dev); pdev = to_platform_device(sdev->dev);
...@@ -322,12 +322,13 @@ void atom_machine_select(struct snd_sof_dev *sdev) ...@@ -322,12 +322,13 @@ void atom_machine_select(struct snd_sof_dev *sdev)
if (!tplg_filename) { if (!tplg_filename) {
dev_dbg(sdev->dev, dev_dbg(sdev->dev,
"error: no topology filename\n"); "error: no topology filename\n");
return; return NULL;
} }
sof_pdata->tplg_filename = tplg_filename; sof_pdata->tplg_filename = tplg_filename;
mach->mach_params.acpi_ipc_irq_index = desc->irqindex_host_ipc; mach->mach_params.acpi_ipc_irq_index = desc->irqindex_host_ipc;
sof_pdata->machine = mach;
return mach;
} }
EXPORT_SYMBOL_NS(atom_machine_select, SND_SOC_SOF_INTEL_ATOM_HIFI_EP); EXPORT_SYMBOL_NS(atom_machine_select, SND_SOC_SOF_INTEL_ATOM_HIFI_EP);
...@@ -402,14 +403,14 @@ struct snd_soc_dai_driver atom_dai[] = { ...@@ -402,14 +403,14 @@ struct snd_soc_dai_driver atom_dai[] = {
}; };
EXPORT_SYMBOL_NS(atom_dai, SND_SOC_SOF_INTEL_ATOM_HIFI_EP); EXPORT_SYMBOL_NS(atom_dai, SND_SOC_SOF_INTEL_ATOM_HIFI_EP);
void atom_set_mach_params(const struct snd_soc_acpi_mach *mach, void atom_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev) struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *pdata = sdev->pdata; struct snd_sof_pdata *pdata = sdev->pdata;
const struct sof_dev_desc *desc = pdata->desc; const struct sof_dev_desc *desc = pdata->desc;
struct snd_soc_acpi_mach_params *mach_params; struct snd_soc_acpi_mach_params *mach_params;
mach_params = (struct snd_soc_acpi_mach_params *)&mach->mach_params; mach_params = &mach->mach_params;
mach_params->platform = dev_name(sdev->dev); mach_params->platform = dev_name(sdev->dev);
mach_params->num_dai_drivers = desc->ops->num_drv; mach_params->num_dai_drivers = desc->ops->num_drv;
mach_params->dai_drivers = desc->ops->drv; mach_params->dai_drivers = desc->ops->drv;
......
...@@ -65,8 +65,8 @@ int atom_run(struct snd_sof_dev *sdev); ...@@ -65,8 +65,8 @@ int atom_run(struct snd_sof_dev *sdev);
int atom_reset(struct snd_sof_dev *sdev); int atom_reset(struct snd_sof_dev *sdev);
void atom_dump(struct snd_sof_dev *sdev, u32 flags); void atom_dump(struct snd_sof_dev *sdev, u32 flags);
void atom_machine_select(struct snd_sof_dev *sdev); struct snd_soc_acpi_mach *atom_machine_select(struct snd_sof_dev *sdev);
void atom_set_mach_params(const struct snd_soc_acpi_mach *mach, void atom_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev); struct snd_sof_dev *sdev);
extern struct snd_soc_dai_driver atom_dai[]; extern struct snd_soc_dai_driver atom_dai[];
......
...@@ -509,7 +509,7 @@ static int bdw_probe(struct snd_sof_dev *sdev) ...@@ -509,7 +509,7 @@ static int bdw_probe(struct snd_sof_dev *sdev)
return ret; return ret;
} }
static void bdw_machine_select(struct snd_sof_dev *sdev) static struct snd_soc_acpi_mach *bdw_machine_select(struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *sof_pdata = sdev->pdata; struct snd_sof_pdata *sof_pdata = sdev->pdata;
const struct sof_dev_desc *desc = sof_pdata->desc; const struct sof_dev_desc *desc = sof_pdata->desc;
...@@ -518,22 +518,23 @@ static void bdw_machine_select(struct snd_sof_dev *sdev) ...@@ -518,22 +518,23 @@ static void bdw_machine_select(struct snd_sof_dev *sdev)
mach = snd_soc_acpi_find_machine(desc->machines); mach = snd_soc_acpi_find_machine(desc->machines);
if (!mach) { if (!mach) {
dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n"); dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n");
return; return NULL;
} }
sof_pdata->tplg_filename = mach->sof_tplg_filename; sof_pdata->tplg_filename = mach->sof_tplg_filename;
mach->mach_params.acpi_ipc_irq_index = desc->irqindex_host_ipc; mach->mach_params.acpi_ipc_irq_index = desc->irqindex_host_ipc;
sof_pdata->machine = mach;
return mach;
} }
static void bdw_set_mach_params(const struct snd_soc_acpi_mach *mach, static void bdw_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev) struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *pdata = sdev->pdata; struct snd_sof_pdata *pdata = sdev->pdata;
const struct sof_dev_desc *desc = pdata->desc; const struct sof_dev_desc *desc = pdata->desc;
struct snd_soc_acpi_mach_params *mach_params; struct snd_soc_acpi_mach_params *mach_params;
mach_params = (struct snd_soc_acpi_mach_params *)&mach->mach_params; mach_params = &mach->mach_params;
mach_params->platform = dev_name(sdev->dev); mach_params->platform = dev_name(sdev->dev);
mach_params->num_dai_drivers = desc->ops->num_drv; mach_params->num_dai_drivers = desc->ops->num_drv;
mach_params->dai_drivers = desc->ops->drv; mach_params->dai_drivers = desc->ops->drv;
......
...@@ -1105,7 +1105,8 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) ...@@ -1105,7 +1105,8 @@ int hda_dsp_remove(struct snd_sof_dev *sdev)
} }
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
static int hda_generic_machine_select(struct snd_sof_dev *sdev) static void hda_generic_machine_select(struct snd_sof_dev *sdev,
struct snd_soc_acpi_mach **mach)
{ {
struct hdac_bus *bus = sof_to_bus(sdev); struct hdac_bus *bus = sof_to_bus(sdev);
struct snd_soc_acpi_mach_params *mach_params; struct snd_soc_acpi_mach_params *mach_params;
...@@ -1137,7 +1138,7 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev) ...@@ -1137,7 +1138,7 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev)
* - one HDMI codec, and/or * - one HDMI codec, and/or
* - one external HDAudio codec * - one external HDAudio codec
*/ */
if (!pdata->machine && codec_num <= 2) { if (!*mach && codec_num <= 2) {
hda_mach = snd_soc_acpi_intel_hda_machines; hda_mach = snd_soc_acpi_intel_hda_machines;
dev_info(bus->dev, "using HDA machine driver %s now\n", dev_info(bus->dev, "using HDA machine driver %s now\n",
...@@ -1152,10 +1153,9 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev) ...@@ -1152,10 +1153,9 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev)
tplg_filename = hda_mach->sof_tplg_filename; tplg_filename = hda_mach->sof_tplg_filename;
ret = dmic_topology_fixup(sdev, &tplg_filename, idisp_str, &dmic_num); ret = dmic_topology_fixup(sdev, &tplg_filename, idisp_str, &dmic_num);
if (ret < 0) if (ret < 0)
return ret; return;
hda_mach->mach_params.dmic_num = dmic_num; hda_mach->mach_params.dmic_num = dmic_num;
pdata->machine = hda_mach;
pdata->tplg_filename = tplg_filename; pdata->tplg_filename = tplg_filename;
if (codec_num == 2) { if (codec_num == 2) {
...@@ -1165,23 +1165,22 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev) ...@@ -1165,23 +1165,22 @@ static int hda_generic_machine_select(struct snd_sof_dev *sdev)
*/ */
hda_mach->mach_params.link_mask = 0; hda_mach->mach_params.link_mask = 0;
} }
*mach = hda_mach;
} }
} }
/* used by hda machine driver to create dai links */ /* used by hda machine driver to create dai links */
if (pdata->machine) { if (*mach) {
mach_params = (struct snd_soc_acpi_mach_params *) mach_params = &(*mach)->mach_params;
&pdata->machine->mach_params;
mach_params->codec_mask = bus->codec_mask; mach_params->codec_mask = bus->codec_mask;
mach_params->common_hdmi_codec_drv = hda_codec_use_common_hdmi; mach_params->common_hdmi_codec_drv = hda_codec_use_common_hdmi;
} }
return 0;
} }
#else #else
static int hda_generic_machine_select(struct snd_sof_dev *sdev) static void hda_generic_machine_select(struct snd_sof_dev *sdev,
struct snd_soc_acpi_mach **mach)
{ {
return 0;
} }
#endif #endif
...@@ -1264,7 +1263,7 @@ static bool link_slaves_found(struct snd_sof_dev *sdev, ...@@ -1264,7 +1263,7 @@ static bool link_slaves_found(struct snd_sof_dev *sdev,
return true; return true;
} }
static int hda_sdw_machine_select(struct snd_sof_dev *sdev) static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *pdata = sdev->pdata; struct snd_sof_pdata *pdata = sdev->pdata;
const struct snd_soc_acpi_link_adr *link; const struct snd_soc_acpi_link_adr *link;
...@@ -1282,7 +1281,7 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev) ...@@ -1282,7 +1281,7 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev)
* machines, for mixed cases with I2C/I2S the detection relies * machines, for mixed cases with I2C/I2S the detection relies
* on the HID list. * on the HID list.
*/ */
if (link_mask && !pdata->machine) { if (link_mask) {
for (mach = pdata->desc->alt_machines; for (mach = pdata->desc->alt_machines;
mach && mach->link_mask; mach++) { mach && mach->link_mask; mach++) {
/* /*
...@@ -1317,7 +1316,6 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev) ...@@ -1317,7 +1316,6 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev)
if (mach && mach->link_mask) { if (mach && mach->link_mask) {
int dmic_num = 0; int dmic_num = 0;
pdata->machine = mach;
mach->mach_params.links = mach->links; mach->mach_params.links = mach->links;
mach->mach_params.link_mask = mach->link_mask; mach->mach_params.link_mask = mach->link_mask;
mach->mach_params.platform = dev_name(sdev->dev); mach->mach_params.platform = dev_name(sdev->dev);
...@@ -1339,9 +1337,8 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev) ...@@ -1339,9 +1337,8 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev)
int ret; int ret;
ret = dmic_topology_fixup(sdev, &tplg_filename, "", &dmic_num); ret = dmic_topology_fixup(sdev, &tplg_filename, "", &dmic_num);
if (ret < 0) if (ret < 0)
return ret; return NULL;
pdata->tplg_filename = tplg_filename; pdata->tplg_filename = tplg_filename;
} }
...@@ -1351,35 +1348,36 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev) ...@@ -1351,35 +1348,36 @@ static int hda_sdw_machine_select(struct snd_sof_dev *sdev)
"SoundWire machine driver %s topology %s\n", "SoundWire machine driver %s topology %s\n",
mach->drv_name, mach->drv_name,
pdata->tplg_filename); pdata->tplg_filename);
} else {
dev_info(sdev->dev, return mach;
"No SoundWire machine driver found\n");
} }
dev_info(sdev->dev, "No SoundWire machine driver found\n");
} }
return 0; return NULL;
} }
#else #else
static int hda_sdw_machine_select(struct snd_sof_dev *sdev) static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev)
{ {
return 0; return NULL;
} }
#endif #endif
void hda_set_mach_params(const struct snd_soc_acpi_mach *mach, void hda_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev) struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *pdata = sdev->pdata; struct snd_sof_pdata *pdata = sdev->pdata;
const struct sof_dev_desc *desc = pdata->desc; const struct sof_dev_desc *desc = pdata->desc;
struct snd_soc_acpi_mach_params *mach_params; struct snd_soc_acpi_mach_params *mach_params;
mach_params = (struct snd_soc_acpi_mach_params *)&mach->mach_params; mach_params = &mach->mach_params;
mach_params->platform = dev_name(sdev->dev); mach_params->platform = dev_name(sdev->dev);
mach_params->num_dai_drivers = desc->ops->num_drv; mach_params->num_dai_drivers = desc->ops->num_drv;
mach_params->dai_drivers = desc->ops->drv; mach_params->dai_drivers = desc->ops->drv;
} }
void hda_machine_select(struct snd_sof_dev *sdev) struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
{ {
struct snd_sof_pdata *sof_pdata = sdev->pdata; struct snd_sof_pdata *sof_pdata = sdev->pdata;
const struct sof_dev_desc *desc = sof_pdata->desc; const struct sof_dev_desc *desc = sof_pdata->desc;
...@@ -1394,8 +1392,6 @@ void hda_machine_select(struct snd_sof_dev *sdev) ...@@ -1394,8 +1392,6 @@ void hda_machine_select(struct snd_sof_dev *sdev)
if (!sof_pdata->tplg_filename) if (!sof_pdata->tplg_filename)
sof_pdata->tplg_filename = mach->sof_tplg_filename; sof_pdata->tplg_filename = mach->sof_tplg_filename;
sof_pdata->machine = mach;
if (mach->link_mask) { if (mach->link_mask) {
mach->mach_params.links = mach->links; mach->mach_params.links = mach->links;
mach->mach_params.link_mask = mach->link_mask; mach->mach_params.link_mask = mach->link_mask;
...@@ -1405,16 +1401,18 @@ void hda_machine_select(struct snd_sof_dev *sdev) ...@@ -1405,16 +1401,18 @@ void hda_machine_select(struct snd_sof_dev *sdev)
/* /*
* If I2S fails, try SoundWire * If I2S fails, try SoundWire
*/ */
hda_sdw_machine_select(sdev); if (!mach)
mach = hda_sdw_machine_select(sdev);
/* /*
* Choose HDA generic machine driver if mach is NULL. * Choose HDA generic machine driver if mach is NULL.
* Otherwise, set certain mach params. * Otherwise, set certain mach params.
*/ */
hda_generic_machine_select(sdev); hda_generic_machine_select(sdev, &mach);
if (!mach)
if (!sof_pdata->machine)
dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n"); dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n");
return mach;
} }
int hda_pci_intel_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) int hda_pci_intel_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
......
...@@ -728,8 +728,8 @@ extern const struct sof_intel_dsp_desc jsl_chip_info; ...@@ -728,8 +728,8 @@ extern const struct sof_intel_dsp_desc jsl_chip_info;
extern const struct sof_intel_dsp_desc adls_chip_info; extern const struct sof_intel_dsp_desc adls_chip_info;
/* machine driver select */ /* machine driver select */
void hda_machine_select(struct snd_sof_dev *sdev); struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev);
void hda_set_mach_params(const struct snd_soc_acpi_mach *mach, void hda_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev); struct snd_sof_dev *sdev);
/* PCI driver selection and probe */ /* PCI driver selection and probe */
......
...@@ -557,15 +557,17 @@ snd_sof_machine_unregister(struct snd_sof_dev *sdev, void *pdata) ...@@ -557,15 +557,17 @@ snd_sof_machine_unregister(struct snd_sof_dev *sdev, void *pdata)
sof_ops(sdev)->machine_unregister(sdev, pdata); sof_ops(sdev)->machine_unregister(sdev, pdata);
} }
static inline void static inline struct snd_soc_acpi_mach *
snd_sof_machine_select(struct snd_sof_dev *sdev) snd_sof_machine_select(struct snd_sof_dev *sdev)
{ {
if (sof_ops(sdev) && sof_ops(sdev)->machine_select) if (sof_ops(sdev) && sof_ops(sdev)->machine_select)
sof_ops(sdev)->machine_select(sdev); return sof_ops(sdev)->machine_select(sdev);
return NULL;
} }
static inline void static inline void
snd_sof_set_mach_params(const struct snd_soc_acpi_mach *mach, snd_sof_set_mach_params(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev) struct snd_sof_dev *sdev)
{ {
if (sof_ops(sdev) && sof_ops(sdev)->set_mach_params) if (sof_ops(sdev) && sof_ops(sdev)->set_mach_params)
......
...@@ -1027,9 +1027,10 @@ int sof_machine_check(struct snd_sof_dev *sdev) ...@@ -1027,9 +1027,10 @@ int sof_machine_check(struct snd_sof_dev *sdev)
if (!IS_ENABLED(CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE)) { if (!IS_ENABLED(CONFIG_SND_SOC_SOF_FORCE_NOCODEC_MODE)) {
/* find machine */ /* find machine */
snd_sof_machine_select(sdev); mach = snd_sof_machine_select(sdev);
if (sof_pdata->machine) { if (mach) {
snd_sof_set_mach_params(sof_pdata->machine, sdev); sof_pdata->machine = mach;
snd_sof_set_mach_params(mach, sdev);
return 0; return 0;
} }
...@@ -1051,7 +1052,7 @@ int sof_machine_check(struct snd_sof_dev *sdev) ...@@ -1051,7 +1052,7 @@ int sof_machine_check(struct snd_sof_dev *sdev)
sof_pdata->tplg_filename = desc->nocodec_tplg_filename; sof_pdata->tplg_filename = desc->nocodec_tplg_filename;
sof_pdata->machine = mach; sof_pdata->machine = mach;
snd_sof_set_mach_params(sof_pdata->machine, sdev); snd_sof_set_mach_params(mach, sdev);
return 0; return 0;
} }
......
...@@ -293,8 +293,8 @@ struct snd_sof_dsp_ops { ...@@ -293,8 +293,8 @@ struct snd_sof_dsp_ops {
void *pdata); /* optional */ void *pdata); /* optional */
void (*machine_unregister)(struct snd_sof_dev *sdev, void (*machine_unregister)(struct snd_sof_dev *sdev,
void *pdata); /* optional */ void *pdata); /* optional */
void (*machine_select)(struct snd_sof_dev *sdev); /* optional */ struct snd_soc_acpi_mach * (*machine_select)(struct snd_sof_dev *sdev); /* optional */
void (*set_mach_params)(const struct snd_soc_acpi_mach *mach, void (*set_mach_params)(struct snd_soc_acpi_mach *mach,
struct snd_sof_dev *sdev); /* optional */ struct snd_sof_dev *sdev); /* optional */
/* DAI ops */ /* DAI ops */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment