diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2015-12-04 08:02:58 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-01-05 05:21:00 -0500 |
commit | 0f4630f3720e7e6e921bf525c8357fea7ef3dbab (patch) | |
tree | 61c1904593d1ee424464c2d57668ba0fd2fbcbb4 /drivers/gpio/gpio-ge.c | |
parent | 3208b0f0c010b26e4d461a3bca59989d03ed9087 (diff) |
gpio: generic: factor into gpio_chip struct
The separate struct bgpio_chip has been a pain to handle, both
by being confusingly similar in name to struct gpio_chip and
for being contained inside a struct so that struct gpio_chip
is contained in a struct contained in a struct, making several
steps of dereferencing necessary.
Make things simpler: include the fields directly into
<linux/gpio/driver.h>, #ifdef:ed for CONFIG_GENERIC_GPIO, and
get rid of the <linux/basic_mmio_gpio.h> altogether. Prefix
some of the member variables with bgpio_* and add proper
kerneldoc while we're at it.
Modify all users to handle the change and use a struct
gpio_chip directly. And while we're at it: replace all
container_of() dereferencing by gpiochip_get_data() and
registering the gpio_chip with gpiochip_add_data().
Cc: arm@kernel.org
Cc: Alexander Shiyan <shc_work@mail.ru>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <kernel@pengutronix.de>
Cc: Kukjin Kim <kgene@kernel.org>
Cc: Alexandre Courbot <gnurou@gmail.com>
Cc: Brian Norris <computersforpeace@gmail.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Sudeep Holla <sudeep.holla@arm.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Nicolas Pitre <nicolas.pitre@linaro.org>
Cc: Olof Johansson <olof@lixom.net>
Cc: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Cc: Rabin Vincent <rabin@rab.in>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-omap@vger.kernel.org
Cc: linux-samsung-soc@vger.kernel.org
Cc: bcm-kernel-feedback-list@broadcom.com
Acked-by: Gregory Fong <gregory.0xf0@gmail.com>
Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Acked-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-ge.c')
-rw-r--r-- | drivers/gpio/gpio-ge.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/gpio/gpio-ge.c b/drivers/gpio/gpio-ge.c index f9ac3f351753..cbbec838a9d1 100644 --- a/drivers/gpio/gpio-ge.c +++ b/drivers/gpio/gpio-ge.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/of_gpio.h> | 24 | #include <linux/of_gpio.h> |
25 | #include <linux/of_address.h> | 25 | #include <linux/of_address.h> |
26 | #include <linux/module.h> | 26 | #include <linux/module.h> |
27 | #include <linux/basic_mmio_gpio.h> | 27 | #include <linux/gpio/driver.h> |
28 | 28 | ||
29 | #define GEF_GPIO_DIRECT 0x00 | 29 | #define GEF_GPIO_DIRECT 0x00 |
30 | #define GEF_GPIO_IN 0x04 | 30 | #define GEF_GPIO_IN 0x04 |
@@ -55,19 +55,19 @@ static int __init gef_gpio_probe(struct platform_device *pdev) | |||
55 | { | 55 | { |
56 | const struct of_device_id *of_id = | 56 | const struct of_device_id *of_id = |
57 | of_match_device(gef_gpio_ids, &pdev->dev); | 57 | of_match_device(gef_gpio_ids, &pdev->dev); |
58 | struct bgpio_chip *bgc; | 58 | struct gpio_chip *gc; |
59 | void __iomem *regs; | 59 | void __iomem *regs; |
60 | int ret; | 60 | int ret; |
61 | 61 | ||
62 | bgc = devm_kzalloc(&pdev->dev, sizeof(*bgc), GFP_KERNEL); | 62 | gc = devm_kzalloc(&pdev->dev, sizeof(*gc), GFP_KERNEL); |
63 | if (!bgc) | 63 | if (!gc) |
64 | return -ENOMEM; | 64 | return -ENOMEM; |
65 | 65 | ||
66 | regs = of_iomap(pdev->dev.of_node, 0); | 66 | regs = of_iomap(pdev->dev.of_node, 0); |
67 | if (!regs) | 67 | if (!regs) |
68 | return -ENOMEM; | 68 | return -ENOMEM; |
69 | 69 | ||
70 | ret = bgpio_init(bgc, &pdev->dev, 4, regs + GEF_GPIO_IN, | 70 | ret = bgpio_init(gc, &pdev->dev, 4, regs + GEF_GPIO_IN, |
71 | regs + GEF_GPIO_OUT, NULL, NULL, | 71 | regs + GEF_GPIO_OUT, NULL, NULL, |
72 | regs + GEF_GPIO_DIRECT, BGPIOF_BIG_ENDIAN_BYTE_ORDER); | 72 | regs + GEF_GPIO_DIRECT, BGPIOF_BIG_ENDIAN_BYTE_ORDER); |
73 | if (ret) { | 73 | if (ret) { |
@@ -76,20 +76,20 @@ static int __init gef_gpio_probe(struct platform_device *pdev) | |||
76 | } | 76 | } |
77 | 77 | ||
78 | /* Setup pointers to chip functions */ | 78 | /* Setup pointers to chip functions */ |
79 | bgc->gc.label = devm_kstrdup(&pdev->dev, pdev->dev.of_node->full_name, | 79 | gc->label = devm_kstrdup(&pdev->dev, pdev->dev.of_node->full_name, |
80 | GFP_KERNEL); | 80 | GFP_KERNEL); |
81 | if (!bgc->gc.label) { | 81 | if (!gc->label) { |
82 | ret = -ENOMEM; | 82 | ret = -ENOMEM; |
83 | goto err0; | 83 | goto err0; |
84 | } | 84 | } |
85 | 85 | ||
86 | bgc->gc.base = -1; | 86 | gc->base = -1; |
87 | bgc->gc.ngpio = (u16)(uintptr_t)of_id->data; | 87 | gc->ngpio = (u16)(uintptr_t)of_id->data; |
88 | bgc->gc.of_gpio_n_cells = 2; | 88 | gc->of_gpio_n_cells = 2; |
89 | bgc->gc.of_node = pdev->dev.of_node; | 89 | gc->of_node = pdev->dev.of_node; |
90 | 90 | ||
91 | /* This function adds a memory mapped GPIO chip */ | 91 | /* This function adds a memory mapped GPIO chip */ |
92 | ret = gpiochip_add(&bgc->gc); | 92 | ret = gpiochip_add_data(gc, NULL); |
93 | if (ret) | 93 | if (ret) |
94 | goto err0; | 94 | goto err0; |
95 | 95 | ||