Patch "Input: soc_button_array - add use_low_level_irq module parameter" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Input: soc_button_array - add use_low_level_irq module parameter

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     input-soc_button_array-add-use_low_level_irq-module-.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 707312e150e7abadd4497700ac8b284c93b3a53a
Author: Hans de Goede <hdegoede@xxxxxxxxxx>
Date:   Mon Nov 7 10:30:25 2022 -0800

    Input: soc_button_array - add use_low_level_irq module parameter
    
    [ Upstream commit 8e9ada1d0e72b4737df400fe1bba48dc42a68df7 ]
    
    It seems that the Windows drivers for the ACPI0011 soc_button_array
    device use low level triggered IRQs rather then using edge triggering.
    
    Some ACPI tables depend on this, directly poking the GPIO controller's
    registers to clear the trigger type when closing a laptop's/2-in-1's lid
    and re-instating the trigger when opening the lid again.
    
    Linux sets the edge/level on which to trigger to both low+high since
    it is using edge type IRQs, the ACPI tables then ends up also setting
    the bit for level IRQs and since both low and high level have been
    selected by Linux we get an IRQ storm leading to soft lockups.
    
    As a workaround for this the soc_button_array already contains
    a DMI quirk table with device models known to have this issue.
    
    Add a module parameter for this so that users can easily test if their
    device is affected too and so that they can use the module parameter
    as a workaround.
    
    Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221106215320.67109-1-hdegoede@xxxxxxxxxx
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
index 480476121c01..50497dd05027 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -18,6 +18,10 @@
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
 
+static bool use_low_level_irq;
+module_param(use_low_level_irq, bool, 0444);
+MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered");
+
 struct soc_button_info {
 	const char *name;
 	int acpi_index;
@@ -164,7 +168,8 @@ soc_button_device_create(struct platform_device *pdev,
 		}
 
 		/* See dmi_use_low_level_irq[] comment */
-		if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) {
+		if (!autorepeat && (use_low_level_irq ||
+				    dmi_check_system(dmi_use_low_level_irq))) {
 			irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);
 			gpio_keys[n_buttons].irq = irq;
 			gpio_keys[n_buttons].gpio = -ENOENT;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux