diff options
Diffstat (limited to 'sound/soc/sof/sof-acpi-dev.c')
| -rw-r--r-- | sound/soc/sof/sof-acpi-dev.c | 130 | 
1 files changed, 11 insertions, 119 deletions
diff --git a/sound/soc/sof/sof-acpi-dev.c b/sound/soc/sof/sof-acpi-dev.c index cc2e257087e4..1fec0420f662 100644 --- a/sound/soc/sof/sof-acpi-dev.c +++ b/sound/soc/sof/sof-acpi-dev.c @@ -12,12 +12,12 @@  #include <linux/firmware.h>  #include <linux/module.h>  #include <linux/pm_runtime.h> -#include <sound/intel-dsp-config.h>  #include <sound/soc-acpi.h>  #include <sound/soc-acpi-intel-match.h>  #include <sound/sof.h>  #include "../intel/common/soc-intel-quirks.h"  #include "ops.h" +#include "sof-acpi-dev.h"  /* platform specific devices */  #include "intel/shim.h" @@ -36,74 +36,12 @@ MODULE_PARM_DESC(sof_acpi_debug, "SOF ACPI debug options (0x0 all off)");  #define SOF_ACPI_DISABLE_PM_RUNTIME BIT(0) -#if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_SOC_SOF_BROADWELL) -static const struct sof_dev_desc sof_acpi_broadwell_desc = { -	.machines = snd_soc_acpi_intel_broadwell_machines, -	.resindex_lpe_base = 0, -	.resindex_pcicfg_base = 1, -	.resindex_imr_base = -1, -	.irqindex_host_ipc = 0, -	.chip_info = &bdw_chip_info, -	.default_fw_path = "intel/sof", -	.default_tplg_path = "intel/sof-tplg", -	.default_fw_filename = "sof-bdw.ri", -	.nocodec_tplg_filename = "sof-bdw-nocodec.tplg", -	.ops = &sof_bdw_ops, -}; -#endif - -#if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_SOC_SOF_BAYTRAIL) - -/* BYTCR uses different IRQ index */ -static const struct sof_dev_desc sof_acpi_baytrailcr_desc = { -	.machines = snd_soc_acpi_intel_baytrail_machines, -	.resindex_lpe_base = 0, -	.resindex_pcicfg_base = 1, -	.resindex_imr_base = 2, -	.irqindex_host_ipc = 0, -	.chip_info = &byt_chip_info, -	.default_fw_path = "intel/sof", -	.default_tplg_path = "intel/sof-tplg", -	.default_fw_filename = "sof-byt.ri", -	.nocodec_tplg_filename = "sof-byt-nocodec.tplg", -	.ops = &sof_byt_ops, -}; - -static const struct sof_dev_desc sof_acpi_baytrail_desc = { -	.machines = snd_soc_acpi_intel_baytrail_machines, -	.resindex_lpe_base = 0, -	.resindex_pcicfg_base = 1, -	.resindex_imr_base = 2, -	.irqindex_host_ipc = 5, -	.chip_info = &byt_chip_info, -	.default_fw_path = "intel/sof", -	.default_tplg_path = "intel/sof-tplg", -	.default_fw_filename = "sof-byt.ri", -	.nocodec_tplg_filename = "sof-byt-nocodec.tplg", -	.ops = &sof_byt_ops, -}; - -static const struct sof_dev_desc sof_acpi_cherrytrail_desc = { -	.machines = snd_soc_acpi_intel_cherrytrail_machines, -	.resindex_lpe_base = 0, -	.resindex_pcicfg_base = 1, -	.resindex_imr_base = 2, -	.irqindex_host_ipc = 5, -	.chip_info = &cht_chip_info, -	.default_fw_path = "intel/sof", -	.default_tplg_path = "intel/sof-tplg", -	.default_fw_filename = "sof-cht.ri", -	.nocodec_tplg_filename = "sof-cht-nocodec.tplg", -	.ops = &sof_cht_ops, -}; - -#endif - -static const struct dev_pm_ops sof_acpi_pm = { +const struct dev_pm_ops sof_acpi_pm = {  	SET_SYSTEM_SLEEP_PM_OPS(snd_sof_suspend, snd_sof_resume)  	SET_RUNTIME_PM_OPS(snd_sof_runtime_suspend, snd_sof_runtime_resume,  			   snd_sof_runtime_idle)  }; +EXPORT_SYMBOL_NS(sof_acpi_pm, SND_SOC_SOF_ACPI_DEV);  static void sof_acpi_probe_complete(struct device *dev)  { @@ -118,41 +56,19 @@ static void sof_acpi_probe_complete(struct device *dev)  	pm_runtime_enable(dev);  } -static int sof_acpi_probe(struct platform_device *pdev) +int sof_acpi_probe(struct platform_device *pdev, const struct sof_dev_desc *desc)  {  	struct device *dev = &pdev->dev; -	const struct acpi_device_id *id; -	const struct sof_dev_desc *desc;  	struct snd_sof_pdata *sof_pdata;  	const struct snd_sof_dsp_ops *ops;  	int ret; -	id = acpi_match_device(dev->driver->acpi_match_table, dev); -	if (!id) -		return -ENODEV; - -	if (IS_REACHABLE(CONFIG_SND_INTEL_DSP_CONFIG)) { -		ret = snd_intel_acpi_dsp_driver_probe(dev, id->id); -		if (ret != SND_INTEL_DSP_DRIVER_ANY && ret != SND_INTEL_DSP_DRIVER_SOF) { -			dev_dbg(dev, "SOF ACPI driver not selected, aborting probe\n"); -			return -ENODEV; -		} -	}  	dev_dbg(dev, "ACPI DSP detected");  	sof_pdata = devm_kzalloc(dev, sizeof(*sof_pdata), GFP_KERNEL);  	if (!sof_pdata)  		return -ENOMEM; -	desc = device_get_match_data(dev); -	if (!desc) -		return -ENODEV; - -#if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_SOC_SOF_BAYTRAIL) -	if (desc == &sof_acpi_baytrail_desc && soc_intel_is_byt_cr(pdev)) -		desc = &sof_acpi_baytrailcr_desc; -#endif -  	/* get ops for platform */  	ops = desc->ops;  	if (!ops) { @@ -194,44 +110,20 @@ static int sof_acpi_probe(struct platform_device *pdev)  	return ret;  } +EXPORT_SYMBOL_NS(sof_acpi_probe, SND_SOC_SOF_ACPI_DEV); -static int sof_acpi_remove(struct platform_device *pdev) +int sof_acpi_remove(struct platform_device *pdev)  { +	struct device *dev = &pdev->dev; +  	if (!(sof_acpi_debug & SOF_ACPI_DISABLE_PM_RUNTIME)) -		pm_runtime_disable(&pdev->dev); +		pm_runtime_disable(dev);  	/* call sof helper for DSP hardware remove */ -	snd_sof_device_remove(&pdev->dev); +	snd_sof_device_remove(dev);  	return 0;  } - -#ifdef CONFIG_ACPI -static const struct acpi_device_id sof_acpi_match[] = { -#if IS_ENABLED(CONFIG_SND_SOC_SOF_BROADWELL) -	{ "INT3438", (unsigned long)&sof_acpi_broadwell_desc }, -#endif -#if IS_ENABLED(CONFIG_SND_SOC_SOF_BAYTRAIL) -	{ "80860F28", (unsigned long)&sof_acpi_baytrail_desc }, -	{ "808622A8", (unsigned long)&sof_acpi_cherrytrail_desc }, -#endif -	{ } -}; -MODULE_DEVICE_TABLE(acpi, sof_acpi_match); -#endif - -/* acpi_driver definition */ -static struct platform_driver snd_sof_acpi_driver = { -	.probe = sof_acpi_probe, -	.remove = sof_acpi_remove, -	.driver = { -		.name = "sof-audio-acpi", -		.pm = &sof_acpi_pm, -		.acpi_match_table = ACPI_PTR(sof_acpi_match), -	}, -}; -module_platform_driver(snd_sof_acpi_driver); +EXPORT_SYMBOL_NS(sof_acpi_remove, SND_SOC_SOF_ACPI_DEV);  MODULE_LICENSE("Dual BSD/GPL"); -MODULE_IMPORT_NS(SND_SOC_SOF_BAYTRAIL); -MODULE_IMPORT_NS(SND_SOC_SOF_BROADWELL);  | 
