diff options
author | Tomasz Nowicki <tn@semihalf.com> | 2015-09-08 10:33:43 +0200 |
---|---|---|
committer | Tomasz Nowicki <tn@semihalf.com> | 2015-09-08 13:35:08 +0200 |
commit | c8e6c9ec8173777b46c01d28b80de5224ad496f9 (patch) | |
tree | f9dc7bb9a8fed4766a9391ec1afc3bbac6524a3d | |
parent | 51514b449a322258145854bf37dbdba8290dbfbf (diff) |
acpi, platform: Setup MSI domain for ACPI based platform device.linaro-acpi-master
Signed-off-by: Tomasz Nowicki <tn@semihalf.com>
-rw-r--r-- | drivers/acpi/acpi_platform.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index 06a67d5f2846..bb594846c469 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -14,8 +14,10 @@ #include <linux/acpi.h> #include <linux/device.h> #include <linux/err.h> +#include <linux/irqdomain.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/msi.h> #include <linux/dma-mapping.h> #include <linux/platform_device.h> @@ -30,6 +32,20 @@ static const struct acpi_device_id forbidden_id_list[] = { {"", 0}, }; +static void acpi_configure_msi_domain(struct device *dev) +{ + struct irq_domain *d; + void *token; + + if (msi_get_domain_token(dev, DOMAIN_BUS_PLATFORM_MSI, &token)) + return; + + d = irq_find_matching_host(token, DOMAIN_BUS_PLATFORM_MSI); + if (!d) + d = irq_find_host(token); + dev_set_msi_domain(dev, d); +} + /** * acpi_create_platform_device - Create platform device for ACPI device node * @adev: ACPI device node to create a platform device for. @@ -112,6 +128,8 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) dev_dbg(&adev->dev, "created platform device %s\n", dev_name(&pdev->dev)); + acpi_configure_msi_domain(&pdev->dev); + kfree(resources); return pdev; } |