1
A simple refactoring of the GPIO ACPI library parts to get an impressive
1
A simple refactoring of the GPIO ACPI library parts to get an impressive
2
~8% code shrink on x86_64 and ~2% on x86_32. Also reduces a C code a bit.
2
~8% code shrink on x86_64 and ~2% on x86_32. Also reduces a C code a bit.
3
3
4
Andy Shevchenko (5):
4
add/remove: 0/2 grow/shrink: 0/5 up/down: 0/-1221 (-1221)
5
Function old new delta
6
acpi_gpio_property_lookup 425 414 -11
7
acpi_find_gpio.__UNIQUE_ID_ddebug478 56 - -56
8
acpi_dev_gpio_irq_wake_get_by.__UNIQUE_ID_ddebug480 56 - -56
9
acpi_find_gpio 354 216 -138
10
acpi_get_gpiod_by_index 462 307 -155
11
__acpi_find_gpio 877 638 -239
12
acpi_dev_gpio_irq_wake_get_by 695 129 -566
13
Total: Before=15375, After=14154, chg -7.94%
14
15
In v2:
16
- renamed par to params (Mika, Bart)
17
18
Andy Shevchenko (6):
5
gpiolib: acpi: Improve struct acpi_gpio_info memory footprint
19
gpiolib: acpi: Improve struct acpi_gpio_info memory footprint
6
gpiolib: acpi: Remove index parameter from acpi_gpio_property_lookup()
20
gpiolib: acpi: Remove index parameter from acpi_gpio_property_lookup()
7
gpiolib: acpi: Reduce memory footprint for struct acpi_gpio_params
21
gpiolib: acpi: Reduce memory footprint for struct acpi_gpio_params
22
gpiolib: acpi: Rename par to params for better readability
8
gpiolib: acpi: Reuse struct acpi_gpio_params in struct
23
gpiolib: acpi: Reuse struct acpi_gpio_params in struct
9
acpi_gpio_lookup
24
acpi_gpio_lookup
10
gpiolib: acpi: Deduplicate some code in __acpi_find_gpio()
25
gpiolib: acpi: Deduplicate some code in __acpi_find_gpio()
11
26
12
drivers/gpio/gpiolib-acpi.c | 138 +++++++++++++++++-----------------
27
drivers/gpio/gpiolib-acpi.c | 146 +++++++++++++++++-----------------
13
include/linux/gpio/consumer.h | 2 +-
28
include/linux/gpio/consumer.h | 2 +-
14
2 files changed, 68 insertions(+), 72 deletions(-)
29
2 files changed, 72 insertions(+), 76 deletions(-)
15
30
16
--
31
--
17
2.47.2
32
2.47.2
diff view generated by jsdifflib
1
The struct acpi_gpio_info has two boolean members that are located
1
The struct acpi_gpio_info has two boolean members that are located
2
not close to each other making two gaps due to alignment requirements.
2
not close to each other making two gaps due to alignment requirements.
3
Group them to improve memory footprint.
3
Group them to improve memory footprint.
4
4
5
`pahole` difference before and after (on 32-bit):
5
`pahole` difference before and after (on 32-bit):
6
6
7
- /* size: 36, cachelines: 1, members: 9 */
7
- /* size: 36, cachelines: 1, members: 9 */
8
- /* sum members: 30, holes: 2, sum holes: 6 */
8
- /* sum members: 30, holes: 2, sum holes: 6 */
9
9
10
+ /* size: 32, cachelines: 1, members: 9 */
10
+ /* size: 32, cachelines: 1, members: 9 */
11
+ /* sum members: 30, holes: 1, sum holes: 2 */
11
+ /* sum members: 30, holes: 1, sum holes: 2 */
12
12
13
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
13
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
14
---
14
---
15
drivers/gpio/gpiolib-acpi.c | 4 ++--
15
drivers/gpio/gpiolib-acpi.c | 4 ++--
16
1 file changed, 2 insertions(+), 2 deletions(-)
16
1 file changed, 2 insertions(+), 2 deletions(-)
17
17
18
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
18
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
19
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
20
--- a/drivers/gpio/gpiolib-acpi.c
20
--- a/drivers/gpio/gpiolib-acpi.c
21
+++ b/drivers/gpio/gpiolib-acpi.c
21
+++ b/drivers/gpio/gpiolib-acpi.c
22
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_chip {
22
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_chip {
23
* @adev: reference to ACPI device which consumes GPIO resource
23
* @adev: reference to ACPI device which consumes GPIO resource
24
* @flags: GPIO initialization flags
24
* @flags: GPIO initialization flags
25
* @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo
25
* @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo
26
+ * @wake_capable: wake capability as provided by ACPI
26
+ * @wake_capable: wake capability as provided by ACPI
27
* @pin_config: pin bias as provided by ACPI
27
* @pin_config: pin bias as provided by ACPI
28
* @polarity: interrupt polarity as provided by ACPI
28
* @polarity: interrupt polarity as provided by ACPI
29
* @triggering: triggering type as provided by ACPI
29
* @triggering: triggering type as provided by ACPI
30
- * @wake_capable: wake capability as provided by ACPI
30
- * @wake_capable: wake capability as provided by ACPI
31
* @debounce: debounce timeout as provided by ACPI
31
* @debounce: debounce timeout as provided by ACPI
32
* @quirks: Linux specific quirks as provided by struct acpi_gpio_mapping
32
* @quirks: Linux specific quirks as provided by struct acpi_gpio_mapping
33
*/
33
*/
34
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_info {
34
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_info {
35
    struct acpi_device *adev;
35
    struct acpi_device *adev;
36
    enum gpiod_flags flags;
36
    enum gpiod_flags flags;
37
    bool gpioint;
37
    bool gpioint;
38
+    bool wake_capable;
38
+    bool wake_capable;
39
    int pin_config;
39
    int pin_config;
40
    int polarity;
40
    int polarity;
41
    int triggering;
41
    int triggering;
42
-    bool wake_capable;
42
-    bool wake_capable;
43
    unsigned int debounce;
43
    unsigned int debounce;
44
    unsigned int quirks;
44
    unsigned int quirks;
45
};
45
};
46
--
46
--
47
2.47.2
47
2.47.2
diff view generated by jsdifflib
1
In all cases the supplied index is the same as the passed one in
1
In all cases the supplied index is the same as the passed one in
2
the struct acpi_gpio_lookup. Remove index parameter and reuse one
2
the struct acpi_gpio_lookup. Remove index parameter and reuse one
3
from the struct acpi_gpio_lookup instead.
3
from the struct acpi_gpio_lookup instead.
4
5
add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-14 (-14)
6
Function old new delta
7
acpi_get_gpiod_by_index 462 456 -6
8
acpi_gpio_property_lookup 425 417 -8
9
Total: Before=15375, After=15361, chg -0.09%
4
10
5
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
11
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
6
---
12
---
7
drivers/gpio/gpiolib-acpi.c | 13 ++++++-------
13
drivers/gpio/gpiolib-acpi.c | 13 ++++++-------
8
1 file changed, 6 insertions(+), 7 deletions(-)
14
1 file changed, 6 insertions(+), 7 deletions(-)
...
...
diff view generated by jsdifflib
1
The line_index member in the struct acpi_gpio_params replicates
1
The line_index member in the struct acpi_gpio_params replicates
2
what is covered in the ACPI GpioIo() or GpioInt() resource.
2
what is covered in the ACPI GpioIo() or GpioInt() resource.
3
The value there is limited to 16-bit one, so we don't really need
3
The value there is limited to 16-bit one, so we don't really need
4
to have a full 32-bit storage for it. Together with followed
4
to have a full 32-bit storage for it. Together with followed
5
boolean the structure will be smaller.
5
boolean the structure will be smaller.
6
7
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-3 (-3)
8
Function old new delta
9
acpi_gpio_property_lookup 417 414 -3
10
Total: Before=15361, After=15358, chg -0.02%
6
11
7
`pahole` difference before and after:
12
`pahole` difference before and after:
8
13
9
-    /* size: 12, cachelines: 1, members: 3 */
14
-    /* size: 12, cachelines: 1, members: 3 */
10
-    /* padding: 3 */
15
-    /* padding: 3 */
...
...
diff view generated by jsdifflib
New patch
1
Rename par to params for better readability in acpi_get_driver_gpio_data().
2
No functional changes intended.
1
3
4
Requested-by: Bartosz Golaszewski <brgl@bgdev.pl>
5
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
6
---
7
drivers/gpio/gpiolib-acpi.c | 8 ++++----
8
1 file changed, 4 insertions(+), 4 deletions(-)
9
10
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/drivers/gpio/gpiolib-acpi.c
13
+++ b/drivers/gpio/gpiolib-acpi.c
14
@@ -XXX,XX +XXX,XX @@ static bool acpi_get_driver_gpio_data(struct acpi_device *adev,
15
16
    for (gm = adev->driver_gpios; gm->name; gm++)
17
        if (!strcmp(name, gm->name) && gm->data && index < gm->size) {
18
-            const struct acpi_gpio_params *par = gm->data + index;
19
+            const struct acpi_gpio_params *params = gm->data + index;
20
21
            args->fwnode = acpi_fwnode_handle(adev);
22
-            args->args[0] = par->crs_entry_index;
23
-            args->args[1] = par->line_index;
24
-            args->args[2] = par->active_low;
25
+            args->args[0] = params->crs_entry_index;
26
+            args->args[1] = params->line_index;
27
+            args->args[2] = params->active_low;
28
            args->nargs = 3;
29
30
            *quirks = gm->quirks;
31
--
32
2.47.2
diff view generated by jsdifflib
1
Some of the contents of struct acpi_gpio_lookup repeats what we have
1
Some of the contents of struct acpi_gpio_lookup repeats what we have
2
in the struct acpi_gpio_params. Reuse the latter in the former.
2
in the struct acpi_gpio_params. Reuse the latter in the former.
3
3
4
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
4
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
5
---
5
---
6
drivers/gpio/gpiolib-acpi.c | 34 ++++++++++++++++++----------------
6
drivers/gpio/gpiolib-acpi.c | 36 +++++++++++++++++++-----------------
7
1 file changed, 18 insertions(+), 16 deletions(-)
7
1 file changed, 19 insertions(+), 17 deletions(-)
8
8
9
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
9
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
10
index XXXXXXX..XXXXXXX 100644
10
index XXXXXXX..XXXXXXX 100644
11
--- a/drivers/gpio/gpiolib-acpi.c
11
--- a/drivers/gpio/gpiolib-acpi.c
12
+++ b/drivers/gpio/gpiolib-acpi.c
12
+++ b/drivers/gpio/gpiolib-acpi.c
...
...
15
struct acpi_gpio_lookup {
15
struct acpi_gpio_lookup {
16
    struct acpi_gpio_info info;
16
    struct acpi_gpio_info info;
17
-    int index;
17
-    int index;
18
-    u16 pin_index;
18
-    u16 pin_index;
19
-    bool active_low;
19
-    bool active_low;
20
+    struct acpi_gpio_params par;
20
+    struct acpi_gpio_params params;
21
    struct gpio_desc *desc;
21
    struct gpio_desc *desc;
22
    int n;
22
    int n;
23
};
23
};
24
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_lookup {
24
@@ -XXX,XX +XXX,XX @@ struct acpi_gpio_lookup {
25
static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
25
static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
26
{
26
{
27
    struct acpi_gpio_lookup *lookup = data;
27
    struct acpi_gpio_lookup *lookup = data;
28
+    struct acpi_gpio_params *par = &lookup->par;
28
+    struct acpi_gpio_params *params = &lookup->params;
29
29
30
    if (ares->type != ACPI_RESOURCE_TYPE_GPIO)
30
    if (ares->type != ACPI_RESOURCE_TYPE_GPIO)
31
        return 1;
31
        return 1;
32
@@ -XXX,XX +XXX,XX @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
32
@@ -XXX,XX +XXX,XX @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
33
        u16 pin_index;
33
        u16 pin_index;
34
34
35
        if (lookup->info.quirks & ACPI_GPIO_QUIRK_ONLY_GPIOIO && gpioint)
35
        if (lookup->info.quirks & ACPI_GPIO_QUIRK_ONLY_GPIOIO && gpioint)
36
-            lookup->index++;
36
-            lookup->index++;
37
+            par->crs_entry_index++;
37
+            params->crs_entry_index++;
38
38
39
-        if (lookup->n++ != lookup->index)
39
-        if (lookup->n++ != lookup->index)
40
+        if (lookup->n++ != par->crs_entry_index)
40
+        if (lookup->n++ != params->crs_entry_index)
41
            return 1;
41
            return 1;
42
42
43
-        pin_index = lookup->pin_index;
43
-        pin_index = lookup->pin_index;
44
+        pin_index = par->line_index;
44
+        pin_index = params->line_index;
45
        if (pin_index >= agpio->pin_table_length)
45
        if (pin_index >= agpio->pin_table_length)
46
            return 1;
46
            return 1;
47
47
48
@@ -XXX,XX +XXX,XX @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
48
@@ -XXX,XX +XXX,XX @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
49
            lookup->info.polarity = agpio->polarity;
49
            lookup->info.polarity = agpio->polarity;
50
            lookup->info.triggering = agpio->triggering;
50
            lookup->info.triggering = agpio->triggering;
51
        } else {
51
        } else {
52
-            lookup->info.polarity = lookup->active_low;
52
-            lookup->info.polarity = lookup->active_low;
53
+            lookup->info.polarity = par->active_low;
53
+            lookup->info.polarity = params->active_low;
54
        }
54
        }
55
55
56
        lookup->info.flags = acpi_gpio_to_gpiod_flags(agpio, lookup->info.polarity);
56
        lookup->info.flags = acpi_gpio_to_gpiod_flags(agpio, lookup->info.polarity);
57
@@ -XXX,XX +XXX,XX @@ static int acpi_gpio_property_lookup(struct fwnode_handle *fwnode, const char *p
57
@@ -XXX,XX +XXX,XX @@ static int acpi_gpio_property_lookup(struct fwnode_handle *fwnode, const char *p
58
                 struct acpi_gpio_lookup *lookup)
58
                 struct acpi_gpio_lookup *lookup)
59
{
59
{
60
    struct fwnode_reference_args args;
60
    struct fwnode_reference_args args;
61
-    unsigned int index = lookup->index;
61
-    unsigned int index = lookup->index;
62
+    struct acpi_gpio_params *par = &lookup->par;
62
+    struct acpi_gpio_params *params = &lookup->params;
63
+    unsigned int index = par->crs_entry_index;
63
+    unsigned int index = params->crs_entry_index;
64
    unsigned int quirks = 0;
64
    unsigned int quirks = 0;
65
    int ret;
65
    int ret;
66
66
67
@@ -XXX,XX +XXX,XX @@ static int acpi_gpio_property_lookup(struct fwnode_handle *fwnode, const char *p
67
@@ -XXX,XX +XXX,XX @@ static int acpi_gpio_property_lookup(struct fwnode_handle *fwnode, const char *p
68
    if (args.nargs != 3)
68
    if (args.nargs != 3)
69
        return -EPROTO;
69
        return -EPROTO;
70
70
71
-    lookup->index = args.args[0];
71
-    lookup->index = args.args[0];
72
-    lookup->pin_index = args.args[1];
72
-    lookup->pin_index = args.args[1];
73
-    lookup->active_low = !!args.args[2];
73
-    lookup->active_low = !!args.args[2];
74
+    par->crs_entry_index = args.args[0];
74
+    params->crs_entry_index = args.args[0];
75
+    par->line_index = args.args[1];
75
+    params->line_index = args.args[1];
76
+    par->active_low = !!args.args[2];
76
+    params->active_low = !!args.args[2];
77
77
78
    lookup->info.adev = to_acpi_device_node(args.fwnode);
78
    lookup->info.adev = to_acpi_device_node(args.fwnode);
79
    lookup->info.quirks = quirks;
79
    lookup->info.quirks = quirks;
80
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
80
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
81
                         struct acpi_gpio_info *info)
81
                         struct acpi_gpio_info *info)
82
{
82
{
83
    struct acpi_gpio_lookup lookup;
83
    struct acpi_gpio_lookup lookup;
84
+    struct acpi_gpio_params *par = &lookup.par;
84
+    struct acpi_gpio_params *params = &lookup.params;
85
    int ret;
85
    int ret;
86
86
87
    memset(&lookup, 0, sizeof(lookup));
87
    memset(&lookup, 0, sizeof(lookup));
88
-    lookup.index = index;
88
-    lookup.index = index;
89
+    par->crs_entry_index = index;
89
+    params->crs_entry_index = index;
90
90
91
    if (propname) {
91
    if (propname) {
92
        dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
92
        dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
93
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
93
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_by_index(struct acpi_device *adev,
94
        if (ret)
94
        if (ret)
...
...
97
-        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %d %u %u\n",
97
-        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %d %u %u\n",
98
-            dev_name(&lookup.info.adev->dev), lookup.index,
98
-            dev_name(&lookup.info.adev->dev), lookup.index,
99
-            lookup.pin_index, lookup.active_low);
99
-            lookup.pin_index, lookup.active_low);
100
+        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %u %u %u\n",
100
+        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %u %u %u\n",
101
+            dev_name(&lookup.info.adev->dev),
101
+            dev_name(&lookup.info.adev->dev),
102
+            par->crs_entry_index, par->line_index, par->active_low);
102
+            params->crs_entry_index, params->line_index, params->active_low);
103
    } else {
103
    } else {
104
        dev_dbg(&adev->dev, "GPIO: looking up %d in _CRS\n", index);
104
-        dev_dbg(&adev->dev, "GPIO: looking up %d in _CRS\n", index);
105
+        dev_dbg(&adev->dev, "GPIO: looking up %u in _CRS\n", params->crs_entry_index);
105
        lookup.info.adev = adev;
106
        lookup.info.adev = adev;
107
    }
108
106
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,
109
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,
107
                         struct acpi_gpio_info *info)
110
                         struct acpi_gpio_info *info)
108
{
111
{
109
    struct acpi_gpio_lookup lookup;
112
    struct acpi_gpio_lookup lookup;
110
+    struct acpi_gpio_params *par = &lookup.par;
113
+    struct acpi_gpio_params *params = &lookup.params;
111
    int ret;
114
    int ret;
112
115
113
    if (!is_acpi_data_node(fwnode))
116
    if (!is_acpi_data_node(fwnode))
114
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,
117
@@ -XXX,XX +XXX,XX @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,
115
        return ERR_PTR(-EINVAL);
118
        return ERR_PTR(-EINVAL);
116
119
117
    memset(&lookup, 0, sizeof(lookup));
120
    memset(&lookup, 0, sizeof(lookup));
118
-    lookup.index = index;
121
-    lookup.index = index;
119
+    par->crs_entry_index = index;
122
+    params->crs_entry_index = index;
120
123
121
    ret = acpi_gpio_property_lookup(fwnode, propname, &lookup);
124
    ret = acpi_gpio_property_lookup(fwnode, propname, &lookup);
122
    if (ret)
125
    if (ret)
123
--
126
--
124
2.47.2
127
2.47.2
diff view generated by jsdifflib
...
...
14
acpi_dev_gpio_irq_wake_get_by 695 129 -566
14
acpi_dev_gpio_irq_wake_get_by 695 129 -566
15
Total: Before=15358, After=14154, chg -7.84%
15
Total: Before=15358, After=14154, chg -7.84%
16
16
17
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
17
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
18
---
18
---
19
drivers/gpio/gpiolib-acpi.c | 103 +++++++++++++++++-------------------
19
drivers/gpio/gpiolib-acpi.c | 101 +++++++++++++++++-------------------
20
1 file changed, 49 insertions(+), 54 deletions(-)
20
1 file changed, 48 insertions(+), 53 deletions(-)
21
21
22
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
22
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
23
index XXXXXXX..XXXXXXX 100644
23
index XXXXXXX..XXXXXXX 100644
24
--- a/drivers/gpio/gpiolib-acpi.c
24
--- a/drivers/gpio/gpiolib-acpi.c
25
+++ b/drivers/gpio/gpiolib-acpi.c
25
+++ b/drivers/gpio/gpiolib-acpi.c
...
...
80
-                         struct acpi_gpio_info *info)
80
-                         struct acpi_gpio_info *info)
81
+static int acpi_get_gpiod_by_index(struct acpi_device *adev, const char *propname,
81
+static int acpi_get_gpiod_by_index(struct acpi_device *adev, const char *propname,
82
+                 struct acpi_gpio_lookup *lookup)
82
+                 struct acpi_gpio_lookup *lookup)
83
{
83
{
84
-    struct acpi_gpio_lookup lookup;
84
-    struct acpi_gpio_lookup lookup;
85
-    struct acpi_gpio_params *par = &lookup.par;
85
-    struct acpi_gpio_params *params = &lookup.params;
86
+    struct acpi_gpio_info *info = &lookup->info;
86
+    struct acpi_gpio_info *info = &lookup->info;
87
+    struct acpi_gpio_params *par = &lookup->par;
87
+    struct acpi_gpio_params *params = &lookup->params;
88
    int ret;
88
    int ret;
89
89
90
-    memset(&lookup, 0, sizeof(lookup));
90
-    memset(&lookup, 0, sizeof(lookup));
91
-    par->crs_entry_index = index;
91
-    params->crs_entry_index = index;
92
-
92
-
93
    if (propname) {
93
    if (propname) {
94
        dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
94
        dev_dbg(&adev->dev, "GPIO: looking up %s\n", propname);
95
95
96
-        ret = acpi_gpio_property_lookup(acpi_fwnode_handle(adev), propname, &lookup);
96
-        ret = acpi_gpio_property_lookup(acpi_fwnode_handle(adev), propname, &lookup);
...
...
100
+            return ret;
100
+            return ret;
101
101
102
        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %u %u %u\n",
102
        dev_dbg(&adev->dev, "GPIO: _DSD returned %s %u %u %u\n",
103
-            dev_name(&lookup.info.adev->dev),
103
-            dev_name(&lookup.info.adev->dev),
104
+            dev_name(&info->adev->dev),
104
+            dev_name(&info->adev->dev),
105
            par->crs_entry_index, par->line_index, par->active_low);
105
            params->crs_entry_index, params->line_index, params->active_low);
106
    } else {
106
    } else {
107
-        dev_dbg(&adev->dev, "GPIO: looking up %d in _CRS\n", index);
107
        dev_dbg(&adev->dev, "GPIO: looking up %u in _CRS\n", params->crs_entry_index);
108
-        lookup.info.adev = adev;
108
-        lookup.info.adev = adev;
109
+        dev_dbg(&adev->dev, "GPIO: looking up %u in _CRS\n", par->crs_entry_index);
110
+        info->adev = adev;
109
+        info->adev = adev;
111
    }
110
    }
112
111
113
-    ret = acpi_gpio_resource_lookup(&lookup, info);
112
-    ret = acpi_gpio_resource_lookup(&lookup, info);
114
-    return ret ? ERR_PTR(ret) : lookup.desc;
113
-    return ret ? ERR_PTR(ret) : lookup.desc;
...
...
142
-                         struct acpi_gpio_info *info)
141
-                         struct acpi_gpio_info *info)
143
+static int acpi_get_gpiod_from_data(struct fwnode_handle *fwnode, const char *propname,
142
+static int acpi_get_gpiod_from_data(struct fwnode_handle *fwnode, const char *propname,
144
+                 struct acpi_gpio_lookup *lookup)
143
+                 struct acpi_gpio_lookup *lookup)
145
{
144
{
146
-    struct acpi_gpio_lookup lookup;
145
-    struct acpi_gpio_lookup lookup;
147
-    struct acpi_gpio_params *par = &lookup.par;
146
-    struct acpi_gpio_params *params = &lookup.params;
148
    int ret;
147
    int ret;
149
148
150
    if (!is_acpi_data_node(fwnode))
149
    if (!is_acpi_data_node(fwnode))
151
-        return ERR_PTR(-ENODEV);
150
-        return ERR_PTR(-ENODEV);
152
+        return -ENODEV;
151
+        return -ENODEV;
153
152
154
    if (!propname)
153
    if (!propname)
155
-        return ERR_PTR(-EINVAL);
154
-        return ERR_PTR(-EINVAL);
156
+        return -EINVAL;
155
+        return -EINVAL;
157
156
158
-    memset(&lookup, 0, sizeof(lookup));
157
-    memset(&lookup, 0, sizeof(lookup));
159
-    par->crs_entry_index = index;
158
-    params->crs_entry_index = index;
160
-
159
-
161
-    ret = acpi_gpio_property_lookup(fwnode, propname, &lookup);
160
-    ret = acpi_gpio_property_lookup(fwnode, propname, &lookup);
162
+    ret = acpi_gpio_property_lookup(fwnode, propname, lookup);
161
+    ret = acpi_gpio_property_lookup(fwnode, propname, lookup);
163
    if (ret)
162
    if (ret)
164
-        return ERR_PTR(ret);
163
-        return ERR_PTR(ret);
...
...
178
    struct gpio_desc *desc;
177
    struct gpio_desc *desc;
179
    char propname[32];
178
    char propname[32];
180
+    int ret;
179
+    int ret;
181
+
180
+
182
+    memset(&lookup, 0, sizeof(lookup));
181
+    memset(&lookup, 0, sizeof(lookup));
183
+    lookup.par.crs_entry_index = idx;
182
+    lookup.params.crs_entry_index = idx;
184
183
185
    /* Try first from _DSD */
184
    /* Try first from _DSD */
186
    for_each_gpio_property_name(propname, con_id) {
185
    for_each_gpio_property_name(propname, con_id) {
187
        if (adev)
186
        if (adev)
188
-            desc = acpi_get_gpiod_by_index(adev,
187
-            desc = acpi_get_gpiod_by_index(adev,
...
...
diff view generated by jsdifflib