diff mbox series

[v3,1/2] ALSA: cs35l41: obey the trigger type from DSDT

Message ID TYCP286MB253538FE76C93C032DB55212C40E2@TYCP286MB2535.JPNP286.PROD.OUTLOOK.COM (mailing list archive)
State New
Headers show
Series ALSA: hda/realtek: Fix internal speakers for Legion Y9000X 2022 IAH7 | expand

Commit Message

Qi Qi April 18, 2024, 1:19 p.m. UTC
On some models, CSC3551's interrupt pin connected to
APIC. We need to obey the trigger type from DSDT in this case.

Signed-off-by: ArcticLampyrid <ArcticLampyrid@outlook.com>
---
 sound/pci/hda/cs35l41_hda.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Stefan Binding April 19, 2024, 3:09 p.m. UTC | #1
Hi,

We are still investigating this issue, but I do not think this
solution is the correct one.
Configuring the interrupt in this way does not fix the interrupt, just
hides the issue.
We are still looking into what we can do to try and fix this.

Thanks,
Stefan

> -----Original Message-----
> From: ArcticLampyrid <ArcticLampyrid@outlook.com>
> Sent: Thursday, April 18, 2024 2:20 PM
> To: sbinding@opensource.cirrus.com
> Cc: david.rhodes@cirrus.com; james.schulman@cirrus.com; linux-
> kernel@vger.kernel.org; linux-sound@vger.kernel.org;
> patches@opensource.cirrus.com; rf@opensource.cirrus.com;
> ArcticLampyrid <ArcticLampyrid@outlook.com>
> Subject: [PATCH v3 1/2] ALSA: cs35l41: obey the trigger type from
DSDT
> 
> On some models, CSC3551's interrupt pin connected to
> APIC. We need to obey the trigger type from DSDT in this case.
> 
> Signed-off-by: ArcticLampyrid <ArcticLampyrid@outlook.com>
> ---
>  sound/pci/hda/cs35l41_hda.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/sound/pci/hda/cs35l41_hda.c
b/sound/pci/hda/cs35l41_hda.c
> index d3fa6e136744..d9c7b4034684 100644
> --- a/sound/pci/hda/cs35l41_hda.c
> +++ b/sound/pci/hda/cs35l41_hda.c
> @@ -10,6 +10,7 @@
>  #include <linux/module.h>
>  #include <linux/moduleparam.h>
>  #include <sound/hda_codec.h>
> +#include <linux/irq.h>
>  #include <sound/soc.h>
>  #include <linux/pm_runtime.h>
>  #include <linux/spi/spi.h>
> @@ -1511,6 +1512,14 @@ static int
cs35l41_hda_apply_properties(struct
> cs35l41_hda *cs35l41)
>  	irq_pol = cs35l41_gpio_config(cs35l41->regmap, hw_cfg);
> 
>  	if (cs35l41->irq && using_irq) {
> +		struct irq_data *irq_data;
> +
> +		irq_data = irq_get_irq_data(cs35l41->irq);
> +		if (irq_data && irqd_trigger_type_was_set(irq_data)) {
> +			irq_pol = irqd_get_trigger_type(irq_data);
> +			dev_info(cs35l41->dev, "Using configured IRQ
> Polarity: %d\n", irq_pol);
> +		}
> +
>  		ret = devm_regmap_add_irq_chip(cs35l41->dev, cs35l41-
> >regmap, cs35l41->irq,
>  					       IRQF_ONESHOT |
> IRQF_SHARED | irq_pol,
>  					       0,
> &cs35l41_regmap_irq_chip, &cs35l41->irq_data);
> --
> 2.44.0
>
Qi Qi April 19, 2024, 3:43 p.m. UTC | #2
I believe we should obey the type declared in DSDT table if it exists, in 
general case.

Could you please explain why it did not solve the interrupt? Is it a 
misleading item in DSDT?

Thanks for your reply.
diff mbox series

Patch

diff --git a/sound/pci/hda/cs35l41_hda.c b/sound/pci/hda/cs35l41_hda.c
index d3fa6e136744..d9c7b4034684 100644
--- a/sound/pci/hda/cs35l41_hda.c
+++ b/sound/pci/hda/cs35l41_hda.c
@@ -10,6 +10,7 @@ 
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <sound/hda_codec.h>
+#include <linux/irq.h>
 #include <sound/soc.h>
 #include <linux/pm_runtime.h>
 #include <linux/spi/spi.h>
@@ -1511,6 +1512,14 @@  static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41)
 	irq_pol = cs35l41_gpio_config(cs35l41->regmap, hw_cfg);
 
 	if (cs35l41->irq && using_irq) {
+		struct irq_data *irq_data;
+
+		irq_data = irq_get_irq_data(cs35l41->irq);
+		if (irq_data && irqd_trigger_type_was_set(irq_data)) {
+			irq_pol = irqd_get_trigger_type(irq_data);
+			dev_info(cs35l41->dev, "Using configured IRQ Polarity: %d\n", irq_pol);
+		}
+
 		ret = devm_regmap_add_irq_chip(cs35l41->dev, cs35l41->regmap, cs35l41->irq,
 					       IRQF_ONESHOT | IRQF_SHARED | irq_pol,
 					       0, &cs35l41_regmap_irq_chip, &cs35l41->irq_data);