All of lore.kernel.org
 help / color / mirror / Atom feed
From: Russell King <rmk+kernel@armlinux.org.uk>
To: linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org,
	linux-pcmcia@lists.infradead.org
Cc: Alexandre Courbot <gnurou@gmail.com>,
	Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Kristoffer Ericson <kristoffer.ericson@gmail.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Subject: [PATCH 09/33] ARM: sa1111: implement a gpio_chip for SA1111 GPIOs
Date: Mon, 29 Aug 2016 11:24:51 +0100	[thread overview]
Message-ID: <E1beJkJ-0000ma-Hv@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <20160829102328.GA28796@n2100.armlinux.org.uk>

Add a gpio_chip instance for SA1111 GPIOs.  This allows us to use
gpiolib to lookup and manipulate SA1111 GPIOs.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
 arch/arm/common/sa1111.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 165 insertions(+), 3 deletions(-)

diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index fb0a0a4dfea4..ac19dca4c258 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -15,6 +15,7 @@
  * from machine specific code with proper arguments when required.
  */
 #include <linux/module.h>
+#include <linux/gpio/driver.h>
 #include <linux/init.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
@@ -107,6 +108,7 @@ struct sa1111 {
 	spinlock_t	lock;
 	void __iomem	*base;
 	struct sa1111_platform_data *pdata;
+	struct gpio_chip gc;
 #ifdef CONFIG_PM
 	void		*saved_state;
 #endif
@@ -509,6 +511,163 @@ static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base)
 	return 0;
 }
 
+enum {
+	SA1111_GPIO_PXDDR = (SA1111_GPIO_PADDR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXDRR = (SA1111_GPIO_PADRR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXDWR = (SA1111_GPIO_PADWR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXSDR = (SA1111_GPIO_PASDR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXSSR = (SA1111_GPIO_PASSR - SA1111_GPIO_PADDR),
+};
+
+static struct sa1111 *gc_to_sa1111(struct gpio_chip *gc)
+{
+	return container_of(gc, struct sa1111, gc);
+}
+
+static void __iomem *sa1111_gpio_map_reg(struct sa1111 *sachip, unsigned offset)
+{
+	void __iomem *reg = sachip->base + SA1111_GPIO;
+
+	if (offset < 4)
+		return reg + SA1111_GPIO_PADDR;
+	if (offset < 10)
+		return reg + SA1111_GPIO_PBDDR;
+	if (offset < 18)
+		return reg + SA1111_GPIO_PCDDR;
+	return NULL;
+}
+
+static u32 sa1111_gpio_map_bit(unsigned offset)
+{
+	if (offset < 4)
+		return BIT(offset);
+	if (offset < 10)
+		return BIT(offset - 4);
+	if (offset < 18)
+		return BIT(offset - 10);
+	return 0;
+}
+
+static void sa1111_gpio_modify(void __iomem *reg, u32 mask, u32 set)
+{
+	u32 val;
+
+	val = readl_relaxed(reg);
+	val &= ~mask;
+	val |= mask & set;
+	writel_relaxed(val, reg);
+}
+
+static int sa1111_gpio_get_direction(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	return !!(readl_relaxed(reg + SA1111_GPIO_PXDDR) & mask);
+}
+
+static int sa1111_gpio_direction_input(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDDR, mask, mask);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSDR, mask, mask);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+
+	return 0;
+}
+
+static int sa1111_gpio_direction_output(struct gpio_chip *gc, unsigned offset,
+	int value)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDWR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSSR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDDR, mask, 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSDR, mask, 0);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+
+	return 0;
+}
+
+static int sa1111_gpio_get(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	return !!(readl_relaxed(reg + SA1111_GPIO_PXDRR) & mask);
+}
+
+static void sa1111_gpio_set(struct gpio_chip *gc, unsigned offset, int value)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDWR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSSR, mask, value ? mask : 0);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+}
+
+static void sa1111_gpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
+	unsigned long *bits)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sachip->base + SA1111_GPIO;
+	u32 msk, val;
+
+	msk = *mask;
+	val = *bits;
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PADWR, msk & 15, val);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PASSR, msk & 15, val);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PBDWR, (msk >> 4) & 255, val >> 4);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PBSSR, (msk >> 4) & 255, val >> 4);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PCDWR, (msk >> 12) & 255, val >> 12);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PCSSR, (msk >> 12) & 255, val >> 12);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+}
+
+static int sa1111_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+
+	return sachip->irq_base + offset;
+}
+
+static int sa1111_setup_gpios(struct sa1111 *sachip)
+{
+	sachip->gc.label = "sa1111";
+	sachip->gc.parent = sachip->dev;
+	sachip->gc.owner = THIS_MODULE;
+	sachip->gc.get_direction = sa1111_gpio_get_direction;
+	sachip->gc.direction_input = sa1111_gpio_direction_input;
+	sachip->gc.direction_output = sa1111_gpio_direction_output;
+	sachip->gc.get = sa1111_gpio_get;
+	sachip->gc.set = sa1111_gpio_set;
+	sachip->gc.set_multiple = sa1111_gpio_set_multiple;
+	sachip->gc.to_irq = sa1111_gpio_to_irq;
+	sachip->gc.base = -1;
+	sachip->gc.ngpio = 18;
+
+	return devm_gpiochip_add_data(sachip->dev, &sachip->gc, sachip);
+}
+
 /*
  * Bring the SA1111 out of reset.  This requires a set procedure:
  *  1. nRESET asserted (by hardware)
@@ -696,7 +855,7 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
 	if (!pd)
 		return -EINVAL;
 
-	sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL);
+	sachip = devm_kzalloc(me, sizeof(struct sa1111), GFP_KERNEL);
 	if (!sachip)
 		return -ENOMEM;
 
@@ -747,6 +906,11 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
 	 */
 	sa1111_wake(sachip);
 
