summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Nowicki <tn@semihalf.com>2015-09-08 10:33:43 +0200
committerTomasz Nowicki <tn@semihalf.com>2015-09-08 13:35:08 +0200
commitc8e6c9ec8173777b46c01d28b80de5224ad496f9 (patch)
treef9dc7bb9a8fed4766a9391ec1afc3bbac6524a3d
parent51514b449a322258145854bf37dbdba8290dbfbf (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.c18
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;
}