Skip to content

Commit 2b05393

Browse files
jwrdegoedeholtmann
authored andcommitted
Bluetooth: hci_bcm: Add broken-irq dmi blacklist and add Meegopad T08 to it
The Meegopad T08 hdmi-stick (think Intel computestick) has a brcm43430 wifi/bt combo chip. The BCM2E90 ACPI device describing the BT part does contain a valid ActiveLow GpioInt entry, but the GPIO it points to never goes low, so either the IRQ pin is not connected, or the ACPI resource- table points to the wrong GPIO. Eitherway things will not work if we try to use the specified IRQ, this commits adds a DMI based broken-irq blacklist and disables use of the IRQ and thus also runtime-pm for devices on this list. This blacklist starts with the the Meegopad T08, fixing bluetooth not working on this hdmi-stick. Since this is not a battery powered device the loss of runtime-pm is not really an issue. Signed-off-by: Hans de Goede <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent 538e2de commit 2b05393

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

drivers/bluetooth/hci_bcm.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,20 @@ static const struct acpi_gpio_mapping acpi_bcm_int_first_gpios[] = {
794794
{ },
795795
};
796796

797+
/* Some firmware reports an IRQ which does not work (wrong pin in fw table?) */
798+
static const struct dmi_system_id bcm_broken_irq_dmi_table[] = {
799+
{
800+
.ident = "Meegopad T08",
801+
.matches = {
802+
DMI_EXACT_MATCH(DMI_BOARD_VENDOR,
803+
"To be filled by OEM."),
804+
DMI_EXACT_MATCH(DMI_BOARD_NAME, "T3 MRD"),
805+
DMI_EXACT_MATCH(DMI_BOARD_VERSION, "V1.1"),
806+
},
807+
},
808+
{ }
809+
};
810+
797811
#ifdef CONFIG_ACPI
798812
/* IRQ polarity of some chipsets are not defined correctly in ACPI table. */
799813
static const struct dmi_system_id bcm_active_low_irq_dmi_table[] = {
@@ -904,6 +918,8 @@ static int bcm_gpio_set_shutdown(struct bcm_device *dev, bool powered)
904918

905919
static int bcm_get_resources(struct bcm_device *dev)
906920
{
921+
const struct dmi_system_id *dmi_id;
922+
907923
dev->name = dev_name(dev->dev);
908924

909925
if (x86_apple_machine && !bcm_apple_get_resources(dev))
@@ -936,6 +952,13 @@ static int bcm_get_resources(struct bcm_device *dev)
936952
dev->irq = gpiod_to_irq(gpio);
937953
}
938954

955+
dmi_id = dmi_first_match(bcm_broken_irq_dmi_table);
956+
if (dmi_id) {
957+
dev_info(dev->dev, "%s: Has a broken IRQ config, disabling IRQ support / runtime-pm\n",
958+
dmi_id->ident);
959+
dev->irq = 0;
960+
}
961+
939962
dev_dbg(dev->dev, "BCM irq: %d\n", dev->irq);
940963
return 0;
941964
}

0 commit comments

Comments
 (0)