Message ID | 1592654687-24574-1-git-send-email-Vijendar.Mukunda@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: amd: add logic to check dmic hardware runtime | expand |
Dne 20. 06. 20 v 14:04 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> > --- > sound/soc/amd/renoir/rn-pci-acp3x.c | 29 +++++++++++++++++++++++++++++ > sound/soc/amd/renoir/rn_acp3x.h | 7 +++++++ > 2 files changed, 36 insertions(+) > > diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c > index 859ed67..ef6eeba 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 = 0 - Skips DMIC device creation and returns probe failure > + * = 1 - Assumes that platform has DMIC support and skips ACPI > + * method check > + * = 2 - Checks ACPI method to know DMIC hardware status runtime > + */ > +static int dmic_acpi_check = ACP_DMIC_AUTO; I would prefer to have 0 = auto, 1 = force, 2 = skip to put the dmic_acpi_check variable to BSS. Otherwise the patch looks good. Thanks. Jaroslav
On Mon, 22 Jun 2020 15:27:25 +0200, Jaroslav Kysela wrote: > > Dne 20. 06. 20 v 14:04 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> > > --- > > sound/soc/amd/renoir/rn-pci-acp3x.c | 29 +++++++++++++++++++++++++++++ > > sound/soc/amd/renoir/rn_acp3x.h | 7 +++++++ > > 2 files changed, 36 insertions(+) > > > > diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c > > index 859ed67..ef6eeba 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 = 0 - Skips DMIC device creation and returns probe failure > > + * = 1 - Assumes that platform has DMIC support and skips ACPI > > + * method check > > + * = 2 - Checks ACPI method to know DMIC hardware status runtime > > + */ > > +static int dmic_acpi_check = ACP_DMIC_AUTO; > > I would prefer to have 0 = auto, 1 = force, 2 = skip to put the > dmic_acpi_check variable to BSS. Otherwise the patch looks > good. Thanks. It's "bint" module parameter type is used for this kind of flag, which implies: -1 = auto, whatever the default 0 = disable 1 = enable Then user can pass dmic_acpi_check=1 or dmic_acpi_check=true (or on) to explicitly enable the flag. Takashi
diff --git a/sound/soc/amd/renoir/rn-pci-acp3x.c b/sound/soc/amd/renoir/rn-pci-acp3x.c index 859ed67..ef6eeba 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 = 0 - Skips DMIC device creation and returns probe failure + * = 1 - Assumes that platform has DMIC support and skips ACPI + * method check + * = 2 - Checks ACPI method to know DMIC hardware status runtime + */ +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..fcc5dca 100644 --- a/sound/soc/amd/renoir/rn_acp3x.h +++ b/sound/soc/amd/renoir/rn_acp3x.h @@ -55,6 +55,13 @@ #define MAX_BUFFER (CAPTURE_MAX_PERIOD_SIZE * CAPTURE_MAX_NUM_PERIODS) #define MIN_BUFFER MAX_BUFFER + +enum acp_dmic_audio { + ACP_DMIC_DISABLE = 0, + ACP_DMIC_ENABLE, + ACP_DMIC_AUTO +}; + struct pdm_dev_data { u32 pdm_irq; void __iomem *acp_base;
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> --- sound/soc/amd/renoir/rn-pci-acp3x.c | 29 +++++++++++++++++++++++++++++ sound/soc/amd/renoir/rn_acp3x.h | 7 +++++++ 2 files changed, 36 insertions(+)