linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
@ 2021-05-14 12:33 Thomas Bogendoerfer
  2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Thomas Bogendoerfer @ 2021-05-14 12:33 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski, linux-kernel, linux-gpio

IDT 79RC3243x SoCs integrated a gpio controller, which handles up
to 32 gpios. All gpios could be used as an interrupt source.

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
Changes in v5:
 - use bgpio spinlock
 - made interrupt controller optional
 - made ngpios optional

Changes in v4:
 - added spinlock to serialize access to irq registers
 - reworked checking of irq sense bits
 - start with handle_bad_irq and set handle_level_irq in idt_gpio_irq_set_type
 - cleaned up #includes
 - use platform_get_irq

Changes in v3:
 - changed compatible string to idt,32434-gpio
 - registers now start with gpio direction register and leaves
   out alternate function register for pinmux/pinctrl driver

Changes in v2:
 - made driver buildable as module
 - use for_each_set_bit() in irq dispatch handler
 - use gpiochip_get_data instead of own container_of helper
 - use module_platform_driver() instead of arch_initcall
 - don't default y for Mikrotik RB532

 drivers/gpio/Kconfig         |  12 ++
 drivers/gpio/Makefile        |   1 +
 drivers/gpio/gpio-idt3243x.c | 206 +++++++++++++++++++++++++++++++++++
 3 files changed, 219 insertions(+)
 create mode 100644 drivers/gpio/gpio-idt3243x.c

diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 1dd0ec6727fd..ae2721967191 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -782,6 +782,18 @@ config GPIO_MSC313
 	  Say Y here to support the main GPIO block on MStar/SigmaStar
 	  ARMv7 based SoCs.
 
+config GPIO_IDT3243X
+	tristate "IDT 79RC3243X GPIO support"
+	depends on MIKROTIK_RB532 || COMPILE_TEST
+	select GPIO_GENERIC
+	select GPIOLIB_IRQCHIP
+	help
+	  Select this option to enable GPIO driver for
+	  IDT 79RC3243X based devices like Mikrotik RB532.
+
+	  To compile this driver as a module, choose M here: the module will
+	  be called gpio-idt3243x.
+
 endmenu
 
 menu "Port-mapped I/O GPIO drivers"
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index d7c81e1611a4..32a32659866a 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -68,6 +68,7 @@ obj-$(CONFIG_GPIO_HISI)                 += gpio-hisi.o
 obj-$(CONFIG_GPIO_HLWD)			+= gpio-hlwd.o
 obj-$(CONFIG_HTC_EGPIO)			+= gpio-htc-egpio.o
 obj-$(CONFIG_GPIO_ICH)			+= gpio-ich.o
+obj-$(CONFIG_GPIO_IDT3243X)		+= gpio-idt3243x.o
 obj-$(CONFIG_GPIO_IOP)			+= gpio-iop.o
 obj-$(CONFIG_GPIO_IT87)			+= gpio-it87.o
 obj-$(CONFIG_GPIO_IXP4XX)		+= gpio-ixp4xx.o
