svn commit: r255335 - head/sys/mips/atheros

Luiz Otavio O Souza loos at FreeBSD.org
Fri Sep 6 23:47:51 UTC 2013


Author: loos
Date: Fri Sep  6 23:47:50 2013
New Revision: 255335
URL: http://svnweb.freebsd.org/changeset/base/255335

Log:
  Remove the hardcoded limit for the number of gpio_pins that can be used.
  Allocate it dynamically.
  
  Approved by:	adrian (mentor)

Modified:
  head/sys/mips/atheros/ar71xx_gpio.c
  head/sys/mips/atheros/ar71xx_gpiovar.h

Modified: head/sys/mips/atheros/ar71xx_gpio.c
==============================================================================
--- head/sys/mips/atheros/ar71xx_gpio.c	Fri Sep  6 23:39:56 2013	(r255334)
+++ head/sys/mips/atheros/ar71xx_gpio.c	Fri Sep  6 23:47:50 2013	(r255335)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/module.h>
 #include <sys/rman.h>
 #include <sys/lock.h>
+#include <sys/malloc.h>
 #include <sys/mutex.h>
 #include <sys/gpio.h>
 
@@ -418,6 +419,13 @@ ar71xx_gpio_attach(device_t dev)
 	    "pinon", &pinon) != 0)
 		pinon = 0;
 	device_printf(dev, "gpio pinmask=0x%x\n", mask);
+	for (j = 0; j <= maxpin; j++) {
+		if ((mask & (1 << j)) == 0)
+			continue;
+		sc->gpio_npins++;
+	}
+	sc->gpio_pins = malloc(sizeof(*sc->gpio_pins) * sc->gpio_npins,
+	    M_DEVBUF, M_WAITOK | M_ZERO);
 	for (i = 0, j = 0; j <= maxpin; j++) {
 		if ((mask & (1 << j)) == 0)
 			continue;
@@ -429,7 +437,6 @@ ar71xx_gpio_attach(device_t dev)
 		ar71xx_gpio_pin_configure(sc, &sc->gpio_pins[i], DEFAULT_CAPS);
 		i++;
 	}
-	sc->gpio_npins = i;
 	for (i = 0; i < sc->gpio_npins; i++) {
 		j = sc->gpio_pins[i].gp_pin;
 		if ((pinon & (1 << j)) != 0)
@@ -455,6 +462,7 @@ ar71xx_gpio_detach(device_t dev)
 		bus_release_resource(dev, SYS_RES_MEMORY, sc->gpio_mem_rid,
 		    sc->gpio_mem_res);
 
+	free(sc->gpio_pins, M_DEVBUF);
 	mtx_destroy(&sc->gpio_mtx);
 
 	return(0);

Modified: head/sys/mips/atheros/ar71xx_gpiovar.h
==============================================================================
--- head/sys/mips/atheros/ar71xx_gpiovar.h	Fri Sep  6 23:39:56 2013	(r255334)
+++ head/sys/mips/atheros/ar71xx_gpiovar.h	Fri Sep  6 23:47:50 2013	(r255335)
@@ -64,7 +64,7 @@ struct ar71xx_gpio_softc {
         int			gpio_irq_rid;
         void			*gpio_ih;
 	int			gpio_npins;
-	struct gpio_pin		gpio_pins[AR71XX_GPIO_PINS];
+	struct gpio_pin		*gpio_pins;
 };
 
 #endif	/* __AR71XX_GPIOVAR_H__ */


More information about the svn-src-all mailing list