+	/* Setup the GPIOs - should really be done after the IRQ setup */
+	ret = sa1111_setup_gpios(sachip);
+	if (ret)
+		goto err_unmap;
+
 	/*
 	 * The interrupt controller must be initialised before any
 	 * other device to ensure that the interrupts are available.
@@ -806,7 +970,6 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
  err_clkput:
 	clk_put(sachip->clk);
  err_free:
-	kfree(sachip);
 	return ret;
 }
 
@@ -843,7 +1006,6 @@ static void __sa1111_remove(struct sa1111 *sachip)
 
 	iounmap(sachip->base);
 	clk_put(sachip->clk);
-	kfree(sachip);
 }
 
 struct sa1111_save_data {
-- 
2.1.0


WARNING: multiple messages have this Message-ID (diff)
From: rmk+kernel@armlinux.org.uk (Russell King)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 09/33] ARM: sa1111: implement a gpio_chip for SA1111 GPIOs
Date: Mon, 29 Aug 2016 11:24:51 +0100	[thread overview]
Message-ID: <E1beJkJ-0000ma-Hv@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <20160829102328.GA28796@n2100.armlinux.org.uk>

Add a gpio_chip instance for SA1111 GPIOs.  This allows us to use
gpiolib to lookup and manipulate SA1111 GPIOs.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
---
 arch/arm/common/sa1111.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 165 insertions(+), 3 deletions(-)

diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index fb0a0a4dfea4..ac19dca4c258 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -15,6 +15,7 @@
  * from machine specific code with proper arguments when required.
  */
 #include <linux/module.h>
+#include <linux/gpio/driver.h>
 #include <linux/init.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
@@ -107,6 +108,7 @@ struct sa1111 {
 	spinlock_t	lock;
 	void __iomem	*base;
 	struct sa1111_platform_data *pdata;
+	struct gpio_chip gc;
 #ifdef CONFIG_PM
 	void		*saved_state;
 #endif
@@ -509,6 +511,163 @@ static int sa1111_setup_irq(struct sa1111 *sachip, unsigned irq_base)
 	return 0;
 }
 
