Mirror source tarball to openwrt.org (#2983)
[openwrt.git] / package / switch / src / switch-adm.c
index 921ad50..8d5de04 100644 (file)
@@ -26,7 +26,7 @@
  * 02110-1301, USA.
  */
 
-#include <linux/config.h>
+#include <linux/autoconf.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/if.h>
@@ -49,7 +49,7 @@ static int force = 0;
 
 MODULE_AUTHOR("Felix Fietkau <openwrt@nbd.name>");
 MODULE_LICENSE("GPL");
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,52)
 module_param(eecs, int, 0);
 module_param(eesk, int, 0);
 module_param(eedi, int, 0);
@@ -75,7 +75,7 @@ MODULE_PARM(force, "i");
 
 #define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0)
 
-#if defined(BCMGPIO2) || defined(BCMGPIO)
+#ifdef BROADCOM
 extern char *nvram_get(char *name);
 
 /* Return gpio pin number assigned to the named pin */
@@ -86,7 +86,7 @@ extern char *nvram_get(char *name);
 *
 * 'def_pin' is returned if there is no such variable found.
 */
-static unsigned int getgpiopin(char *pin_name, unsigned int def_pin)
+static unsigned int get_gpiopin(char *pin_name, unsigned int def_pin)
 {
        char name[] = "gpioXXXX";
        char *val;
@@ -109,7 +109,7 @@ static void adm_write(int cs, char *buf, unsigned int bits)
        int i, len = (bits + 7) / 8;
        __u8 mask;
 
-       gpioout(eecs, (cs ? eecs : 0));
+       gpio_out(eecs, (cs ? eecs : 0));
        udelay(EECK_EDGE_TIME);
 
        /* Byte assemble from MSB to LSB */
@@ -117,25 +117,25 @@ static void adm_write(int cs, char *buf, unsigned int bits)
                /* Bit bang from MSB to LSB */
                for (mask = 0x80; mask && bits > 0; mask >>= 1, bits --) {
                        /* Clock low */
-                       gpioout(eesk, 0);
+                       gpio_out(eesk, 0);
                        udelay(EECK_EDGE_TIME);
 
                        /* Output on rising edge */
-                       gpioout(eedi, ((mask & buf[i]) ? eedi : 0));
+                       gpio_out(eedi, ((mask & buf[i]) ? eedi : 0));
                        udelay(EEDI_SETUP_TIME);
 
                        /* Clock high */
-                       gpioout(eesk, eesk);
+                       gpio_out(eesk, eesk);
                        udelay(EECK_EDGE_TIME);
                }
        }
 
        /* Clock low */
-       gpioout(eesk, 0);
+       gpio_out(eesk, 0);
        udelay(EECK_EDGE_TIME);
 
        if (cs)
-               gpioout(eecs, 0);
+               gpio_out(eecs, 0);
 }
 
 
@@ -144,7 +144,7 @@ static void adm_read(int cs, char *buf, unsigned int bits)
        int i, len = (bits + 7) / 8;
        __u8 mask;
 
-       gpioout(eecs, (cs ? eecs : 0));
+       gpio_out(eecs, (cs ? eecs : 0));
        udelay(EECK_EDGE_TIME);
 
        /* Byte assemble from MSB to LSB */
@@ -156,16 +156,16 @@ static void adm_read(int cs, char *buf, unsigned int bits)
                        __u8 gp;
 
                        /* Clock low */
-                       gpioout(eesk, 0);
+                       gpio_out(eesk, 0);
                        udelay(EECK_EDGE_TIME);
 
                        /* Input on rising edge */
-                       gp = gpioin();
+                       gp = gpio_in();
                        if (gp & eedi)
                                byte |= mask;
 
                        /* Clock high */
-                       gpioout(eesk, eesk);
+                       gpio_out(eesk, eesk);
                        udelay(EECK_EDGE_TIME);
                }
 
@@ -173,11 +173,11 @@ static void adm_read(int cs, char *buf, unsigned int bits)
        }
 
        /* Clock low */
-       gpioout(eesk, 0);
+       gpio_out(eesk, 0);
        udelay(EECK_EDGE_TIME);
 
        if (cs)
-               gpioout(eecs, 0);
+               gpio_out(eecs, 0);
 }
 
 
@@ -185,10 +185,10 @@ static void adm_read(int cs, char *buf, unsigned int bits)
 static void adm_enout(__u8 pins, __u8 val)
 {   
        /* Prepare GPIO output value */
-       gpioout(pins, val);
+       gpio_out(pins, val);
        
        /* Enable GPIO outputs */
-       gpioouten(pins, pins);
+       gpio_outen(pins, pins);
        udelay(EECK_EDGE_TIME);
 }
 
@@ -197,7 +197,7 @@ static void adm_enout(__u8 pins, __u8 val)
 static void adm_disout(__u8 pins)
 {   
        /* Disable GPIO outputs */
-       gpioouten(pins, 0);
+       gpio_outen(pins, 0);
        udelay(EECK_EDGE_TIME);
 }
 
@@ -208,11 +208,11 @@ static void adm_adclk(int clocks)
        int i;
        for (i = 0; i < clocks; i++) {
                /* Clock high */
-               gpioout(eesk, eesk);
+               gpio_out(eesk, eesk);
                udelay(EECK_EDGE_TIME);
 
                /* Clock low */
-               gpioout(eesk, 0);
+               gpio_out(eesk, 0);
                udelay(EECK_EDGE_TIME);
        }
 }
@@ -223,7 +223,7 @@ static __u32 adm_rreg(__u8 table, __u8 addr)
        __u8 bits[6] = {
                0xFF, 0xFF, 0xFF, 0xFF,
                (0x06 << 4) | ((table & 0x01) << 3 | (addr&64)>>6),
-               ((addr&62)<<2)
+               ((addr&63)<<2)
        };
 
        __u8 rbits[4];
@@ -496,16 +496,25 @@ static int detect_adm(void)
 {
        int ret = 0;
 
-#if defined(BCMGPIO2) || defined(BCMGPIO)
+#ifdef BROADCOM
        int boardflags = atoi(nvram_get("boardflags"));
+        int boardnum = atoi(nvram_get("boardnum"));
 
-       if ((boardflags & 0x80) || force) {
+       if ((boardnum == 44) && (boardflags == 0x0388)) {  /* Trendware TEW-411BRP+ */
                ret = 1;
 
-               eecs = getgpiopin("adm_eecs", 2);
-               eesk = getgpiopin("adm_eesk", 3);
-               eedi = getgpiopin("adm_eedi", 4);
-               eerc = getgpiopin("adm_rc", 0);
+               eecs = get_gpiopin("adm_eecs", 2);
+               eesk = get_gpiopin("adm_eesk", 3);
+               eedi = get_gpiopin("adm_eedi", 4);
+               eerc = get_gpiopin("adm_rc", 5);
+
+       } else if ((boardflags & 0x80) || force) {
+               ret = 1;
+
+               eecs = get_gpiopin("adm_eecs", 2);
+               eesk = get_gpiopin("adm_eesk", 3);
+               eedi = get_gpiopin("adm_eedi", 4);
+               eerc = get_gpiopin("adm_rc", 0);
 
        } else if ((strcmp(nvram_get("boardtype") ?: "", "bcm94710dev") == 0) &&
                        (strncmp(nvram_get("boardnum") ?: "", "42", 2) == 0)) {
This page took 0.031155 seconds and 4 git commands to generate.