aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ssb
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-12-08 17:00:46 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-04-26 09:34:49 -0400
commit2d4443be10a70100cfdc1abcf1475a86bc62534b (patch)
treee2f204774490a3fb04acf7a2ff4c7afe0e26794f /drivers/ssb
parent3769a895b4a61b66085f97f8124df4833ee6e577 (diff)
ssb: gpio_driver: use gpiochip data pointer
This makes the driver use the data pointer added to the gpio_chip to store a pointer to the state container instead of relying on container_of(). Cc: Hauke Mehrtens <hauke@hauke-m.de> Cc: Michael Buesch <m@bues.ch> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/ssb')
-rw-r--r--drivers/ssb/driver_gpio.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/drivers/ssb/driver_gpio.c b/drivers/ssb/driver_gpio.c
index f92e266d48f8..180e027b1c8a 100644
--- a/drivers/ssb/driver_gpio.c
+++ b/drivers/ssb/driver_gpio.c
@@ -8,7 +8,7 @@
8 * Licensed under the GNU/GPL. See COPYING for details. 8 * Licensed under the GNU/GPL. See COPYING for details.
9 */ 9 */
10 10
11#include <linux/gpio.h> 11#include <linux/gpio/driver.h>
12#include <linux/irq.h> 12#include <linux/irq.h>
13#include <linux/interrupt.h> 13#include <linux/interrupt.h>
14#include <linux/irqdomain.h> 14#include <linux/irqdomain.h>
@@ -22,15 +22,10 @@
22 * Shared 22 * Shared
23 **************************************************/ 23 **************************************************/
24 24
25static struct ssb_bus *ssb_gpio_get_bus(struct gpio_chip *chip)
26{
27 return container_of(chip, struct ssb_bus, gpio);
28}
29
30#if IS_ENABLED(CONFIG_SSB_EMBEDDED) 25#if IS_ENABLED(CONFIG_SSB_EMBEDDED)
31static int ssb_gpio_to_irq(struct gpio_chip *chip, unsigned gpio) 26static int ssb_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
32{ 27{
33 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 28 struct ssb_bus *bus = gpiochip_get_data(chip);
34 29
35 if (bus->bustype == SSB_BUSTYPE_SSB) 30 if (bus->bustype == SSB_BUSTYPE_SSB)
36 return irq_find_mapping(bus->irq_domain, gpio); 31 return irq_find_mapping(bus->irq_domain, gpio);
@@ -45,7 +40,7 @@ static int ssb_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
45 40
46static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio) 41static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio)
47{ 42{
48 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 43 struct ssb_bus *bus = gpiochip_get_data(chip);
49 44
50 return !!ssb_chipco_gpio_in(&bus->chipco, 1 << gpio); 45 return !!ssb_chipco_gpio_in(&bus->chipco, 1 << gpio);
51} 46}
@@ -53,7 +48,7 @@ static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio)
53static void ssb_gpio_chipco_set_value(struct gpio_chip *chip, unsigned gpio, 48static void ssb_gpio_chipco_set_value(struct gpio_chip *chip, unsigned gpio,
54 int value) 49 int value)
55{ 50{
56 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 51 struct ssb_bus *bus = gpiochip_get_data(chip);
57 52
58 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0); 53 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0);
59} 54}
@@ -61,7 +56,7 @@ static void ssb_gpio_chipco_set_value(struct gpio_chip *chip, unsigned gpio,
61static int ssb_gpio_chipco_direction_input(struct gpio_chip *chip, 56static int ssb_gpio_chipco_direction_input(struct gpio_chip *chip,
62 unsigned gpio) 57 unsigned gpio)
63{ 58{
64 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 59 struct ssb_bus *bus = gpiochip_get_data(chip);
65 60
66 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 0); 61 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 0);
67 return 0; 62 return 0;
@@ -70,7 +65,7 @@ static int ssb_gpio_chipco_direction_input(struct gpio_chip *chip,
70static int ssb_gpio_chipco_direction_output(struct gpio_chip *chip, 65static int ssb_gpio_chipco_direction_output(struct gpio_chip *chip,
71 unsigned gpio, int value) 66 unsigned gpio, int value)
72{ 67{
73 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 68 struct ssb_bus *bus = gpiochip_get_data(chip);
74 69
75 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 1 << gpio); 70 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 1 << gpio);
76 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0); 71 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0);
@@ -79,7 +74,7 @@ static int ssb_gpio_chipco_direction_output(struct gpio_chip *chip,
79 74
80static int ssb_gpio_chipco_request(struct gpio_chip *chip, unsigned gpio) 75static int ssb_gpio_chipco_request(struct gpio_chip *chip, unsigned gpio)
81{ 76{
82 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 77 struct ssb_bus *bus = gpiochip_get_data(chip);
83 78
84 ssb_chipco_gpio_control(&bus->chipco, 1 << gpio, 0); 79 ssb_chipco_gpio_control(&bus->chipco, 1 << gpio, 0);
85 /* clear pulldown */ 80 /* clear pulldown */
@@ -92,7 +87,7 @@ static int ssb_gpio_chipco_request(struct gpio_chip *chip, unsigned gpio)
92 87
93static void ssb_gpio_chipco_free(struct gpio_chip *chip, unsigned gpio) 88static void ssb_gpio_chipco_free(struct gpio_chip *chip, unsigned gpio)
94{ 89{
95 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 90 struct ssb_bus *bus = gpiochip_get_data(chip);
96 91
97 /* clear pullup */ 92 /* clear pullup */
98 ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); 93 ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0);
@@ -246,7 +241,7 @@ static int ssb_gpio_chipco_init(struct ssb_bus *bus)
246 if (err) 241 if (err)
247 return err; 242 return err;
248 243
249 err = gpiochip_add(chip); 244 err = gpiochip_add_data(chip, bus);
250 if (err) { 245 if (err) {
251 ssb_gpio_irq_chipco_domain_exit(bus); 246 ssb_gpio_irq_chipco_domain_exit(bus);
252 return err; 247 return err;
@@ -263,7 +258,7 @@ static int ssb_gpio_chipco_init(struct ssb_bus *bus)
263 258
264static int ssb_gpio_extif_get_value(struct gpio_chip *chip, unsigned gpio) 259static int ssb_gpio_extif_get_value(struct gpio_chip *chip, unsigned gpio)
265{ 260{
266 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 261 struct ssb_bus *bus = gpiochip_get_data(chip);
267 262
268 return !!ssb_extif_gpio_in(&bus->extif, 1 << gpio); 263 return !!ssb_extif_gpio_in(&bus->extif, 1 << gpio);
269} 264}
@@ -271,7 +266,7 @@ static int ssb_gpio_extif_get_value(struct gpio_chip *chip, unsigned gpio)
271static void ssb_gpio_extif_set_value(struct gpio_chip *chip, unsigned gpio, 266static void ssb_gpio_extif_set_value(struct gpio_chip *chip, unsigned gpio,
272 int value) 267 int value)
273{ 268{
274 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 269 struct ssb_bus *bus = gpiochip_get_data(chip);
275 270
276 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); 271 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0);
277} 272}
@@ -279,7 +274,7 @@ static void ssb_gpio_extif_set_value(struct gpio_chip *chip, unsigned gpio,
279static int ssb_gpio_extif_direction_input(struct gpio_chip *chip, 274static int ssb_gpio_extif_direction_input(struct gpio_chip *chip,
280 unsigned gpio) 275 unsigned gpio)
281{ 276{
282 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 277 struct ssb_bus *bus = gpiochip_get_data(chip);
283 278
284 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 0); 279 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 0);
285 return 0; 280 return 0;
@@ -288,7 +283,7 @@ static int ssb_gpio_extif_direction_input(struct gpio_chip *chip,
288static int ssb_gpio_extif_direction_output(struct gpio_chip *chip, 283static int ssb_gpio_extif_direction_output(struct gpio_chip *chip,
289 unsigned gpio, int value) 284 unsigned gpio, int value)
290{ 285{
291 struct ssb_bus *bus = ssb_gpio_get_bus(chip); 286 struct ssb_bus *bus = gpiochip_get_data(chip);
292 287
293 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 1 << gpio); 288 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 1 << gpio);
294 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); 289 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0);
@@ -439,7 +434,7 @@ static int ssb_gpio_extif_init(struct ssb_bus *bus)
439 if (err) 434 if (err)
440 return err; 435 return err;
441 436
442 err = gpiochip_add(chip); 437 err = gpiochip_add_data(chip, bus);
443 if (err) { 438 if (err) {
444 ssb_gpio_irq_extif_domain_exit(bus); 439 ssb_gpio_irq_extif_domain_exit(bus);
445 return err; 440 return err;