+enum {
+	SA1111_GPIO_PXDDR = (SA1111_GPIO_PADDR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXDRR = (SA1111_GPIO_PADRR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXDWR = (SA1111_GPIO_PADWR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXSDR = (SA1111_GPIO_PASDR - SA1111_GPIO_PADDR),
+	SA1111_GPIO_PXSSR = (SA1111_GPIO_PASSR - SA1111_GPIO_PADDR),
+};
+
+static struct sa1111 *gc_to_sa1111(struct gpio_chip *gc)
+{
+	return container_of(gc, struct sa1111, gc);
+}
+
+static void __iomem *sa1111_gpio_map_reg(struct sa1111 *sachip, unsigned offset)
+{
+	void __iomem *reg = sachip->base + SA1111_GPIO;
+
+	if (offset < 4)
+		return reg + SA1111_GPIO_PADDR;
+	if (offset < 10)
+		return reg + SA1111_GPIO_PBDDR;
+	if (offset < 18)
+		return reg + SA1111_GPIO_PCDDR;
+	return NULL;
+}
+
+static u32 sa1111_gpio_map_bit(unsigned offset)
+{
+	if (offset < 4)
+		return BIT(offset);
+	if (offset < 10)
+		return BIT(offset - 4);
+	if (offset < 18)
+		return BIT(offset - 10);
+	return 0;
+}
+
+static void sa1111_gpio_modify(void __iomem *reg, u32 mask, u32 set)
+{
+	u32 val;
+
+	val = readl_relaxed(reg);
+	val &= ~mask;
+	val |= mask & set;
+	writel_relaxed(val, reg);
+}
+
+static int sa1111_gpio_get_direction(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	return !!(readl_relaxed(reg + SA1111_GPIO_PXDDR) & mask);
+}
+
+static int sa1111_gpio_direction_input(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDDR, mask, mask);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSDR, mask, mask);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+
+	return 0;
+}
+
+static int sa1111_gpio_direction_output(struct gpio_chip *gc, unsigned offset,
+	int value)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDWR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSSR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDDR, mask, 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSDR, mask, 0);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+
+	return 0;
+}
+
+static int sa1111_gpio_get(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	return !!(readl_relaxed(reg + SA1111_GPIO_PXDRR) & mask);
+}
+
+static void sa1111_gpio_set(struct gpio_chip *gc, unsigned offset, int value)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sa1111_gpio_map_reg(sachip, offset);
+	u32 mask = sa1111_gpio_map_bit(offset);
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXDWR, mask, value ? mask : 0);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PXSSR, mask, value ? mask : 0);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+}
+
+static void sa1111_gpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
+	unsigned long *bits)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+	unsigned long flags;
+	void __iomem *reg = sachip->base + SA1111_GPIO;
+	u32 msk, val;
+
+	msk = *mask;
+	val = *bits;
+
+	spin_lock_irqsave(&sachip->lock, flags);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PADWR, msk & 15, val);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PASSR, msk & 15, val);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PBDWR, (msk >> 4) & 255, val >> 4);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PBSSR, (msk >> 4) & 255, val >> 4);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PCDWR, (msk >> 12) & 255, val >> 12);
+	sa1111_gpio_modify(reg + SA1111_GPIO_PCSSR, (msk >> 12) & 255, val >> 12);
+	spin_unlock_irqrestore(&sachip->lock, flags);
+}
+
+static int sa1111_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
+{
+	struct sa1111 *sachip = gc_to_sa1111(gc);
+
+	return sachip->irq_base + offset;
+}
+
+static int sa1111_setup_gpios(struct sa1111 *sachip)
+{
+	sachip->gc.label = "sa1111";
+	sachip->gc.parent = sachip->dev;
+	sachip->gc.owner = THIS_MODULE;
+	sachip->gc.get_direction = sa1111_gpio_get_direction;
+	sachip->gc.direction_input = sa1111_gpio_direction_input;
+	sachip->gc.direction_output = sa1111_gpio_direction_output;
+	sachip->gc.get = sa1111_gpio_get;
+	sachip->gc.set = sa1111_gpio_set;
+	sachip->gc.set_multiple = sa1111_gpio_set_multiple;
+	sachip->gc.to_irq = sa1111_gpio_to_irq;
+	sachip->gc.base = -1;
+	sachip->gc.ngpio = 18;
+
+	return devm_gpiochip_add_data(sachip->dev, &sachip->gc, sachip);
+}
+
 /*
  * Bring the SA1111 out of reset.  This requires a set procedure:
  *  1. nRESET asserted (by hardware)
@@ -696,7 +855,7 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
 	if (!pd)
 		return -EINVAL;
 
-	sachip = kzalloc(sizeof(struct sa1111), GFP_KERNEL);
+	sachip = devm_kzalloc(me, sizeof(struct sa1111), GFP_KERNEL);
 	if (!sachip)
 		return -ENOMEM;
 
@@ -747,6 +906,11 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
 	 */
 	sa1111_wake(sachip);
 
