[PATCH] ASoC: amd: add logic to check dmic hardware runtime
Deucher, Alexander
Alexander.Deucher at amd.com
Tue Jun 23 22:25:46 CEST 2020
[AMD Public Use]
> -----Original Message-----
> From: Vijendar Mukunda <Vijendar.Mukunda at amd.com>
> Sent: Tuesday, June 23, 2020 4:27 PM
> To: perex at perex.cz; alsa-devel at alsa-project.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>; Arya, Virendra-
> Pratap <Virendra-Pratap.Arya at amd.com>; hui.wang at canonical.com;
> Mukunda, Vijendar <Vijendar.Mukunda at amd.com>
> Subject: [PATCH] ASoC: amd: add logic to check dmic hardware runtime
>
> 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 at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> 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..faa7566 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, int, 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;
> --
> 2.7.4
More information about the Alsa-devel
mailing list