summaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-ge.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2015-12-04 08:02:58 -0500
committerLinus Walleij <linus.walleij@linaro.org>2016-01-05 05:21:00 -0500
commit0f4630f3720e7e6e921bf525c8357fea7ef3dbab (patch)
tree61c1904593d1ee424464c2d57668ba0fd2fbcbb4 /drivers/gpio/gpio-ge.c
parent3208b0f0c010b26e4d461a3bca59989d03ed9087 (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.c24
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