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__ */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to