+	/* Setup the GPIOs - should really be done after the IRQ setup */
+	ret = sa1111_setup_gpios(sachip);
+	if (ret)
+		goto err_unmap;
+
 	/*
 	 * The interrupt controller must be initialised before any
 	 * other device to ensure that the interrupts are available.
@@ -806,7 +970,6 @@ static int __sa1111_probe(struct device *me, struct resource *mem, int irq)
  err_clkput:
 	clk_put(sachip->clk);
  err_free:
-	kfree(sachip);
 	return ret;
 }
 
@@ -843,7 +1006,6 @@ static void __sa1111_remove(struct sa1111 *sachip)
 
 	iounmap(sachip->base);
 	clk_put(sachip->clk);
-	kfree(sachip);
 }
 
 struct sa1111_save_data {
-- 
2.1.0

  parent reply	other threads:[~2016-08-29 10:25 UTC|newest]

Thread overview: 235+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-29 10:02 [PATCH 0/3] SA11x0/PXA pcmcia fixes Russell King - ARM Linux
2016-08-29 10:03 ` [PATCH 1/3] pcmcia: sa11xx_base: fix reporting of timing information Russell King
2016-08-29 10:03 ` [PATCH 2/3] pcmcia: sa11xx_base: add units to the " Russell King
2016-08-29 10:03 ` [PATCH 3/3] pcmcia: soc_common: fix SS_STSCHG polarity Russell King
2016-08-29 10:23 ` [RFC PATCH 00/33] SA11x0/PXA GPIO rework (Core + PCMCIA only) Russell King - ARM Linux
2016-08-29 10:23   ` Russell King - ARM Linux
2016-08-29 10:24   ` [PATCH 01/33] gpio: sa1100: fix irq probing for ucb1x00 Russell King
2016-08-29 10:24     ` Russell King
2016-09-07 22:25     ` Linus Walleij
2016-09-07 22:25       ` Linus Walleij
2016-08-29 10:24   ` [PATCH 02/33] gpio: sa1100: use sa11x0_gpio_set_wake() Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 10:24   ` [PATCH 03/33] gpio: sa1100: convert to use IO accessors Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 10:24   ` [PATCH 04/33] gpio: sa1100: implement get_direction method Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 10:24   ` [PATCH 05/33] gpio: add generic single-register fixed-direction GPIO driver Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 19:39     ` Robert Jarzmik
2016-08-29 19:39       ` Robert Jarzmik
2016-08-29 23:12       ` Russell King - ARM Linux
2016-08-29 23:12         ` Russell King - ARM Linux
2016-08-30  6:08         ` Alexander Shiyan
2016-08-30  6:08           ` Alexander Shiyan
2016-08-30  7:41           ` Russell King - ARM Linux
2016-08-30  7:41             ` Russell King - ARM Linux
2016-08-30  9:18       ` Russell King - ARM Linux
2016-08-30  9:18         ` Russell King - ARM Linux
2016-08-30 16:42         ` Robert Jarzmik
2016-08-30 16:42           ` Robert Jarzmik
2016-08-30 18:46           ` Russell King - ARM Linux
2016-08-30 18:46             ` Russell King - ARM Linux
2016-08-30 21:32             ` Robert Jarzmik
2016-08-30 21:32               ` Robert Jarzmik
2016-08-31  8:49               ` Russell King - ARM Linux
2016-08-31  8:49                 ` Russell King - ARM Linux
2016-08-31 10:27                 ` Russell King - ARM Linux
2016-08-31 10:27                   ` Russell King - ARM Linux
2016-09-01  7:19                   ` Robert Jarzmik
2016-09-01  7:19                     ` Robert Jarzmik
2016-09-01  9:27                     ` Russell King - ARM Linux
2016-09-01  9:27                       ` Russell King - ARM Linux
2016-09-01 21:58                       ` Robert Jarzmik
2016-09-01 21:58                         ` Robert Jarzmik
2016-09-01 23:02                         ` Russell King - ARM Linux
2016-09-01 23:02                           ` Russell King - ARM Linux
2016-09-02 17:50                           ` Robert Jarzmik
2016-09-02 17:50                             ` Robert Jarzmik
2016-09-02 18:56                             ` Russell King - ARM Linux
2016-09-02 18:56                               ` Russell King - ARM Linux
2016-09-02 21:21                               ` Robert Jarzmik
2016-09-02 21:21                                 ` Robert Jarzmik
2016-09-02 23:34                                 ` Russell King - ARM Linux
2016-09-02 23:34                                   ` Russell King - ARM Linux
2016-09-03  9:15                                 ` Russell King - ARM Linux
2016-09-03  9:15                                   ` Russell King - ARM Linux
2016-09-03  9:09                     ` Russell King - ARM Linux
2016-09-03  9:09                       ` Russell King - ARM Linux
2016-09-03 10:25                 ` Russell King - ARM Linux
2016-09-03 10:25                   ` Russell King - ARM Linux
2016-09-03 11:31                   ` Robert Jarzmik
2016-09-03 11:31                     ` Robert Jarzmik
2016-09-04 19:04                   ` Robert Jarzmik
2016-09-04 19:04                     ` Robert Jarzmik
2016-09-04 20:18                     ` Russell King - ARM Linux
2016-09-04 20:18                       ` Russell King - ARM Linux
2016-09-05  9:06                 ` Linus Walleij
2016-09-05  9:06                   ` Linus Walleij
2016-09-05 12:26                   ` Russell King - ARM Linux
2016-09-05 12:26                     ` Russell King - ARM Linux
2016-09-08 13:21                     ` Linus Walleij
2016-09-08 13:21                       ` Linus Walleij
2016-09-14  8:50                       ` Linus Walleij
2016-09-14  8:50                         ` Linus Walleij
2016-08-30 21:25     ` Linus Walleij
2016-08-30 21:25       ` Linus Walleij
2016-08-30 21:42       ` Russell King - ARM Linux
2016-08-30 21:42         ` Russell King - ARM Linux
2016-08-30 21:47         ` Linus Walleij
2016-08-30 21:47           ` Linus Walleij
2016-09-02 17:00           ` Russell King - ARM Linux
2016-09-02 17:00             ` Russell King - ARM Linux
2016-09-04 20:53             ` Linus Walleij
2016-09-04 20:53               ` Linus Walleij
2016-08-29 10:24   ` [PATCH 06/33] ARM: pxa/lubbock: add GPIO driver for LUB_MISC_WR register Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 19:57     ` Robert Jarzmik
2016-08-29 19:57       ` Robert Jarzmik
2016-08-29 22:58       ` Russell King - ARM Linux
2016-08-29 22:58         ` Russell King - ARM Linux
2016-08-29 10:24   ` [PATCH 07/33] ARM: sa1100/assabet: add BCR/BSR GPIO driver Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 10:24   ` [PATCH 08/33] ARM: sa1100/neponset: add GPIO drivers for control and modem registers Russell King
2016-08-29 10:24     ` Russell King
2016-08-29 10:24   ` Russell King [this message]
2016-08-29 10:24     ` [PATCH 09/33] ARM: sa1111: implement a gpio_chip for SA1111 GPIOs Russell King
2016-08-29 10:24   ` [PATCH 10/33] pcmcia: soc_common: switch to using gpio_descs Russell King
2016-08-29 10:24     ` Russell King
2016-09-14 11:29     ` Linus Walleij
2016-09-14 11:29       ` Linus Walleij
2016-09-14 12:10       ` Russell King - ARM Linux
2016-09-14 12:10         ` Russell King - ARM Linux
2016-08-29 10:25   ` [PATCH 11/33] pcmcia: soc_common: request legacy detect GPIO with active low Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 12/33] pcmcia: soc_common: add support for reset and bus enable GPIOs Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 13/33] pcmcia: soc_common: restore previous socket state on error Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 14/33] pcmcia: soc_common: add CF socket state helper Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 15/33] pcmcia: soc_common: add support for Vcc and Vpp regulators Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 16/33] pcmcia: soc_common: switch to a per-socket cpufreq notifier Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 17/33] pcmcia: soc_common: constify pcmcia_low_level ops pointer Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 18/33] pcmcia: sa1100: provide generic CF support Russell King
2016-08-29 10:25     ` Russell King
2016-09-14  8:52     ` Linus Walleij
2016-09-14  8:52       ` Linus Walleij
2016-09-14  9:06       ` Russell King - ARM Linux
2016-09-14  9:06         ` Russell King - ARM Linux
2016-09-14 11:13         ` Linus Walleij
2016-09-14 11:13           ` Linus Walleij
2016-08-29 10:25   ` [PATCH 19/33] pcmcia: sa1111: add driver-data pointer Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 20/33] pcmcia: add MAX1600 driver Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 21/33] ARM: sa1100: provide infrastructure to support generic CF sockets Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:25   ` [PATCH 22/33] ARM: sa1100/assabet: convert to " Russell King
2016-08-29 10:25     ` Russell King
2016-08-29 10:26   ` [PATCH 23/33] ARM: sa1100/cerf: " Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 24/33] ARM: sa1100/h3xxx: switch h3xxx PCMCIA to use gpiod APIs Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 25/33] ARM: sa1100/nanoengine: convert to generic CF sockets Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 26/33] ARM: sa1100/shannon: switch shannon PCMCIA to use gpiod APIs Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 27/33] ARM: sa1100/simpad: switch simpad CF " Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 28/33] ARM: sa1100/neponset: add GPIOs for PCMCIA Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 29/33] pcmcia: sa1111/neponset: convert to use MAX1600 power driver Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 30/33] ARM: sa1100/jornada720: switch jornada720 PCMCIA to gpiod APIs Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 31/33] ARM: pxa/lubbock: convert PCMCIA to use MAX1600 driver Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 32/33] pcmcia: sa1100*: remove redundant bvd1/bvd2 setting Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 10:26   ` [PATCH 33/33] ARM: sa1111: remove legacy GPIO interfaces Russell King
2016-08-29 10:26     ` Russell King
2016-08-29 11:01   ` [PATCH 0/3] SA11x0 gpio keys/leds Russell King - ARM Linux
2016-08-29 11:03     ` [PATCH 1/3] ARM: sa1100/assabet: add gpio keys support for right-hand two buttons Russell King
2016-08-29 11:03     ` [PATCH 2/3] ARM: sa1100/assabet: switch to using gpio leds Russell King
2016-08-29 11:03     ` [PATCH 3/3] ARM: sa1100/cerf: switch to using gpio_led_register_device() Russell King
2016-08-29 11:25     ` [PATCH 0/8] SA11x0 DMA engine/IrDA updates Russell King - ARM Linux
2016-08-29 11:25       ` Russell King - ARM Linux
2016-08-29 11:26       ` [PATCH 1/8] dmaengine: sa11x0: add DMA filters Russell King
2016-08-29 11:26         ` Russell King
2016-08-30 15:57         ` Vinod Koul
2016-08-30 15:57           ` Vinod Koul
2016-08-29 11:26       ` [PATCH 2/8] net: irda/sa1100_ir: convert to dma_request_slave_channel() Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 11:26       ` [PATCH 3/8] net: irda/sa1100_ir: add gpiod APIs for controlling IrDA transceiver Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 11:26       ` [PATCH 4/8] dmaengine: sa11x0: unexport sa11x0_dma_filter_fn and clean up Russell King
2016-08-29 11:26         ` Russell King
2016-08-30 15:58         ` Vinod Koul
2016-08-30 15:58           ` Vinod Koul
2016-08-29 11:26       ` [PATCH 5/8] ARM: sa1100/assabet: switch assabet IrDA to use gpiod APIs Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 11:26       ` [PATCH 6/8] ARM: sa1100/collie: switch collie " Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 11:26       ` [PATCH 7/8] ARM: sa1100/h3xxx: switch h3xxx " Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 11:26       ` [PATCH 8/8] net: irda/sa1100_ir: remove sa11x0 irda platform data Russell King
2016-08-29 11:26         ` Russell King
2016-08-29 12:05       ` [PATCH 0/6] SA11x0 serial updates Russell King - ARM Linux
2016-08-29 12:05         ` Russell King - ARM Linux
2016-08-29 12:05         ` [PATCH 1/6] serial: sa1100: add support for mctrl gpios Russell King
2016-08-29 12:05           ` Russell King
2016-08-31 13:25           ` Greg Kroah-Hartman
2016-08-31 13:25             ` Greg Kroah-Hartman
2016-08-29 12:05         ` [PATCH 2/6] ARM: sa1100/assabet: convert serial to gpiod APIs Russell King
2016-08-29 12:05           ` Russell King
2016-08-29 12:06         ` [PATCH 3/6] ARM: sa1100/h3xxx: " Russell King
2016-08-29 12:06           ` Russell King
2016-08-29 12:06         ` [PATCH 4/6] ARM: sa1100/badge4: remove commented out modem control initialisers Russell King
2016-08-29 12:06           ` Russell King
2016-08-29 12:06         ` [PATCH 5/6] ARM: sa1100/hackkit: remove empty serial mctrl functions Russell King
2016-08-29 12:06           ` Russell King
2016-08-29 12:06         ` [PATCH 6/6] ARM: sa1100/neponset: convert serial to use gpiod APIs Russell King
2016-08-29 12:06           ` Russell King
2016-08-30 10:51           ` [PATCH 0/4] SA11x0 Clocks and removal of Neponset SMC91x hack Russell King - ARM Linux
2016-08-30 10:51             ` Russell King - ARM Linux
2016-08-30 10:52             ` [PATCH 1/4] ARM: sa1100: convert to common clock framework Russell King
2016-08-30 10:52               ` Russell King
2016-08-30 10:52             ` [PATCH 2/4] net: smc91x: add external clock support Russell King
2016-08-30 10:52               ` Russell King
2016-08-30 10:52             ` [PATCH 3/4] ARM: sa1100/neponset: add ethernet oscillator Russell King
2016-08-30 10:52               ` Russell King
2016-08-30 10:52             ` [PATCH 4/4] net: smc91x: remove neponset specific oscillator hack Russell King
2016-08-30 10:52               ` Russell King
2016-08-30 10:59             ` [PATCH 0/8] SA11x0/PXA remainder & cleanups Russell King - ARM Linux
2016-08-30 11:00               ` [PATCH 1/8] mfd: ucb1x00: allow IRQ probing to work with IRQs > 32 Russell King
2016-08-30 12:00                 ` Lee Jones
2016-08-30 11:00               ` [PATCH 2/8] ARM: pxa/lubbock: remove lubbock_set_misc_wr() from global view Russell King
2016-08-30 11:00               ` [PATCH 3/8] ARM: sa1100/cerf: remove redundant definitions Russell King
2016-08-30 11:00               ` [PATCH 4/8] ARM: sa1100/cerf: move cerf header file Russell King
2016-08-30 11:00               ` [PATCH 5/8] ARM: sa1100/nanoengine: remove redundant definitions Russell King
2016-08-30 11:00               ` [PATCH 6/8] ARM: sa1100/nanoengine: move nanoengine header file Russell King
2016-08-30 11:00               ` [PATCH 7/8] ARM: sa1100/neponset: remove neponset_ncr_* GPIO interfaces and header Russell King
2016-08-30 11:01               ` [PATCH 8/8] ARM: sa1100: remove SA-1101 header file Russell King
2016-08-30 15:31             ` [PATCH 0/4] SA11x0 Clocks and removal of Neponset SMC91x hack Nicolas Pitre
2016-08-30 15:31               ` Nicolas Pitre
2016-09-01 23:32             ` David Miller
2016-09-01 23:32               ` David Miller
2016-09-02 18:59               ` Russell King - ARM Linux
2016-09-02 18:59                 ` Russell King - ARM Linux
2016-09-05  9:09         ` [PATCH 0/6] SA11x0 serial updates Linus Walleij
2016-09-05  9:09           ` Linus Walleij
2016-09-05 12:28           ` Russell King - ARM Linux
2016-09-05 12:28             ` Russell King - ARM Linux
2016-09-07 22:28             ` Linus Walleij
2016-09-07 22:28               ` Linus Walleij
2016-09-08 13:23             ` Linus Walleij
2016-09-08 13:23               ` Linus Walleij
2016-08-30 21:31   ` [RFC PATCH 00/33] SA11x0/PXA GPIO rework (Core + PCMCIA only) Linus Walleij
2016-08-30 21:31     ` Linus Walleij
2016-09-01 15:34     ` Russell King - ARM Linux
2016-09-01 15:34       ` Russell King - ARM Linux
2016-09-06 14:46 ` [PATCH 0/3] SA11x0/PXA pcmcia fixes Russell King - ARM Linux

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1beJkJ-0000ma-Hv@rmk-PC.armlinux.org.uk \
    --to=rmk+kernel@armlinux.org.uk \
    --cc=daniel@zonque.org \
    --cc=gnurou@gmail.com \
    --cc=haojian.zhuang@gmail.com \
    --cc=kristoffer.ericson@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-pcmcia@lists.infradead.org \
    --cc=robert.jarzmik@free.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.