diff --git a/drivers/gpio/gpio-idt3243x.c b/drivers/gpio/gpio-idt3243x.c
new file mode 100644
index 000000000000..e961acee1571
--- /dev/null
+++ b/drivers/gpio/gpio-idt3243x.c
@@ -0,0 +1,206 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Driver for IDT/Renesas 79RC3243x Interrupt Controller  */
+
+#include <linux/bitops.h>
+#include <linux/gpio/driver.h>
+#include <linux/irq.h>
+#include <linux/module.h>
+#include <linux/mod_devicetable.h>
+#include <linux/platform_device.h>
+#include <linux/spinlock.h>
+
+#define IDT_PIC_IRQ_PEND	0x00
+#define IDT_PIC_IRQ_MASK	0x08
+
+#define IDT_GPIO_DIR		0x00
+#define IDT_GPIO_DATA		0x04
+#define IDT_GPIO_ILEVEL		0x08
+#define IDT_GPIO_ISTAT		0x0C
+
+struct idt_gpio_ctrl {
+	struct gpio_chip gc;
+	void __iomem *pic;
+	void __iomem *gpio;
+	u32 mask_cache;
+};
+
+static void idt_gpio_dispatch(struct irq_desc *desc)
+{
+	struct gpio_chip *gc = irq_desc_get_handler_data(desc);
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+	struct irq_chip *host_chip = irq_desc_get_chip(desc);
+	unsigned int bit, virq;
+	unsigned long pending;
+
+	chained_irq_enter(host_chip, desc);
+
+	pending = readl(ctrl->pic + IDT_PIC_IRQ_PEND);
+	pending &= ~ctrl->mask_cache;
+	for_each_set_bit(bit, &pending, gc->ngpio) {
+		virq = irq_linear_revmap(gc->irq.domain, bit);
+		if (virq)
+			generic_handle_irq(virq);
+	}
+
+	chained_irq_exit(host_chip, desc);
+}
+
+static int idt_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+	unsigned int sense = flow_type & IRQ_TYPE_SENSE_MASK;
+	unsigned long flags;
+	u32 ilevel;
+
+	/* hardware only supports level triggered */
+	if (sense == IRQ_TYPE_NONE || (sense & IRQ_TYPE_EDGE_BOTH))
+		return -EINVAL;
+
+	spin_lock_irqsave(&gc->bgpio_lock, flags);
+
+	ilevel = readl(ctrl->gpio + IDT_GPIO_ILEVEL);
+	if (sense & IRQ_TYPE_LEVEL_HIGH)
+		ilevel |= BIT(d->hwirq);
+	else if (sense & IRQ_TYPE_LEVEL_LOW)
+		ilevel &= ~BIT(d->hwirq);
+
+	writel(ilevel, ctrl->gpio + IDT_GPIO_ILEVEL);
+	irq_set_handler_locked(d, handle_level_irq);
+
+	spin_unlock_irqrestore(&gc->bgpio_lock, flags);
+	return 0;
+}
+
+static void idt_gpio_ack(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+
+	writel(~BIT(d->hwirq), ctrl->gpio + IDT_GPIO_ISTAT);
+}
+
+static void idt_gpio_mask(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+	unsigned long flags;
+
+	spin_lock_irqsave(&gc->bgpio_lock, flags);
+
+	ctrl->mask_cache |= BIT(d->hwirq);
+	writel(ctrl->mask_cache, ctrl->pic + IDT_PIC_IRQ_MASK);
+
+	spin_unlock_irqrestore(&gc->bgpio_lock, flags);
+}
+
+static void idt_gpio_unmask(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+	unsigned long flags;
+
+	spin_lock_irqsave(&gc->bgpio_lock, flags);
+
+	ctrl->mask_cache &= ~BIT(d->hwirq);
+	writel(ctrl->mask_cache, ctrl->pic + IDT_PIC_IRQ_MASK);
+
+	spin_unlock_irqrestore(&gc->bgpio_lock, flags);
+}
+
+static int idt_gpio_irq_init_hw(struct gpio_chip *gc)
+{
+	struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
+
+	/* Mask interrupts. */
+	ctrl->mask_cache = 0xffffffff;
+	writel(ctrl->mask_cache, ctrl->pic + IDT_PIC_IRQ_MASK);
+
+	return 0;
+}
+
+static struct irq_chip idt_gpio_irqchip = {
+	.name = "IDTGPIO",
+	.irq_mask = idt_gpio_mask,
+	.irq_ack = idt_gpio_ack,
+	.irq_unmask = idt_gpio_unmask,
+	.irq_set_type = idt_gpio_irq_set_type
+};
+
+static int idt_gpio_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct gpio_irq_chip *girq;
+	struct idt_gpio_ctrl *ctrl;
+	unsigned int parent_irq;
+	int ngpios;
+	int ret;
+
+
+	ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
+	if (!ctrl)
+		return -ENOMEM;
+
+	ctrl->gpio = devm_platform_ioremap_resource_byname(pdev, "gpio");
+	if (!ctrl->gpio)
+		return -ENOMEM;
+
+	ctrl->gc.parent = dev;
+
+	ret = bgpio_init(&ctrl->gc, &pdev->dev, 4, ctrl->gpio + IDT_GPIO_DATA,
+			 NULL, NULL, ctrl->gpio + IDT_GPIO_DIR, NULL, 0);
+	if (ret) {
+		dev_err(dev, "bgpio_init failed\n");
+		return ret;
+	}
+
+	ret = device_property_read_u32(dev, "ngpios", &ngpios);
+	if (!ret)
+		ctrl->gc.ngpio = ngpios;
+
+	if (device_property_read_bool(dev, "interrupt-controller")) {
+		ctrl->pic = devm_platform_ioremap_resource_byname(pdev, "pic");
+		if (!ctrl->pic)
+			return -ENOMEM;
+
+		parent_irq = platform_get_irq(pdev, 0);
+		if (!parent_irq)
+			return -EINVAL;
+
+		girq = &ctrl->gc.irq;
+		girq->chip = &idt_gpio_irqchip;
+		girq->init_hw = idt_gpio_irq_init_hw;
+		girq->parent_handler = idt_gpio_dispatch;
+		girq->num_parents = 1;
+		girq->parents = devm_kcalloc(dev, girq->num_parents,
+					     sizeof(*girq->parents),
+					     GFP_KERNEL);
+		if (!girq->parents)
+			return -ENOMEM;
+
+		girq->parents[0] = parent_irq;
+		girq->default_type = IRQ_TYPE_NONE;
+		girq->handler = handle_bad_irq;
+	}
+
+	return devm_gpiochip_add_data(&pdev->dev, &ctrl->gc, ctrl);
+}
+
+static const struct of_device_id idt_gpio_of_match[] = {
+	{ .compatible = "idt,32434-gpio" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, idt_gpio_of_match);
+
+static struct platform_driver idt_gpio_driver = {
+	.probe = idt_gpio_probe,
+	.driver = {
+		.name = "idt3243x-gpio",
+		.of_match_table = idt_gpio_of_match,
+	},
+};
+module_platform_driver(idt_gpio_driver);
+
+MODULE_DESCRIPTION("IDT 79RC3243x GPIO/PIC Driver");
+MODULE_AUTHOR("Thomas Bogendoerfer <tsbogend@alpha.franken.de>");
+MODULE_LICENSE("GPL");
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 GPIO controller
  2021-05-14 12:33 [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller Thomas Bogendoerfer
@ 2021-05-14 12:33 ` Thomas Bogendoerfer
  2021-05-17 21:11   ` Rob Herring
  2021-05-18 23:51   ` Linus Walleij
  2021-05-18 23:50 ` [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x " Linus Walleij
  2021-06-04 12:22 ` Thomas Bogendoerfer
  2 siblings, 2 replies; 9+ messages in thread
From: Thomas Bogendoerfer @ 2021-05-14 12:33 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski, Rob Herring, linux-gpio,
	devicetree, linux-kernel

Add YAML devicetree binding for IDT 79RC32434 GPIO controller

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
Changes in v5:
 - made interrupt controller optional
 - made ngpios setting optional

Changes in v4:
 - renamed to idt,32434-gpio this time for real

Changes in v3:
 - renamed to idt,32434-gpio
 - drop ngpio description
 - use gpio0: gpio@50004 in example


 .../bindings/gpio/idt,32434-gpio.yaml         | 67 +++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/gpio/idt,32434-gpio.yaml

diff --git a/Documentation/devicetree/bindings/gpio/idt,32434-gpio.yaml b/Documentation/devicetree/bindings/gpio/idt,32434-gpio.yaml
new file mode 100644
index 000000000000..d38de8144656
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/idt,32434-gpio.yaml
@@ -0,0 +1,67 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/gpio/idt,32434-gpio.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: IDT 79RC32434 GPIO controller
+
+maintainers:
+  - Thomas Bogendoerfer <tsbogend@alpha.franken.de>
+
+properties:
+  compatible:
+    const: idt,32434-gpio
+
+  reg:
+    maxItems: 2
+
+  reg-names:
+    items:
+      - const: gpio
+      - const: pic
+
+  gpio-controller: true
+
+  "#gpio-cells":
+    const: 2
+
+  ngpios:
+    minimum: 1
+    maximum: 32
+
+  interrupt-controller: true
+
+  "#interrupt-cells":
+    const: 2
+
+  interrupts:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+  - reg-names
+  - gpio-controller
+  - "#gpio-cells"
+
+additionalProperties: false
+
+examples:
+  - |
+    gpio0: gpio@50004 {
+        compatible = "idt,32434-gpio";
+        reg = <0x50004 0x10>, <0x38030 0x0c>;
+        reg-names = "gpio", "pic";
+
+        interrupt-controller;
+        #interrupt-cells = <2>;
+
+        interrupt-parent = <&cpuintc>;
+        interrupts = <6>;
+
+        gpio-controller;
+        #gpio-cells = <2>;
+
+        ngpios = <14>;
+    };
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 GPIO controller
  2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
@ 2021-05-17 21:11   ` Rob Herring
  2021-05-18 23:51   ` Linus Walleij
  1 sibling, 0 replies; 9+ messages in thread
From: Rob Herring @ 2021-05-17 21:11 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: Rob Herring, linux-gpio, Bartosz Golaszewski, devicetree,
	linux-kernel, Linus Walleij

On Fri, 14 May 2021 14:33:08 +0200, Thomas Bogendoerfer wrote:
> Add YAML devicetree binding for IDT 79RC32434 GPIO controller
> 
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
> Changes in v5:
>  - made interrupt controller optional
>  - made ngpios setting optional
> 
> Changes in v4:
>  - renamed to idt,32434-gpio this time for real
> 
> Changes in v3:
>  - renamed to idt,32434-gpio
>  - drop ngpio description
>  - use gpio0: gpio@50004 in example
> 
> 
>  .../bindings/gpio/idt,32434-gpio.yaml         | 67 +++++++++++++++++++
>  1 file changed, 67 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/gpio/idt,32434-gpio.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
  2021-05-14 12:33 [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller Thomas Bogendoerfer
  2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
@ 2021-05-18 23:50 ` Linus Walleij
  2021-05-19  6:20   ` Thomas Bogendoerfer
  2021-06-04 12:22 ` Thomas Bogendoerfer
  2 siblings, 1 reply; 9+ messages in thread
From: Linus Walleij @ 2021-05-18 23:50 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: Bartosz Golaszewski, linux-kernel, open list:GPIO SUBSYSTEM

Hi Thomas,

thanks for your patch!

I can see this is starting to look really good.

There is one thing that confuses me:

On Fri, May 14, 2021 at 2:33 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:

> IDT 79RC3243x SoCs integrated a gpio controller, which handles up
> to 32 gpios. All gpios could be used as an interrupt source.
>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
> Changes in v5:
(...)

> +static int idt_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type)
> +{
(...)
> +       /* hardware only supports level triggered */
> +       if (sense == IRQ_TYPE_NONE || (sense & IRQ_TYPE_EDGE_BOTH))
> +               return -EINVAL;
(...)
> +       irq_set_handler_locked(d, handle_level_irq);

But:

> +static void idt_gpio_ack(struct irq_data *d)
> +{
> +       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
> +       struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
> +
> +       writel(~BIT(d->hwirq), ctrl->gpio + IDT_GPIO_ISTAT);
> +}
(...)
> +       .irq_ack = idt_gpio_ack,

Correct me if I'm wrong but I thing .irq_ack() is only called
from handle_edge_irq ... so never in this case.

Can this ACK just be deleted?

The code in the ACK callback also looks really weird:
write all bits except for the current IRQ into the status
register? It's usually the other way around with these
things. That really makes me suspect it is unused.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 GPIO controller
  2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
  2021-05-17 21:11   ` Rob Herring
@ 2021-05-18 23:51   ` Linus Walleij
  1 sibling, 0 replies; 9+ messages in thread
From: Linus Walleij @ 2021-05-18 23:51 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: Bartosz Golaszewski, Rob Herring, open list:GPIO SUBSYSTEM,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	linux-kernel

On Fri, May 14, 2021 at 2:33 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:

> Add YAML devicetree binding for IDT 79RC32434 GPIO controller
>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
> Changes in v5:

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
  2021-05-18 23:50 ` [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x " Linus Walleij
@ 2021-05-19  6:20   ` Thomas Bogendoerfer
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Bogendoerfer @ 2021-05-19  6:20 UTC (permalink / raw)
  To: Linus Walleij; +Cc: Bartosz Golaszewski, linux-kernel, open list:GPIO SUBSYSTEM

On Wed, May 19, 2021 at 01:50:39AM +0200, Linus Walleij wrote:
> Hi Thomas,
> 
> thanks for your patch!
> 
> I can see this is starting to look really good.
> 
> There is one thing that confuses me:
> 
> On Fri, May 14, 2021 at 2:33 PM Thomas Bogendoerfer
> <tsbogend@alpha.franken.de> wrote:
> 
> > IDT 79RC3243x SoCs integrated a gpio controller, which handles up
> > to 32 gpios. All gpios could be used as an interrupt source.
> >
> > Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> > ---
> > Changes in v5:
> (...)
> 
> > +static int idt_gpio_irq_set_type(struct irq_data *d, unsigned int flow_type)
> > +{
> (...)
> > +       /* hardware only supports level triggered */
> > +       if (sense == IRQ_TYPE_NONE || (sense & IRQ_TYPE_EDGE_BOTH))
> > +               return -EINVAL;
> (...)
> > +       irq_set_handler_locked(d, handle_level_irq);
> 
> But:
> 
> > +static void idt_gpio_ack(struct irq_data *d)
> > +{
> > +       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
> > +       struct idt_gpio_ctrl *ctrl = gpiochip_get_data(gc);
> > +
> > +       writel(~BIT(d->hwirq), ctrl->gpio + IDT_GPIO_ISTAT);
> > +}
> (...)
> > +       .irq_ack = idt_gpio_ack,
> 
> Correct me if I'm wrong but I thing .irq_ack() is only called
> from handle_edge_irq ... so never in this case.

handle_level_irq() does a mask_ack_irq() and this uses mask_irq() and
desc->irq_data.chip->irq_ack(), if there is no irq_mask_ack function.

> Can this ACK just be deleted?

no without it interrupts won't go away.

> The code in the ACK callback also looks really weird:
> write all bits except for the current IRQ into the status
> register? It's usually the other way around with these
> things. That really makes me suspect it is unused.

interrupts are acked by writing a 0 to the bit position. I know it's
unusal...

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
  2021-05-14 12:33 [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller Thomas Bogendoerfer
  2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
  2021-05-18 23:50 ` [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x " Linus Walleij
@ 2021-06-04 12:22 ` Thomas Bogendoerfer
  2021-06-04 22:03   ` Linus Walleij
  2 siblings, 1 reply; 9+ messages in thread
From: Thomas Bogendoerfer @ 2021-06-04 12:22 UTC (permalink / raw)
  To: Linus Walleij, Bartosz Golaszewski, linux-kernel, linux-gpio

On Fri, May 14, 2021 at 02:33:07PM +0200, Thomas Bogendoerfer wrote:
> IDT 79RC3243x SoCs integrated a gpio controller, which handles up
> to 32 gpios. All gpios could be used as an interrupt source.
> 
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> ---
> Changes in v5:
>  - use bgpio spinlock
>  - made interrupt controller optional
>  - made ngpios optional
> 
> Changes in v4:
>  - added spinlock to serialize access to irq registers
>  - reworked checking of irq sense bits
>  - start with handle_bad_irq and set handle_level_irq in idt_gpio_irq_set_type
>  - cleaned up #includes
>  - use platform_get_irq
> 
> Changes in v3:
>  - changed compatible string to idt,32434-gpio
>  - registers now start with gpio direction register and leaves
>    out alternate function register for pinmux/pinctrl driver
> 
> Changes in v2:
>  - made driver buildable as module
>  - use for_each_set_bit() in irq dispatch handler
>  - use gpiochip_get_data instead of own container_of helper
>  - use module_platform_driver() instead of arch_initcall
>  - don't default y for Mikrotik RB532
> 
>  drivers/gpio/Kconfig         |  12 ++
>  drivers/gpio/Makefile        |   1 +
>  drivers/gpio/gpio-idt3243x.c | 206 +++++++++++++++++++++++++++++++++++
>  3 files changed, 219 insertions(+)
>  create mode 100644 drivers/gpio/gpio-idt3243x.c
> [...]

is there anything a still need to do to get this integrated for v5.14 ?

Thomas.

-- 
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea.                                                [ RFC1925, 2.3 ]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
  2021-06-04 12:22 ` Thomas Bogendoerfer
@ 2021-06-04 22:03   ` Linus Walleij
  2021-06-07 14:00     ` Bartosz Golaszewski
  0 siblings, 1 reply; 9+ messages in thread
From: Linus Walleij @ 2021-06-04 22:03 UTC (permalink / raw)
  To: Thomas Bogendoerfer
  Cc: Bartosz Golaszewski, linux-kernel, open list:GPIO SUBSYSTEM

On Fri, Jun 4, 2021 at 2:22 PM Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:

> is there anything a still need to do to get this integrated for v5.14 ?

IMO not really:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Bartosz is collecting the patches for v5.14.

Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller
  2021-06-04 22:03   ` Linus Walleij
@ 2021-06-07 14:00     ` Bartosz Golaszewski
  0 siblings, 0 replies; 9+ messages in thread
From: Bartosz Golaszewski @ 2021-06-07 14:00 UTC (permalink / raw)
  To: Linus Walleij; +Cc: Thomas Bogendoerfer, linux-kernel, open list:GPIO SUBSYSTEM

On Sat, Jun 5, 2021 at 12:04 AM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Fri, Jun 4, 2021 at 2:22 PM Thomas Bogendoerfer
> <tsbogend@alpha.franken.de> wrote:
>
> > is there anything a still need to do to get this integrated for v5.14 ?
>
> IMO not really:
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
>
> Bartosz is collecting the patches for v5.14.
>
> Yours,
> Linus Walleij

Sorry for the delay, I'm currently overwhelmed with a house renovation
and the approaching move. Now applied (together with the bindings),
thanks!

Bartosz

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-06-07 14:02 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-14 12:33 [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x GPIO controller Thomas Bogendoerfer
2021-05-14 12:33 ` [PATCH v5 2/2] dt-bindings: gpio: Add devicetree binding for IDT 79RC32434 " Thomas Bogendoerfer
2021-05-17 21:11   ` Rob Herring
2021-05-18 23:51   ` Linus Walleij
2021-05-18 23:50 ` [PATCH v5 1/2] gpio: Add support for IDT 79RC3243x " Linus Walleij
2021-05-19  6:20   ` Thomas Bogendoerfer
2021-06-04 12:22 ` Thomas Bogendoerfer
2021-06-04 22:03   ` Linus Walleij
2021-06-07 14:00     ` Bartosz Golaszewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).