ASoC: Intel: use common helpers to detect CPUs
We have duplicated code in multiple locations (atom, machine drivers, SOF) to detect Baytrail, Cherrytrail and other SOCs. This is not very elegant, and introduces dependencies on CONFIG_X86 that prevent COMPILE_TEST from working. Add common helpers to provide same functionality in a cleaner way. This will also help support the DMI-based quirks being introduced to handle SOF/SST autodetection. Reviewed-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
f499edf9fa
commit
536cfd2f37
@@ -15,10 +15,7 @@
|
||||
#include <sound/soc-acpi.h>
|
||||
#include <sound/soc-acpi-intel-match.h>
|
||||
#include <sound/sof.h>
|
||||
#ifdef CONFIG_X86
|
||||
#include <asm/iosf_mbi.h>
|
||||
#endif
|
||||
|
||||
#include "../intel/common/soc-intel-quirks.h"
|
||||
#include "ops.h"
|
||||
|
||||
/* platform specific devices */
|
||||
@@ -99,56 +96,6 @@ static const struct sof_dev_desc sof_acpi_baytrail_desc = {
|
||||
.arch_ops = &sof_xtensa_arch_ops
|
||||
};
|
||||
|
||||
#ifdef CONFIG_X86 /* TODO: move this to common helper */
|
||||
|
||||
static bool is_byt_cr(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
int status;
|
||||
|
||||
if (iosf_mbi_available()) {
|
||||
u32 bios_status;
|
||||
status = iosf_mbi_read(BT_MBI_UNIT_PMC, /* 0x04 PUNIT */
|
||||
MBI_REG_READ, /* 0x10 */
|
||||
0x006, /* BIOS_CONFIG */
|
||||
&bios_status);
|
||||
|
||||
if (status) {
|
||||
dev_err(dev, "could not read PUNIT BIOS_CONFIG\n");
|
||||
} else {
|
||||
/* bits 26:27 mirror PMIC options */
|
||||
bios_status = (bios_status >> 26) & 3;
|
||||
|
||||
if (bios_status == 1 || bios_status == 3) {
|
||||
dev_info(dev, "Detected Baytrail-CR platform\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
dev_info(dev, "BYT-CR not detected\n");
|
||||
}
|
||||
} else {
|
||||
dev_info(dev, "IOSF_MBI not available, no BYT-CR detection\n");
|
||||
}
|
||||
|
||||
if (platform_get_resource(pdev, IORESOURCE_IRQ, 5) == NULL) {
|
||||
/*
|
||||
* Some devices detected as BYT-T have only a single IRQ listed,
|
||||
* causing platform_get_irq with index 5 to return -ENXIO.
|
||||
* The correct IRQ in this case is at index 0, as on BYT-CR.
|
||||
*/
|
||||
dev_info(dev, "Falling back to Baytrail-CR platform\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
static int is_byt_cr(struct platform_device *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct sof_dev_desc sof_acpi_cherrytrail_desc = {
|
||||
.machines = snd_soc_acpi_intel_cherrytrail_machines,
|
||||
.resindex_lpe_base = 0,
|
||||
@@ -200,7 +147,7 @@ static int sof_acpi_probe(struct platform_device *pdev)
|
||||
return -ENODEV;
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_BAYTRAIL)
|
||||
if (desc == &sof_acpi_baytrail_desc && is_byt_cr(pdev))
|
||||
if (desc == &sof_acpi_baytrail_desc && soc_intel_is_byt_cr(pdev))
|
||||
desc = &sof_acpi_baytrailcr_desc;
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user