lkml.org 
[lkml]   [2018]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.16 67/68] Bluetooth: hci_bcm: Treat Interrupt ACPI resources as always being active-low
    Date
    4.16-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Hans de Goede <hdegoede@redhat.com>

    commit bb5208b314c5127b716b2ee4f55803a8bb73b750 upstream.

    Older devices with a serdev attached bcm bt hci, use an Interrupt ACPI
    resource to describe the IRQ (rather then a GpioInt resource).

    These device seem to all claim the IRQ is active-high and seem to all need
    a DMI quirk to treat it as active-low. Instead simply always assume that
    Interrupt resource specified IRQs are always active-low.

    This fixes the bt device not being able to wake the host from runtime-
    suspend on the: Asus T100TAM, Asus T200TA, Lenovo Yoga2 and the Toshiba
    Encore, without the need to add 4 new DMI quirks for these models.

    This also allows us to remove 2 DMI quirks for the Asus T100TA and Asus
    T100CHI series. Likely the 2 remaining quirks can also be removed but I
    could not find a DSDT of these devices to verify this.

    Cc: stable@vger.kernel.org
    Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=198953
    Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1554835
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/bluetooth/hci_bcm.c | 20 +++-----------------
    1 file changed, 3 insertions(+), 17 deletions(-)

    --- a/drivers/bluetooth/hci_bcm.c
    +++ b/drivers/bluetooth/hci_bcm.c
    @@ -795,22 +795,6 @@ static const struct acpi_gpio_mapping ac
    #ifdef CONFIG_ACPI
    /* IRQ polarity of some chipsets are not defined correctly in ACPI table. */
    static const struct dmi_system_id bcm_active_low_irq_dmi_table[] = {
    - {
    - .ident = "Asus T100TA",
    - .matches = {
    - DMI_EXACT_MATCH(DMI_SYS_VENDOR,
    - "ASUSTeK COMPUTER INC."),
    - DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100TA"),
    - },
    - },
    - {
    - .ident = "Asus T100CHI",
    - .matches = {
    - DMI_EXACT_MATCH(DMI_SYS_VENDOR,
    - "ASUSTeK COMPUTER INC."),
    - DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100CHI"),
    - },
    - },
    { /* Handle ThinkPad 8 tablets with BCM2E55 chipset ACPI ID */
    .ident = "Lenovo ThinkPad 8",
    .matches = {
    @@ -838,7 +822,9 @@ static int bcm_resource(struct acpi_reso
    switch (ares->type) {
    case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
    irq = &ares->data.extended_irq;
    - dev->irq_active_low = irq->polarity == ACPI_ACTIVE_LOW;
    + if (irq->polarity != ACPI_ACTIVE_LOW)
    + dev_info(dev->dev, "ACPI Interrupt resource is active-high, this is usually wrong, treating the IRQ as active-low\n");
    + dev->irq_active_low = true;
    break;

    case ACPI_RESOURCE_TYPE_GPIO:

    \
     
     \ /
      Last update: 2018-04-17 18:58    [W:4.228 / U:1.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site