• Hans de Goede's avatar
    Input: soc_button_array - add use_low_level_irq module parameter · 8e9ada1d
    Hans de Goede authored
    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: default avatarHans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20221106215320.67109-1-hdegoede@redhat.comSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    8e9ada1d
soc_button_array.c 16.9 KB