| From 8e1ebd96dc6f2bee6b9835e92ce695af88a99a6c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 20 Jan 2021 22:49:56 +0100 |
| Subject: ASoC: Intel: Add DMI quirk table to soc_intel_is_byt_cr() |
| |
| From: Hans de Goede <hdegoede@redhat.com> |
| |
| [ Upstream commit 8ade6d8b02b1ead741bd4f6c42921035caab6560 ] |
| |
| Some Bay Trail systems: |
| 1. Use a non CR version of the Bay Trail SoC |
| 2. Contain at least 6 interrupt resources so that the |
| platform_get_resource(pdev, IORESOURCE_IRQ, 5) check to workaround |
| non CR systems which list their IPC IRQ at index 0 despite being |
| non CR does not work |
| 3. Despite 1. and 2. still have their IPC IRQ at index 0 rather then 5 |
| |
| Add a DMI quirk table to check for the few known models with this issue, |
| so that the right IPC IRQ index is used on these systems. |
| |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Link: https://lore.kernel.org/r/20210120214957.140232-5-hdegoede@redhat.com |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| sound/soc/intel/common/soc-intel-quirks.h | 25 +++++++++++++++++++++++ |
| 1 file changed, 25 insertions(+) |
| |
| diff --git a/sound/soc/intel/common/soc-intel-quirks.h b/sound/soc/intel/common/soc-intel-quirks.h |
| index b07df3059926..a93987ab7f4d 100644 |
| --- a/sound/soc/intel/common/soc-intel-quirks.h |
| +++ b/sound/soc/intel/common/soc-intel-quirks.h |
| @@ -11,6 +11,7 @@ |
| |
| #if IS_ENABLED(CONFIG_X86) |
| |
| +#include <linux/dmi.h> |
| #include <asm/cpu_device_id.h> |
| #include <asm/intel-family.h> |
| #include <asm/iosf_mbi.h> |
| @@ -38,12 +39,36 @@ SOC_INTEL_IS_CPU(cml, KABYLAKE_L); |
| |
| static inline bool soc_intel_is_byt_cr(struct platform_device *pdev) |
| { |
| + /* |
| + * List of systems which: |
| + * 1. Use a non CR version of the Bay Trail SoC |
| + * 2. Contain at least 6 interrupt resources so that the |
| + * platform_get_resource(pdev, IORESOURCE_IRQ, 5) check below |
| + * succeeds |
| + * 3. Despite 1. and 2. still have their IPC IRQ at index 0 rather then 5 |
| + * |
| + * This needs to be here so that it can be shared between the SST and |
| + * SOF drivers. We rely on the compiler to optimize this out in files |
| + * where soc_intel_is_byt_cr is not used. |
| + */ |
| + static const struct dmi_system_id force_bytcr_table[] = { |
| + { /* Lenovo Yoga Tablet 2 series */ |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
| + DMI_MATCH(DMI_PRODUCT_FAMILY, "YOGATablet2"), |
| + }, |
| + }, |
| + {} |
| + }; |
| struct device *dev = &pdev->dev; |
| int status = 0; |
| |
| if (!soc_intel_is_byt()) |
| return false; |
| |
| + if (dmi_check_system(force_bytcr_table)) |
| + return true; |
| + |
| if (iosf_mbi_available()) { |
| u32 bios_status; |
| |
| -- |
| 2.30.1 |
| |