Johnny Hughes
2019-02-04 c1f36c28393a7bb126cbf436cd6a4077a5b5c313
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
From 62b61856762a48709e29bbfc5f804b6185b79d93 Mon Sep 17 00:00:00 2001
From: Khuong Dinh <khuong.dinh@amperecomputing.com>
Date: Wed, 13 Dec 2017 02:20:48 -0500
Subject: [PATCH 06/11] BACKPORT: ACPI / bus: Introduce acpi_get_match_data()
 function
 
OF has of_device_get_match_data() function to extract driver specific data
structure. Add a similar function for ACPI.
 
This patch is required to support AHCI ALPM de-feature for Ampere Computing
eMAG SATA.
This patch is backported from:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?h=next-20180913&id=80212a162329e590fde02d8457af16ea0ab0a55f
 
Change-Id: I764d8e7ef1e9375561dc895bba74f8edb5888d06
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Khuong Dinh <khuong.dinh@amperecomputing.com>
---
 drivers/acpi/bus.c   | 18 ++++++++++++++++++
 include/linux/acpi.h |  6 ++++++
 2 files changed, 24 insertions(+)
 
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 4d0979e..f87ed3b 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -785,6 +785,24 @@ const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
 }
 EXPORT_SYMBOL_GPL(acpi_match_device);
 
+void *acpi_get_match_data(const struct device *dev)
+{
+    const struct acpi_device_id *match;
+
+    if (!dev->driver)
+        return NULL;
+
+    if (!dev->driver->acpi_match_table)
+        return NULL;
+
+    match = acpi_match_device(dev->driver->acpi_match_table, dev);
+    if (!match)
+        return NULL;
+
+    return (void *)match->driver_data;
+}
+EXPORT_SYMBOL_GPL(acpi_get_match_data);
+
 int acpi_match_device_ids(struct acpi_device *device,
               const struct acpi_device_id *ids)
 {
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 8bcfe3d..42e1565 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -584,6 +584,7 @@ extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
 const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
                            const struct device *dev);
 
+void *acpi_get_match_data(const struct device *dev);
 extern bool acpi_driver_match_device(struct device *dev,
                      const struct device_driver *drv);
 int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *);
@@ -755,6 +756,11 @@ static inline const struct acpi_device_id *acpi_match_device(
     return NULL;
 }
 
+static inline void *acpi_get_match_data(const struct device *dev)
+{
+    return NULL;
+}
+
 static inline bool acpi_driver_match_device(struct device *dev,
                         const struct device_driver *drv)
 {
-- 
1.8.3.1