gpio: generic: factor into gpio_chip struct
Subsystems (12)
PATCH 4/182 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().
---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hitting arch/arm/* and drivers/mfd/* in this so I can take it through the GPIO tree.
--- arch/arm/mach-clps711x/board-autcpu12.c | 2 +- arch/arm/mach-clps711x/board-p720t.c | 2 +- arch/arm/mach-imx/mach-mx21ads.c | 2 +- arch/arm/mach-omap1/board-ams-delta.c | 2 +- arch/arm/mach-s3c64xx/mach-crag6410.c | 2 +- drivers/gpio/gpio-74xx-mmio.c | 37 ++-- drivers/gpio/gpio-brcmstb.c | 80 ++++----- drivers/gpio/gpio-clps711x.c | 28 +-- drivers/gpio/gpio-dwapb.c | 92 +++++----- drivers/gpio/gpio-ep93xx.c | 25 +-- drivers/gpio/gpio-etraxfs.c | 49 +++--- drivers/gpio/gpio-ge.c | 24 +-- drivers/gpio/gpio-generic.c | 292 +++++++++++++++----------------- drivers/gpio/gpio-grgpio.c | 73 ++++---- drivers/gpio/gpio-moxart.c | 29 ++-- drivers/gpio/gpio-mxc.c | 27 ++- drivers/gpio/gpio-mxs.c | 33 ++-- drivers/gpio/gpio-sodaville.c | 13 +- drivers/gpio/gpio-xgene-sb.c | 40 ++--- drivers/mfd/vexpress-sysreg.c | 8 +- include/linux/basic_mmio_gpio.h | 80 --------- include/linux/gpio/driver.h | 54 ++++++ 22 files changed, 442 insertions(+), 552 deletions(-) delete mode 100644 include/linux/basic_mmio_gpio.h
arch/arm/mach-clps711x/board-autcpu12.c +1 -1
@@ -31,7 +31,7 @@#include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h> #include <linux/platform_device.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <mach/hardware.h> #include <asm/sizes.h>
arch/arm/mach-clps711x/board-p720t.c +1 -1
@@ -28,7 +28,7 @@#include <linux/leds.h> #include <linux/sizes.h> #include <linux/backlight.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/platform_device.h> #include <linux/mtd/partitions.h> #include <linux/mtd/nand-gpio.h>
arch/arm/mach-imx/mach-mx21ads.c +1 -1
@@ -17,7 +17,7 @@#include <linux/platform_device.h> #include <linux/mtd/mtd.h> #include <linux/mtd/physmap.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/gpio.h> #include <linux/regulator/fixed.h> #include <linux/regulator/machine.h>
arch/arm/mach-omap1/board-ams-delta.c +1 -1
@@ -11,7 +11,7 @@* it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/gpio.h> #include <linux/kernel.h> #include <linux/init.h>
arch/arm/mach-s3c64xx/mach-crag6410.c +1 -1
@@ -29,7 +29,7 @@#include <linux/pwm_backlight.h> #include <linux/dm9000.h> #include <linux/gpio_keys.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/spi/spi.h> #include <linux/platform_data/pca953x.h>
drivers/gpio/gpio-74xx-mmio.c +15 -22
@@ -10,10 +10,9 @@*/ #include <linux/err.h> -#include <linux/gpio.h> #include <linux/module.h> #include <linux/of_device.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/platform_device.h> #define MMIO_74XX_DIR_IN (0 << 8)
@@ -21,7 +20,7 @@#define MMIO_74XX_BIT_CNT (x) ((x) & 0xff)struct mmio_74xx_gpio_priv { -struct bgpio_chip bgc; +struct gpio_chip gc;unsigned flags; };
@@ -78,30 +77,23 @@ static const struct of_device_id mmio_74xx_gpio_ids[] = { };MODULE_DEVICE_TABLE (of, mmio_74xx_gpio_ids); -static inline struct mmio_74xx_gpio_priv *to_74xx_gpio (struct gpio_chip *gc) -{ -struct bgpio_chip *bgc =to_bgpio_chip (gc); - - return container_of(bgc, struct mmio_74xx_gpio_priv, bgc); -} -static int mmio_74xx_get_direction (struct gpio_chip *gc,unsigned offset) { -struct mmio_74xx_gpio_priv *priv =to_74xx_gpio (gc); +struct mmio_74xx_gpio_priv *priv =gpiochip_get_data (gc); -return (priv->flags &MMIO_74XX_DIR_OUT ) ?GPIOF_DIR_OUT :GPIOF_DIR_IN ; +return !(priv->flags &MMIO_74XX_DIR_OUT ); }static int mmio_74xx_dir_in (struct gpio_chip *gc,unsigned int gpio) { -struct mmio_74xx_gpio_priv *priv =to_74xx_gpio (gc); +struct mmio_74xx_gpio_priv *priv =gpiochip_get_data (gc);return (priv->flags &MMIO_74XX_DIR_OUT ) ? -ENOTSUPP :0 ; }static int mmio_74xx_dir_out (struct gpio_chip *gc,unsigned int gpio,int val) { -struct mmio_74xx_gpio_priv *priv =to_74xx_gpio (gc); +struct mmio_74xx_gpio_priv *priv =gpiochip_get_data (gc);if (priv->flags &MMIO_74XX_DIR_OUT ) { gc->set (gc, gpio, val);
@@ -131,28 +123,29 @@ static int mmio_74xx_gpio_probe(struct platform_device *pdev) priv->flags = (uintptr_t ) of_id->data; - err =bgpio_init (&priv->bgc, &pdev->dev, + err =bgpio_init (&priv->gc, &pdev->dev,DIV_ROUND_UP (MMIO_74XX_BIT_CNT (priv->flags),8 ), dat,NULL ,NULL ,NULL ,NULL ,0 );if (err)return err; - priv->bgc.gc.direction_input = mmio_74xx_dir_in; - priv->bgc.gc.direction_output = mmio_74xx_dir_out; - priv->bgc.gc.get_direction = mmio_74xx_get_direction; - priv->bgc.gc.ngpio =MMIO_74XX_BIT_CNT (priv->flags); - priv->bgc.gc.owner =THIS_MODULE ; + priv->gc.direction_input = mmio_74xx_dir_in; + priv->gc.direction_output = mmio_74xx_dir_out; + priv->gc.get_direction = mmio_74xx_get_direction; + priv->gc.ngpio =MMIO_74XX_BIT_CNT (priv->flags); + priv->gc.owner =THIS_MODULE ;platform_set_drvdata (pdev, priv); -return gpiochip_add (&priv->bgc.gc); +return gpiochip_add_data (&priv->gc, priv); }static int mmio_74xx_gpio_remove (struct platform_device *pdev) {struct mmio_74xx_gpio_priv *priv =platform_get_drvdata (pdev); -return bgpio_remove (&priv->bgc); +gpiochip_remove (&priv->gc); +return 0 ; }static struct platform_driver mmio_74xx_gpio_driver = {
drivers/gpio/gpio-brcmstb.c +34 -46
214 lines not on this page · raw message
drivers/gpio/gpio-clps711x.c +14 -14
@@ -10,24 +10,23 @@*/ #include <linux/err.h> -#include <linux/gpio.h> #include <linux/module.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/platform_device.h> static int clps711x_gpio_probe (struct platform_device *pdev) {struct device_node *np = pdev->dev.of_node;void __iomem *dat, *dir; -struct bgpio_chip *bgc; +struct gpio_chip *gc;struct resource *res;int err, id = np ?of_alias_get_id (np,"gpio" ) : pdev->id;if ((id <0 ) || (id >4 ))return -ENODEV ; - bgc =devm_kzalloc (&pdev->dev,sizeof (*bgc),GFP_KERNEL ); -if (!bgc) + gc =devm_kzalloc (&pdev->dev,sizeof (*gc),GFP_KERNEL ); +if (!gc)return -ENOMEM ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -43,11 +42,11 @@ static int clps711x_gpio_probe(struct platform_device *pdev)switch (id) {case 3 :/* PORTD is inverted logic for direction register */ - err =bgpio_init (bgc, &pdev->dev,1 , dat,NULL ,NULL , + err =bgpio_init (gc, &pdev->dev,1 , dat,NULL ,NULL ,NULL , dir,0 );break ;default : - err =bgpio_init (bgc, &pdev->dev,1 , dat,NULL ,NULL , + err =bgpio_init (gc, &pdev->dev,1 , dat,NULL ,NULL , dir,NULL ,0 );break ; }
@@ -58,24 +57,25 @@ static int clps711x_gpio_probe(struct platform_device *pdev)switch (id) {case 4 :/* PORTE is 3 lines only */ - bgc->gc.ngpio =3 ; + gc->ngpio =3 ;break ;default :break ; } - bgc->gc.base = id *8 ; - bgc->gc.owner =THIS_MODULE ; -platform_set_drvdata (pdev, bgc); + gc->base = id *8 ; + gc->owner =THIS_MODULE ; +platform_set_drvdata (pdev, gc); -return gpiochip_add (&bgc->gc); +return gpiochip_add_data (gc,NULL ); }static int clps711x_gpio_remove (struct platform_device *pdev) { -struct bgpio_chip *bgc =platform_get_drvdata (pdev); +struct gpio_chip *gc =platform_get_drvdata (pdev); -return bgpio_remove (bgc); +gpiochip_remove (gc); +return 0 ; }static const struct of_device_id __maybe_unused clps711x_gpio_ids[] = {
drivers/gpio/gpio-dwapb.c +43 -49
275 lines not on this page · raw message
drivers/gpio/gpio-ep93xx.c +13 -12
@@ -16,10 +16,11 @@#include <linux/module.h> #include <linux/platform_device.h> #include <linux/io.h> -#include <linux/gpio.h> #include <linux/irq.h> #include <linux/slab.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> +/* FIXME: this is here for gpio_to_irq() - get rid of this! */ +#include <linux/gpio.h> #include <mach/hardware.h> #include <mach/gpio-ep93xx.h>
@@ -28,7 +29,7 @@struct ep93xx_gpio {void __iomem *mmio_base; -struct bgpio_chip bgc[8 ]; +struct gpio_chip gc[8 ]; };/*************************************************************************
@@ -319,26 +320,26 @@ static int ep93xx_gpio_to_irq(struct gpio_chip *chip, unsigned offset)return 64 + gpio; } -static int ep93xx_gpio_add_bank (struct bgpio_chip *bgc,struct device *dev, +static int ep93xx_gpio_add_bank (struct gpio_chip *gc,struct device *dev,void __iomem *mmio_base,struct ep93xx_gpio_bank *bank) {void __iomem *data = mmio_base + bank->data;void __iomem *dir = mmio_base + bank->dir;int err; - err =bgpio_init (bgc, dev,1 , data,NULL ,NULL , dir,NULL ,0 ); + err =bgpio_init (gc, dev,1 , data,NULL ,NULL , dir,NULL ,0 );if (err)return err; - bgc->gc.label = bank->label; - bgc->gc.base = bank->base; + gc->label = bank->label; + gc->base = bank->base;if (bank->has_debounce) { - bgc->gc.set_debounce = ep93xx_gpio_set_debounce; - bgc->gc.to_irq = ep93xx_gpio_to_irq; + gc->set_debounce = ep93xx_gpio_set_debounce; + gc->to_irq = ep93xx_gpio_to_irq; } -return gpiochip_add (&bgc->gc); +return gpiochip_add_data (gc,NULL ); }static int ep93xx_gpio_probe (struct platform_device *pdev)
@@ -358,10 +359,10 @@ static int ep93xx_gpio_probe(struct platform_device *pdev)return PTR_ERR (ep93xx_gpio->mmio_base);for (i =0 ; i <ARRAY_SIZE (ep93xx_gpio_banks); i++) { -struct bgpio_chip *bgc = &ep93xx_gpio->bgc[i]; +struct gpio_chip *gc = &ep93xx_gpio->gc[i];struct ep93xx_gpio_bank *bank = &ep93xx_gpio_banks[i]; -if (ep93xx_gpio_add_bank (bgc, &pdev->dev, +if (ep93xx_gpio_add_bank (gc, &pdev->dev, ep93xx_gpio->mmio_base, bank))dev_warn (&pdev->dev,"Unable to add gpio bank %s\n" , bank->label);
drivers/gpio/gpio-etraxfs.c +21 -28
154 lines not on this page · raw message
drivers/gpio/gpio-ge.c +12 -12
@@ -24,7 +24,7 @@#include <linux/of_gpio.h> #include <linux/of_address.h> #include <linux/module.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #define GEF_GPIO_DIRECT 0x00#define GEF_GPIO_IN 0x04
@@ -55,19 +55,19 @@ static int __init gef_gpio_probe(struct platform_device *pdev) {const struct of_device_id *of_id =of_match_device (gef_gpio_ids, &pdev->dev); -struct bgpio_chip *bgc; +struct gpio_chip *gc;void __iomem *regs;int ret; - bgc =devm_kzalloc (&pdev->dev,sizeof (*bgc),GFP_KERNEL ); -if (!bgc) + gc =devm_kzalloc (&pdev->dev,sizeof (*gc),GFP_KERNEL ); +if (!gc)return -ENOMEM ; regs =of_iomap (pdev->dev.of_node,0 );if (!regs)return -ENOMEM ; - ret =bgpio_init (bgc, &pdev->dev,4 , regs +GEF_GPIO_IN , + ret =bgpio_init (gc, &pdev->dev,4 , regs +GEF_GPIO_IN , regs +GEF_GPIO_OUT ,NULL ,NULL , regs +GEF_GPIO_DIRECT ,BGPIOF_BIG_ENDIAN_BYTE_ORDER );if (ret) {
@@ -76,20 +76,20 @@ static int __init gef_gpio_probe(struct platform_device *pdev) }/* Setup pointers to chip functions */ - bgc->gc.label =devm_kstrdup (&pdev->dev, pdev->dev.of_node->full_name, + gc->label =devm_kstrdup (&pdev->dev, pdev->dev.of_node->full_name,GFP_KERNEL ); -if (!bgc->gc.label) { +if (!gc->label) { ret = -ENOMEM ; goto err0; } - bgc->gc.base =-1 ; - bgc->gc.ngpio = (u16 )(uintptr_t )of_id->data; - bgc->gc.of_gpio_n_cells =2 ; - bgc->gc.of_node = pdev->dev.of_node; + gc->base =-1 ; + gc->ngpio = (u16 )(uintptr_t )of_id->data; + gc->of_gpio_n_cells =2 ; + gc->of_node = pdev->dev.of_node;/* This function adds a memory mapped GPIO chip */ - ret =gpiochip_add (&bgc->gc); + ret =gpiochip_add_data (gc,NULL );if (ret) goto err0;
drivers/gpio/gpio-generic.c +133 -159
578 lines not on this page · raw message
drivers/gpio/gpio-grgpio.c +32 -41
224 lines not on this page · raw message
drivers/gpio/gpio-moxart.c +14 -15
@@ -14,7 +14,6 @@#include <linux/init.h> #include <linux/irq.h> #include <linux/io.h> -#include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/module.h> #include <linux/of_address.h>
@@ -23,7 +22,7 @@#include <linux/delay.h> #include <linux/timer.h> #include <linux/bitops.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #define GPIO_DATA_OUT 0x00#define GPIO_DATA_IN 0x04
@@ -33,12 +32,12 @@ static int moxart_gpio_probe(struct platform_device *pdev) {struct device *dev = &pdev->dev;struct resource *res; -struct bgpio_chip *bgc; +struct gpio_chip *gc;void __iomem *base;int ret; - bgc =devm_kzalloc (dev,sizeof (*bgc),GFP_KERNEL ); -if (!bgc) + gc =devm_kzalloc (dev,sizeof (*gc),GFP_KERNEL ); +if (!gc)return -ENOMEM ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -46,7 +45,7 @@ static int moxart_gpio_probe(struct platform_device *pdev)if (IS_ERR (base))return PTR_ERR (base); - ret =bgpio_init (bgc, dev,4 , base +GPIO_DATA_IN , + ret =bgpio_init (gc, dev,4 , base +GPIO_DATA_IN , base +GPIO_DATA_OUT ,NULL , base +GPIO_PIN_DIRECTION ,NULL ,BGPIOF_READ_OUTPUT_REG_SET );
@@ -55,16 +54,16 @@ static int moxart_gpio_probe(struct platform_device *pdev)return ret; } - bgc->gc.label ="moxart-gpio" ; - bgc->gc.request = gpiochip_generic_request; - bgc->gc.free = gpiochip_generic_free; - bgc->data = bgc->read_reg (bgc->reg_set); - bgc->gc.base =0 ; - bgc->gc.ngpio =32 ; - bgc->gc.parent = dev; - bgc->gc.owner =THIS_MODULE ; + gc->label ="moxart-gpio" ; + gc->request = gpiochip_generic_request; + gc->free = gpiochip_generic_free; + gc->bgpio_data = bgc->read_reg (bgc->reg_set); + gc->base =0 ; + gc->ngpio =32 ; + gc->parent = dev; + gc->owner =THIS_MODULE ; - ret =gpiochip_add (&bgc->gc); + ret =gpiochip_add_data (gc,NULL );if (ret) {dev_err (dev,"%s: gpiochip_add failed\n" , dev->of_node->full_name);
drivers/gpio/gpio-mxc.c +12 -15
@@ -26,10 +26,11 @@#include <linux/irq.h> #include <linux/irqdomain.h> #include <linux/irqchip/chained_irq.h> -#include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/slab.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> +/* FIXME: for gpio_get_value() replace this with direct register read */ +#include <linux/gpio.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/module.h>
@@ -64,7 +65,7 @@ struct mxc_gpio_port {int irq;int irq_high;struct irq_domain *domain; -struct bgpio_chip bgc; +struct gpio_chip gc;u32 both_edges; };
@@ -172,7 +173,7 @@ static int gpio_set_irq_type(struct irq_data *d, u32 type)struct mxc_gpio_port *port = gc->private;u32 bit, val;u32 gpio_idx = d->hwirq; -u32 gpio = port->bgc.gc.base + gpio_idx; +u32 gpio = port->gc.base + gpio_idx;int edge;void __iomem *reg = port->base;
@@ -398,9 +399,7 @@ static void mxc_gpio_get_hw(struct platform_device *pdev)static int mxc_gpio_to_irq (struct gpio_chip *gc,unsigned offset) { -struct bgpio_chip *bgc =to_bgpio_chip (gc); -struct mxc_gpio_port *port = - container_of(bgc, struct mxc_gpio_port, bgc); +struct mxc_gpio_port *port =gpiochip_get_data (gc);return irq_find_mapping (port->domain, offset); }
@@ -451,7 +450,7 @@ static int mxc_gpio_probe(struct platform_device *pdev) port); } - err = bgpio_init(&port->bgc, &pdev->dev, 4, + err = bgpio_init(&port->gc, &pdev->dev, 4, port->base + GPIO_PSR, port->base + GPIO_DR, NULL, port->base + GPIO_GDIR, NULL,
@@ -459,13 +458,13 @@ static int mxc_gpio_probe(struct platform_device *pdev)if (err) goto out_bgio; - port->bgc.gc.to_irq = mxc_gpio_to_irq; - port->bgc.gc.base = (pdev->id <0 ) ?of_alias_get_id (np,"gpio" ) *32 : + port->gc.to_irq = mxc_gpio_to_irq; + port->gc.base = (pdev->id <0 ) ?of_alias_get_id (np,"gpio" ) *32 : pdev->id *32 ; - err =gpiochip_add (&port->bgc.gc); + err =gpiochip_add_data (&port->gc, port);if (err) - goto out_bgpio_remove; + goto out_bgio; irq_base =irq_alloc_descs (-1 ,0 ,32 ,numa_node_id ());if (irq_base <0 ) {
@@ -494,9 +493,7 @@ out_irqdomain_remove: out_irqdesc_free:irq_free_descs (irq_base,32 ); out_gpiochip_remove: -gpiochip_remove (&port->bgc.gc); -out_bgpio_remove: -bgpio_remove (&port->bgc); +gpiochip_remove (&port->gc); out_bgio:dev_info (&pdev->dev,"%s failed with errno %d\n" , __func__, err);return err;
drivers/gpio/gpio-mxs.c +14 -19
@@ -26,13 +26,14 @@#include <linux/io.h> #include <linux/irq.h> #include <linux/irqdomain.h> -#include <linux/gpio.h> #include <linux/of.h> #include <linux/of_address.h> #include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/slab.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> +/* FIXME: for gpio_get_value(), replace this by direct register read */ +#include <linux/gpio.h> #include <linux/module.h> #define MXS_SET 0x4
@@ -64,7 +65,7 @@ struct mxs_gpio_port {int id;int irq;struct irq_domain *domain; -struct bgpio_chip bgc; +struct gpio_chip gc;enum mxs_gpio_id devid;u32 both_edges; };
@@ -93,7 +94,7 @@ static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type) port->both_edges &= ~pin_mask;switch (type) {case IRQ_TYPE_EDGE_BOTH : - val =gpio_get_value (port->bgc.gc.base + d->hwirq); + val =gpio_get_value (port->gc.base + d->hwirq);if (val) edge =GPIO_INT_FALL_EDGE ;else
@@ -225,18 +226,14 @@ static int __init mxs_gpio_init_gc(struct mxs_gpio_port *port, int irq_base)static int mxs_gpio_to_irq (struct gpio_chip *gc,unsigned offset) { -struct bgpio_chip *bgc =to_bgpio_chip (gc); -struct mxs_gpio_port *port = - container_of(bgc, struct mxs_gpio_port, bgc); +struct mxs_gpio_port *port =gpiochip_get_data (gc);return irq_find_mapping (port->domain, offset); }static int mxs_gpio_get_direction (struct gpio_chip *gc,unsigned offset) { -struct bgpio_chip *bgc =to_bgpio_chip (gc); -struct mxs_gpio_port *port = - container_of(bgc, struct mxs_gpio_port, bgc); +struct mxs_gpio_port *port =gpiochip_get_data (gc);u32 mask =1 << offset;u32 dir;
@@ -330,26 +327,24 @@ static int mxs_gpio_probe(struct platform_device *pdev)irq_set_chained_handler_and_data (port->irq, mxs_gpio_irq_handler, port); - err =bgpio_init (&port->bgc, &pdev->dev,4 , + err =bgpio_init (&port->gc, &pdev->dev,4 , port->base +PINCTRL_DIN (port), port->base +PINCTRL_DOUT (port) +MXS_SET , port->base +PINCTRL_DOUT (port) +MXS_CLR , port->base +PINCTRL_DOE (port),NULL ,0 );if (err) - goto out_irqdesc_free; + goto out_irqdomain_remove; - port->bgc.gc.to_irq = mxs_gpio_to_irq; - port->bgc.gc.get_direction = mxs_gpio_get_direction; - port->bgc.gc.base = port->id *32 ; + port->gc.to_irq = mxs_gpio_to_irq; + port->gc.get_direction = mxs_gpio_get_direction; + port->gc.base = port->id *32 ; - err =gpiochip_add (&port->bgc.gc); + err =gpiochip_add_data (&port->gc, port);if (err) - goto out_bgpio_remove; + goto out_irqdomain_remove;return 0 ; -out_bgpio_remove: -bgpio_remove (&port->bgc); out_irqdomain_remove:irq_domain_remove (port->domain); out_irqdesc_free:
drivers/gpio/gpio-sodaville.c +6 -7
@@ -10,7 +10,6 @@*/ #include <linux/errno.h> -#include <linux/gpio.h> #include <linux/init.h> #include <linux/io.h> #include <linux/irq.h>
@@ -20,7 +19,7 @@#include <linux/pci.h> #include <linux/platform_device.h> #include <linux/of_irq.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #define DRV_NAME "sdv_gpio"#define SDV_NUM_PUB_GPIOS 12
@@ -43,7 +42,7 @@ struct sdv_gpio_chip_data {void __iomem *gpio_pub_base;struct irq_domain *id;struct irq_chip_generic *gc; -struct bgpio_chip bgpio; +struct gpio_chip chip; };static int sdv_gpio_pub_set_type (struct irq_data *d,unsigned int type)
@@ -226,14 +225,14 @@ static int sdv_gpio_probe(struct pci_dev *pdev,writel (mux_val, sd->gpio_pub_base +GPMUXCTL ); } - ret =bgpio_init (&sd->bgpio, &pdev->dev,4 , + ret =bgpio_init (&sd->chip, &pdev->dev,4 , sd->gpio_pub_base +GPINR , sd->gpio_pub_base +GPOUTR ,NULL , sd->gpio_pub_base +GPOER ,NULL ,0 );if (ret) goto unmap; - sd->bgpio.gc.ngpio =SDV_NUM_PUB_GPIOS ; + sd->chip.ngpio =SDV_NUM_PUB_GPIOS ; - ret =gpiochip_add (&sd->bgpio.gc); + ret =gpiochip_add_data (&sd->chip, sd);if (ret <0 ) {dev_err (&pdev->dev,"gpiochip_add() failed.\n" ); goto unmap;
@@ -265,7 +264,7 @@ static void sdv_gpio_remove(struct pci_dev *pdev)free_irq (pdev->irq, sd);irq_free_descs (sd->irq_base,SDV_NUM_PUB_GPIOS ); -gpiochip_remove (&sd->bgpio.gc); +gpiochip_remove (&sd->chip);pci_release_region (pdev,GPIO_BAR );iounmap (sd->gpio_pub_base);pci_disable_device (pdev);
drivers/gpio/gpio-xgene-sb.c +16 -24
@@ -23,10 +23,8 @@#include <linux/io.h> #include <linux/platform_device.h> #include <linux/of_gpio.h> -#include <linux/gpio.h> #include <linux/gpio/driver.h> #include <linux/acpi.h> -#include <linux/basic_mmio_gpio.h> #include "gpiolib.h"
@@ -43,38 +41,31 @@/** * struct xgene_gpio_sb - GPIO-Standby private data structure. -* @bgc: memory-mapped GPIO controllers. +* @gc: memory-mapped GPIO controllers. * @irq: Mapping GPIO pins and interrupt number * nirq: Number of GPIO pins that supports interrupt */ struct xgene_gpio_sb { -struct bgpio_chip bgc; +struct gpio_chip gc;u32 *irq;u32 nirq; }; -static inline struct xgene_gpio_sb *to_xgene_gpio_sb (struct gpio_chip *gc) -{ -struct bgpio_chip *bgc =to_bgpio_chip (gc); - - return container_of(bgc, struct xgene_gpio_sb, bgc); -} - -static void xgene_gpio_set_bit (struct bgpio_chip *bgc,void __iomem *reg,u32 gpio,int val) +static void xgene_gpio_set_bit (struct gpio_chip *gc,void __iomem *reg,u32 gpio,int val) {u32 data; - data = bgc->read_reg (reg); + data = gc->read_reg (reg);if (val) data |=GPIO_MASK (gpio);else data &= ~GPIO_MASK (gpio); - bgc->write_reg (reg, data); + gc->write_reg (reg, data); }static int apm_gpio_sb_to_irq (struct gpio_chip *gc,u32 gpio) { -struct xgene_gpio_sb *priv =to_xgene_gpio_sb (gc); +struct xgene_gpio_sb *priv =gpiochip_get_data (gc);if (priv->irq[gpio])return priv->irq[gpio];
@@ -99,15 +90,15 @@ static int xgene_gpio_sb_probe(struct platform_device *pdev)if (IS_ERR (regs))return PTR_ERR (regs); - ret =bgpio_init (&priv->bgc, &pdev->dev,4 , + ret =bgpio_init (&priv->gc, &pdev->dev,4 , regs +MPA_GPIO_IN_ADDR , regs +MPA_GPIO_OUT_ADDR ,NULL , regs +MPA_GPIO_OE_ADDR ,NULL ,0 );if (ret)return ret; - priv->bgc.gc.to_irq = apm_gpio_sb_to_irq; - priv->bgc.gc.ngpio =XGENE_MAX_GPIO_DS ; + priv->gc.to_irq = apm_gpio_sb_to_irq; + priv->gc.ngpio =XGENE_MAX_GPIO_DS ; priv->nirq =XGENE_MAX_GPIO_DS_IRQ ;
@@ -118,14 +109,14 @@ static int xgene_gpio_sb_probe(struct platform_device *pdev)for (i =0 ; i < priv->nirq; i++) { priv->irq[default_lines[i]] =platform_get_irq (pdev, i); -xgene_gpio_set_bit (&priv->bgc, regs +MPA_GPIO_SEL_LO , +xgene_gpio_set_bit (&priv->gc, regs +MPA_GPIO_SEL_LO , default_lines[i] *2 ,1 ); -xgene_gpio_set_bit (&priv->bgc, regs +MPA_GPIO_INT_LVL , i,1 ); +xgene_gpio_set_bit (&priv->gc, regs +MPA_GPIO_INT_LVL , i,1 ); }platform_set_drvdata (pdev, priv); - ret =gpiochip_add (&priv->bgc.gc); + ret =gpiochip_add_data (&priv->gc, priv);if (ret)dev_err (&pdev->dev,"failed to register X-Gene GPIO Standby driver\n" );else
@@ -133,7 +124,7 @@ static int xgene_gpio_sb_probe(struct platform_device *pdev)if (priv->nirq >0 ) {/* Register interrupt handlers for gpio signaled acpi events */ -acpi_gpiochip_request_interrupts (&priv->bgc.gc); +acpi_gpiochip_request_interrupts (&priv->gc); }return ret;
@@ -144,10 +135,11 @@ static int xgene_gpio_sb_remove(struct platform_device *pdev)struct xgene_gpio_sb *priv =platform_get_drvdata (pdev);if (priv->nirq >0 ) { -acpi_gpiochip_free_interrupts (&priv->bgc.gc); +acpi_gpiochip_free_interrupts (&priv->gc); } -return bgpio_remove (&priv->bgc); +gpiochip_remove (&priv->gc); +return 0 ; }static const struct of_device_id xgene_gpio_sb_of_match[] = {
drivers/mfd/vexpress-sysreg.c +4 -4
@@ -11,7 +11,7 @@* Copyright (C) 2012 ARM Limited */ -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/err.h> #include <linux/io.h> #include <linux/mfd/core.h>
@@ -164,7 +164,7 @@ static int vexpress_sysreg_probe(struct platform_device *pdev) {struct resource *mem;void __iomem *base; -struct bgpio_chip *mmc_gpio_chip; +struct gpio_chip *mmc_gpio_chip;int master;u32 dt_hbi;
@@ -201,8 +201,8 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)return -ENOMEM ;bgpio_init (mmc_gpio_chip, &pdev->dev,0x4 , base +SYS_MCI ,NULL ,NULL ,NULL ,NULL ,0 ); - mmc_gpio_chip->gc.ngpio =2 ; -gpiochip_add (&mmc_gpio_chip->gc); + mmc_gpio_chip->ngpio =2 ; +gpiochip_add (mmc_gpio_chip); return mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO, vexpress_sysreg_cells,
include/linux/basic_mmio_gpio.h deleted +0 -80
80 lines not on this page · raw message
include/linux/gpio/driver.h +54 -0
78 lines not on this page · raw message
Signature · 1 line
2.4.3
Liviu Dudau
maintainerPATCH 4/182 gpio: generic: factor into gpio_chip struct
Quoted 46 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().Cc arm at kernel.orgCc Lee Jones <[email protected]>Cc Alexander Shiyan <[email protected]>Cc Shawn Guo <[email protected]>Cc Sascha Hauer <[email protected]>Cc Tony Lindgren <[email protected]>Cc Kukjin Kim <[email protected]>Cc Krzysztof Kozlowski <[email protected]>Cc Alexandre Courbot <[email protected]>Cc Gregory Fong <[email protected]>Cc Brian Norris <[email protected]>Cc Florian Fainelli <[email protected]>Cc Liviu Dudau <[email protected]>Cc Sudeep Holla <[email protected]>Cc Lorenzo Pieralisi <[email protected]>Cc Nicolas Pitre <[email protected]>Cc Olof Johansson <[email protected]>Cc Vladimir Zapolskiy <[email protected]>Cc Rabin Vincent <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-omap at vger.kernel.orgCc linux-samsung-soc at vger.kernel.orgCc bcm-kernel-feedback-list at broadcom.comSigned-off-by Linus Walleij <[email protected]>---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.
---
[....]
Quoted 1 line
drivers/mfd/vexpress-sysreg.c | 8 +-
[....]
Quoted 33 lines
drivers/mfd/vexpress-sysreg.c +4
-4@@ -11,7 +11,7 @@* Copyright (C) 2012 ARM Limited */ -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> #include <linux/err.h> #include <linux/io.h> #include <linux/mfd/core.h> @@ -164,7 +164,7 @@ static int vexpress_sysreg_probe(struct platform_device *pdev) {struct resource *mem;void __iomem *base; -struct bgpio_chip *mmc_gpio_chip; +struct gpio_chip *mmc_gpio_chip;int master;u32 dt_hbi;@@ -201,8 +201,8 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)return -ENOMEM ;bgpio_init (mmc_gpio_chip, &pdev->dev,0x4 , base +SYS_MCI ,NULL ,NULL ,NULL ,NULL ,0 ); - mmc_gpio_chip->gc.ngpio =2 ; -gpiochip_add (&mmc_gpio_chip->gc); + mmc_gpio_chip->ngpio =2 ; +gpiochip_add (mmc_gpio_chip); return mfd_add_devices(&pdev->dev, PLATFORM_DEVID_AUTO, vexpress_sysreg_cells,
[....]
Quoted 3 lines
Signature · 1 line
2.4.3
For the drivers/mfd/vexpress-sysreg.c part:
Signature · 8 lines
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
?\_(?)_/?PATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijQuoted 46 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().Cc arm at kernel.orgCc Lee Jones <[email protected]>Cc Alexander Shiyan <[email protected]>Cc Shawn Guo <[email protected]>Cc Sascha Hauer <[email protected]>Cc Tony Lindgren <[email protected]>Cc Kukjin Kim <[email protected]>Cc Krzysztof Kozlowski <[email protected]>Cc Alexandre Courbot <[email protected]>Cc Gregory Fong <[email protected]>Cc Brian Norris <[email protected]>Cc Florian Fainelli <[email protected]>Cc Liviu Dudau <[email protected]>Cc Sudeep Holla <[email protected]>Cc Lorenzo Pieralisi <[email protected]>Cc Nicolas Pitre <[email protected]>Cc Olof Johansson <[email protected]>Cc Vladimir Zapolskiy <[email protected]>Cc Rabin Vincent <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-omap at vger.kernel.orgCc linux-samsung-soc at vger.kernel.orgCc bcm-kernel-feedback-list at broadcom.comSigned-off-by Linus Walleij <[email protected]>---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.
---
<snip>
Quoted 1 line
drivers/gpio/gpio-ep93xx.c| 25 +--
<snip>
Quoted 64 lines
drivers/gpio/gpio-ep93xx.c +11
-10@@ -16,10 +16,11 @@#include <linux/module.h> #include <linux/platform_device.h> #include <linux/io.h> -#include <linux/gpio.h> #include <linux/irq.h> #include <linux/slab.h> -#include <linux/basic_mmio_gpio.h> +#include <linux/gpio/driver.h> +/* FIXME: this is here for gpio_to_irq() - get rid of this! */ +#include <linux/gpio.h> #include <mach/hardware.h> #include <mach/gpio-ep93xx.h> @@ -28,7 +29,7 @@struct ep93xx_gpio {void __iomem *mmio_base; -struct bgpio_chip bgc[8 ]; +struct gpio_chip gc[8 ]; };/************************************************************************* @@ -319,26 +320,26 @@ static int ep93xx_gpio_to_irq(struct gpio_chip *chip, unsigned offset)return 64 + gpio; } -static int ep93xx_gpio_add_bank (struct bgpio_chip *bgc,struct device *dev, +static int ep93xx_gpio_add_bank (struct gpio_chip *gc,struct device *dev,void __iomem *mmio_base,struct ep93xx_gpio_bank *bank) {void __iomem *data = mmio_base + bank->data;void __iomem *dir = mmio_base + bank->dir;int err; - err =bgpio_init (bgc, dev,1 , data,NULL ,NULL , dir,NULL ,0 ); + err =bgpio_init (gc, dev,1 , data,NULL ,NULL , dir,NULL ,0 );if (err)return err; - bgc->gc.label = bank->label; - bgc->gc.base = bank->base; + gc->label = bank->label; + gc->base = bank->base;if (bank->has_debounce) { - bgc->gc.set_debounce = ep93xx_gpio_set_debounce; - bgc->gc.to_irq = ep93xx_gpio_to_irq; + gc->set_debounce = ep93xx_gpio_set_debounce; + gc->to_irq = ep93xx_gpio_to_irq; } -return gpiochip_add (&bgc->gc); +return gpiochip_add_data (gc,NULL ); }static int ep93xx_gpio_probe (struct platform_device *pdev)@@ -358,10 +359,10 @@ static int ep93xx_gpio_probe(struct platform_device *pdev)return PTR_ERR (ep93xx_gpio->mmio_base);
drivers/gpio/gpio-ep93xx.c static int ep93xx_gpio_probe(struct platform_device *pdev) · line 368
Quoted 10 lines
drivers/gpio/gpio-ep93xx.c +2
-2for (i =0 ; i <ARRAY_SIZE (ep93xx_gpio_banks); i++) { -struct bgpio_chip *bgc = &ep93xx_gpio->bgc[i]; +struct gpio_chip *gc = &ep93xx_gpio->gc[i];struct ep93xx_gpio_bank *bank = &ep93xx_gpio_banks[i]; -if (ep93xx_gpio_add_bank (bgc, &pdev->dev, +if (ep93xx_gpio_add_bank (gc, &pdev->dev, ep93xx_gpio->mmio_base, bank))dev_warn (&pdev->dev,"Unable to add gpio bank %s\n" , bank->label);
For the drivers/gpio/gpio-ep93xx.c part:
Tony Lindgren
reviewerPATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijQuoted 16 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().
...
Quoted 4 lines
---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.
For omap:
PATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijOn Wed, Dec 09, 2015 at 02:12:40PM +0100, Linus Walleij wrote:
...
Quoted 14 lines
drivers/gpio/gpio-moxart.c +2
-8@@ -55,16 +54,16 @@ static int moxart_gpio_probe(struct platform_device *pdev)return ret; } - bgc->gc.label ="moxart-gpio" ; - bgc->gc.request = gpiochip_generic_request; - bgc->gc.free = gpiochip_generic_free; - bgc->data = bgc->read_reg (bgc->reg_set); - bgc->gc.base =0 ; - bgc->gc.ngpio =32 ; - bgc->gc.parent = dev; - bgc->gc.owner =THIS_MODULE ; + gc->label ="moxart-gpio" ; + gc->request = gpiochip_generic_request;
drivers/gpio/gpio-moxart.c static int moxart_gpio_probe(struct platform_device *pdev) · line 67
Quoted 10 lines
drivers/gpio/gpio-moxart.c +7
-1+ gc->free = gpiochip_generic_free; + gc->bgpio_data = bgc->read_reg (bgc->reg_set); + gc->base =0 ; + gc->ngpio =32 ; + gc->parent = dev; + gc->owner =THIS_MODULE ; - ret =gpiochip_add (&bgc->gc); + ret =gpiochip_add_data (gc,NULL );if (ret) {
gpiochip_add is still mentioned in the dev_err below.
Quoted 2 lines
drivers/gpio/gpio-moxart.c +0
-0dev_err (dev,"%s: gpiochip_add failed\n" , dev->of_node->full_name);
...
Quoted 6 lines
drivers/gpio/gpio-sodaville.c +1
-1@@ -226,14 +225,14 @@ static int sdv_gpio_probe(struct pci_dev *pdev,writel (mux_val, sd->gpio_pub_base +GPMUXCTL ); } - ret = bgpio_init(&sd->bgpio, &pdev->dev, 4, + ret = bgpio_init(&sd->chip, &pdev->dev, 4,
drivers/gpio/gpio-sodaville.c static int sdv_gpio_probe(struct pci_dev *pdev, · line 236
Quoted 10 lines
drivers/gpio/gpio-sodaville.c +2
-2sd->gpio_pub_base +GPINR , sd->gpio_pub_base +GPOUTR , NULL, sd->gpio_pub_base + GPOER, NULL, 0);if (ret) goto unmap; - sd->bgpio.gc.ngpio =SDV_NUM_PUB_GPIOS ; + sd->chip.ngpio =SDV_NUM_PUB_GPIOS ; - ret =gpiochip_add (&sd->bgpio.gc); + ret =gpiochip_add_data (&sd->chip, sd);if (ret <0 ) {
Also still mentioned here in the dev_err.
Quoted 2 lines
drivers/gpio/gpio-sodaville.c +0
-0dev_err (&pdev->dev,"gpiochip_add() failed.\n" ); goto unmap;
...
drivers/mfd/vexpress-sysreg.c static int vexpress_sysreg_probe(struct platform_device *pdev) · line 203
Quoted 4 lines
drivers/mfd/vexpress-sysreg.c +0
-0@@ -201,8 +201,8 @@ static int vexpress_sysreg_probe(struct platform_device *pdev)return -ENOMEM ;bgpio_init (mmc_gpio_chip, &pdev->dev,0x4 , base +SYS_MCI ,NULL ,NULL ,NULL ,NULL ,0 );
Was going to complain about this one not switching to _data but it was addressed in a follow up patch.
Quoted 4 lines
drivers/mfd/vexpress-sysreg.c +2
-2- mmc_gpio_chip->gc.ngpio =2 ; -gpiochip_add (&mmc_gpio_chip->gc); + mmc_gpio_chip->ngpio =2 ; +gpiochip_add (mmc_gpio_chip);
PATCH 4/182 gpio: generic: factor into gpio_chip struct
Quoted 7 lines · Michael Welling
On Wed, Dec 09, 2015 at 02:12:40PM +0100, Linus Walleij wrote:
...drivers/gpio/gpio-moxart.c static int moxart_gpio_probe(struct platform_device *pdev) · line 67
Quoted 3 lines
drivers/gpio/gpio-moxart.c +1
-1- ret =gpiochip_add (&bgc->gc); + ret =gpiochip_add_data (gc,NULL );if (ret) {
gpiochip_addis still mentioned in thedev_errbelow.
I explicitly left text string updates aside, I am anyways going to have to go over all drivers for a second refactoring with gpiodev_alloc() etc.
Yours,
Linus Walleij
PATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijQuoted 45 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().Cc arm at kernel.orgCc Lee Jones <[email protected]>Cc Alexander Shiyan <[email protected]>Cc Shawn Guo <[email protected]>Cc Sascha Hauer <[email protected]>Cc Tony Lindgren <[email protected]>Cc Kukjin Kim <[email protected]>Cc Krzysztof Kozlowski <[email protected]>Cc Alexandre Courbot <[email protected]>Cc Gregory Fong <[email protected]>Cc Brian Norris <[email protected]>Cc Florian Fainelli <[email protected]>Cc Liviu Dudau <[email protected]>Cc Sudeep Holla <[email protected]>Cc Lorenzo Pieralisi <[email protected]>Cc Nicolas Pitre <[email protected]>Cc Olof Johansson <[email protected]>Cc Vladimir Zapolskiy <[email protected]>Cc Rabin Vincent <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-omap at vger.kernel.orgCc linux-samsung-soc at vger.kernel.orgCc bcm-kernel-feedback-list at broadcom.comSigned-off-by Linus Walleij <[email protected]>---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.
Quoted 6 lines
--- arch/arm/mach-clps711x/board-autcpu12.c | 2 +- arch/arm/mach-clps711x/board-p720t.c | 2 +- arch/arm/mach-imx/mach-mx21ads.c | 2 +- arch/arm/mach-omap1/board-ams-delta.c | 2 +- arch/arm/mach-s3c64xx/mach-crag6410.c | 2 +-
For s3c64xx:
Best regards,
Krzysztof
PATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijQuoted 58 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().Cc arm at kernel.orgCc Lee Jones <[email protected]>Cc Alexander Shiyan <[email protected]>Cc Shawn Guo <[email protected]>Cc Sascha Hauer <[email protected]>Cc Tony Lindgren <[email protected]>Cc Kukjin Kim <[email protected]>Cc Krzysztof Kozlowski <[email protected]>Cc Alexandre Courbot <[email protected]>Cc Gregory Fong <[email protected]>Cc Brian Norris <[email protected]>Cc Florian Fainelli <[email protected]>Cc Liviu Dudau <[email protected]>Cc Sudeep Holla <[email protected]>Cc Lorenzo Pieralisi <[email protected]>Cc Nicolas Pitre <[email protected]>Cc Olof Johansson <[email protected]>Cc Vladimir Zapolskiy <[email protected]>Cc Rabin Vincent <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-omap at vger.kernel.orgCc linux-samsung-soc at vger.kernel.orgCc bcm-kernel-feedback-list at broadcom.comSigned-off-by Linus Walleij <[email protected]>---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.--- arch/arm/mach-clps711x/board-autcpu12.c | 2 +- arch/arm/mach-clps711x/board-p720t.c | 2 +- arch/arm/mach-imx/mach-mx21ads.c | 2 +- arch/arm/mach-omap1/board-ams-delta.c | 2 +- arch/arm/mach-s3c64xx/mach-crag6410.c | 2 +- drivers/gpio/gpio-74xx-mmio.c | 37 ++-- drivers/gpio/gpio-brcmstb.c | 80 ++++----- drivers/gpio/gpio-clps711x.c | 28 +-- drivers/gpio/gpio-dwapb.c | 92 +++++----- drivers/gpio/gpio-ep93xx.c | 25 +-- drivers/gpio/gpio-etraxfs.c | 49 +++--- drivers/gpio/gpio-ge.c | 24 +--
Quoted 8 lines
drivers/gpio/gpio-generic.c | 292 +++++++++++++++----------------- drivers/gpio/gpio-grgpio.c | 73 ++++---- drivers/gpio/gpio-moxart.c | 29 ++-- drivers/gpio/gpio-mxc.c | 27 ++- drivers/gpio/gpio-mxs.c | 33 ++-- drivers/gpio/gpio-sodaville.c | 13 +- drivers/gpio/gpio-xgene-sb.c | 40 ++--- drivers/mfd/vexpress-sysreg.c | 8 +-
Quoted 4 lines
include/linux/basic_mmio_gpio.h | 80 --------- include/linux/gpio/driver.h | 54 ++++++ 22 files changed, 442 insertions(+), 552 deletions(-) delete mode 100644 include/linux/basic_mmio_gpio.h
[...]
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org ? Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
PATCH 4/182 gpio: generic: factor into gpio_chip struct
In reply to Linus WalleijQuoted 46 lines · Linus Walleij
The separate struct
bgpio_chiphas been a pain to handle, both by being confusingly similar in name to structgpio_chipand for being contained inside a struct so that structgpio_chipis 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 forCONFIG_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_chipdirectly. And while we're at it: replace allcontainer_of()dereferencing bygpiochip_get_data()and registering thegpio_chipwithgpiochip_add_data().Cc arm at kernel.orgCc Lee Jones <[email protected]>Cc Alexander Shiyan <[email protected]>Cc Shawn Guo <[email protected]>Cc Sascha Hauer <[email protected]>Cc Tony Lindgren <[email protected]>Cc Kukjin Kim <[email protected]>Cc Krzysztof Kozlowski <[email protected]>Cc Alexandre Courbot <[email protected]>Cc Gregory Fong <[email protected]>Cc Brian Norris <[email protected]>Cc Florian Fainelli <[email protected]>Cc Liviu Dudau <[email protected]>Cc Sudeep Holla <[email protected]>Cc Lorenzo Pieralisi <[email protected]>Cc Nicolas Pitre <[email protected]>Cc Olof Johansson <[email protected]>Cc Vladimir Zapolskiy <[email protected]>Cc Rabin Vincent <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc linux-omap at vger.kernel.orgCc linux-samsung-soc at vger.kernel.orgCc bcm-kernel-feedback-list at broadcom.comSigned-off-by Linus Walleij <[email protected]>---
ARM SoC folks and Lee: it would be great if you could ACK the few lines hittingarch/arm/*anddrivers/mfd/*in this so I can take it through the GPIO tree.
---
[...]
Quoted 1 line
drivers/gpio/gpio-brcmstb.c | 80 ++++-----
For brcmstb: