Bluetooth: hci_bcm: Make acpi_probe get irq from ACPI resources
authorHans de Goede <hdegoede@redhat.com>
Wed, 4 Oct 2017 18:43:41 +0000 (20:43 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 6 Oct 2017 18:35:48 +0000 (20:35 +0200)
The ACPI subsys is going to move over to instantiating ACPI enumerated
HCIs as serdevs, rather then as platform devices.

So we need to make bcm_acpi_probe() suitable for use on non platform-
devices too, which means that we cannot rely on platform_get_irq()
getting called.

This commit modifies bcm_acpi_probe() to directly get the irq from
the ACPI resources, this is a preparation patch for adding (runtime)pm
support to the serdev path.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_bcm.c

index 7f1971a..cadf629 100644 (file)
@@ -751,8 +751,7 @@ static int bcm_resource(struct acpi_resource *ares, void *data)
                break;
        }
 
-       /* Always tell the ACPI core to skip this resource */
-       return 1;
+       return 0;
 }
 #endif /* CONFIG_ACPI */
 
@@ -805,6 +804,7 @@ static int bcm_acpi_probe(struct bcm_device *dev)
        const struct dmi_system_id *dmi_id;
        const struct acpi_gpio_mapping *gpio_mapping = acpi_bcm_int_last_gpios;
        const struct acpi_device_id *id;
+       struct resource_entry *entry;
        int ret;
 
        /* Retrieve GPIO data */
@@ -821,6 +821,13 @@ static int bcm_acpi_probe(struct bcm_device *dev)
                                     &resources, bcm_resource, dev);
        if (ret < 0)
                return ret;
+
+       resource_list_for_each_entry(entry, &resources) {
+               if (resource_type(entry->res) == IORESOURCE_IRQ) {
+                       dev->irq = entry->res->start;
+                       break;
+               }
+       }
        acpi_dev_free_resource_list(&resources);
 
        dmi_id = dmi_first_match(bcm_active_low_irq_dmi_table);