Dne 24. 06. 20 v 21:02 Vijendar Mukunda napsal(a):
Add logic to check DMIC hardware exists or not on the platform at runtime.
Add module param for overriding DMIC hardware check at runtime.
Signed-off-by: Vijendar Mukunda Vijendar.Mukunda@amd.com
Reviewed-by: Jaroslav Kysela perex@perex.cz
v3: changed dmic_acpi_check module param as bint v2: changed module param usage -1 as default, 0 - skip, 1 - force sound/soc/amd/renoir/rn-pci-acp3x.c | 29 +++++++++++++++++++++++++++++ sound/soc/amd/renoir/rn_acp3x.h | 2 ++ 2 files changed, 31 insertions(+)
diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c index 859ed67..d1faea5 100644 --- a/sound/soc/amd/renoir/rn-pci-acp3x.c +++ b/sound/soc/amd/renoir/rn-pci-acp3x.c @@ -5,6 +5,7 @@ //Copyright 2020 Advanced Micro Devices, Inc.
#include <linux/pci.h> +#include <linux/acpi.h> #include <linux/module.h> #include <linux/io.h> #include <linux/delay.h> @@ -18,6 +19,16 @@ static int acp_power_gating; module_param(acp_power_gating, int, 0644); MODULE_PARM_DESC(acp_power_gating, "Enable acp power gating");
+/**
- dmic_acpi_check = -1 - Checks ACPI method to know DMIC hardware status runtime
= 0 - Skips the DMIC device creation and returns probe failure
= 1 - Assumes that platform has DMIC support and skips ACPI
method check
- */
+static int dmic_acpi_check = ACP_DMIC_AUTO; +module_param(dmic_acpi_check, bint, 0644); +MODULE_PARM_DESC(dmic_acpi_check, "checks Dmic hardware runtime");
- struct acp_dev_data { void __iomem *acp_base; struct resource *res;
@@ -157,6 +168,8 @@ static int snd_rn_acp_probe(struct pci_dev *pci, { struct acp_dev_data *adata; struct platform_device_info pdevinfo[ACP_DEVS];
- acpi_handle handle;
- acpi_integer dmic_status; unsigned int irqflags; int ret, index; u32 addr;
@@ -201,6 +214,22 @@ static int snd_rn_acp_probe(struct pci_dev *pci, if (ret) goto disable_msi;
- if (!dmic_acpi_check) {
ret = -ENODEV;
goto de_init;
- } else if (dmic_acpi_check == ACP_DMIC_AUTO) {
handle = ACPI_HANDLE(&pci->dev);
ret = acpi_evaluate_integer(handle, "_WOV", NULL, &dmic_status);
if (ACPI_FAILURE(ret)) {
ret = -EINVAL;
goto de_init;
}
if (!dmic_status) {
ret = -ENODEV;
goto de_init;
}
- }
- adata->res = devm_kzalloc(&pci->dev, sizeof(struct resource) * 2, GFP_KERNEL);
diff --git a/sound/soc/amd/renoir/rn_acp3x.h b/sound/soc/amd/renoir/rn_acp3x.h index 75228e3..1462039 100644 --- a/sound/soc/amd/renoir/rn_acp3x.h +++ b/sound/soc/amd/renoir/rn_acp3x.h @@ -55,6 +55,8 @@
#define MAX_BUFFER (CAPTURE_MAX_PERIOD_SIZE * CAPTURE_MAX_NUM_PERIODS) #define MIN_BUFFER MAX_BUFFER +#define ACP_DMIC_AUTO -1
- struct pdm_dev_data { u32 pdm_irq; void __iomem *acp_base;