Module Name:    src
Committed By:   jmcneill
Date:           Sun Dec  8 20:40:38 UTC 2024

Modified Files:
        src/sys/dev/gpio: gpio.c gpiovar.h

Log Message:
gpio(4): Add gpio_intr_{mask,unmask} functions.

For devices that use level triggered GPIO interrupts, provide an API
that allows them to mask/unmask interrupts on that pin.


To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/sys/dev/gpio/gpio.c
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/gpio/gpiovar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/gpio/gpio.c
diff -u src/sys/dev/gpio/gpio.c:1.73 src/sys/dev/gpio/gpio.c:1.74
--- src/sys/dev/gpio/gpio.c:1.73	Mon Nov  6 00:35:05 2023
+++ src/sys/dev/gpio/gpio.c	Sun Dec  8 20:40:38 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: gpio.c,v 1.73 2023/11/06 00:35:05 brad Exp $ */
+/* $NetBSD: gpio.c,v 1.74 2024/12/08 20:40:38 jmcneill Exp $ */
 /*	$OpenBSD: gpio.c,v 1.6 2006/01/14 12:33:49 grange Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.73 2023/11/06 00:35:05 brad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.74 2024/12/08 20:40:38 jmcneill Exp $");
 
 /*
  * General Purpose Input/Output framework.
@@ -618,6 +618,28 @@ gpio_intr_str(void *gpio, struct gpio_pi
 	return (true);
 }
 
+void
+gpio_intr_mask(void *gpio, void *ih)
+{
+	struct gpio_softc *sc = gpio;
+
+	if (sc->sc_gc->gp_intr_mask == NULL)
+		return;
+
+	sc->sc_gc->gp_intr_mask(sc->sc_gc->gp_cookie, ih);
+}
+
+void
+gpio_intr_unmask(void *gpio, void *ih)
+{
+	struct gpio_softc *sc = gpio;
+
+	if (sc->sc_gc->gp_intr_unmask == NULL)
+		return;
+
+	sc->sc_gc->gp_intr_unmask(sc->sc_gc->gp_cookie, ih);
+}
+
 int
 gpio_pin_to_pin_num(void *gpio, struct gpio_pinmap *map, int pin)
 {

Index: src/sys/dev/gpio/gpiovar.h
diff -u src/sys/dev/gpio/gpiovar.h:1.19 src/sys/dev/gpio/gpiovar.h:1.20
--- src/sys/dev/gpio/gpiovar.h:1.19	Mon Nov  6 00:35:05 2023
+++ src/sys/dev/gpio/gpiovar.h	Sun Dec  8 20:40:38 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: gpiovar.h,v 1.19 2023/11/06 00:35:05 brad Exp $ */
+/* $NetBSD: gpiovar.h,v 1.20 2024/12/08 20:40:38 jmcneill Exp $ */
 /*	$OpenBSD: gpiovar.h,v 1.3 2006/01/14 12:33:49 grange Exp $	*/
 
 /*
@@ -36,6 +36,8 @@ typedef struct gpio_chipset_tag {
 				     int (*)(void *), void *);
 	void	(*gp_intr_disestablish)(void *, void *);
 	bool	(*gp_intr_str)(void *, int, int, char *, size_t);
+	void	(*gp_intr_mask)(void *, void *);
+	void	(*gp_intr_unmask)(void *, void *);
 } *gpio_chipset_tag_t;
 
 /* GPIO pin description */
@@ -118,6 +120,8 @@ void *	gpio_intr_establish(void *, struc
 void	gpio_intr_disestablish(void *, void *);
 bool	gpio_intr_str(void *, struct gpio_pinmap *, int, int,
 		      char *, size_t);
+void	gpio_intr_mask(void *, void *);
+void	gpio_intr_unmask(void *, void *);
 int	gpio_pin_to_pin_num(void *, struct gpio_pinmap *, int);
 
 int	gpio_lock(void *);

Reply via email to