add special values for GPIO lines in switch
authorGabor Juhos <juhosg@openwrt.org>
Mon, 6 Aug 2007 17:25:49 +0000 (17:25 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Mon, 6 Aug 2007 17:25:49 +0000 (17:25 +0000)
SVN-Revision: 8351

target/linux/adm5120-2.6/files/arch/mips/adm5120/gpio.c
target/linux/adm5120-2.6/files/include/asm-mips/mach-adm5120/gpio.h

index 1fac84bb533eec94ddcca115aaf6446df0533219..41299a9a5e473132eb9c341460df8da81d7bd8a8 100644 (file)
@@ -204,10 +204,27 @@ static inline int leds_direction_output(unsigned led, int value)
 
        t = GPIO_READ(reg);
        t &= ~(LED_MODE_MASK << s);
-       if (value)
-               t |= (LED_MODE_OUT_HIGH << s);
-       else
+
+       switch (value) {
+       case ADM5120_GPIO_LOW:
                t |= (LED_MODE_OUT_LOW << s);
+               break;
+       case ADM5120_GPIO_FLASH:
+       case ADM5120_GPIO_LINK:
+       case ADM5120_GPIO_SPEED:
+       case ADM5120_GPIO_DUPLEX:
+       case ADM5120_GPIO_ACT:
+       case ADM5120_GPIO_COLL:
+       case ADM5120_GPIO_LINK_ACT:
+       case ADM5120_GPIO_DUPLEX_COLL:
+       case ADM5120_GPIO_10M_ACT:
+       case ADM5120_GPIO_100M_ACT:
+               t |= ((value & LED_MODE_MASK) << s);
+               break;
+       default:
+               t |= (LED_MODE_OUT_HIGH << s);
+               break;
+       }
 
        GPIO_WRITE(t,reg);
 
@@ -232,24 +249,6 @@ static inline int leds_get_value(unsigned led)
        return 1;
 }
 
-static inline void leds_set_value(unsigned led, int value)
-{
-       gpio_reg_t *reg;
-       u32 s,t;
-
-       reg = led_table[led].reg;
-       s = led_table[led].mode_shift;
-
-       t = GPIO_READ(reg);
-       t &= ~(LED_MODE_MASK << s);
-       if (value)
-               t |= (LED_MODE_OUT_HIGH << s);
-       else
-               t |= (LED_MODE_OUT_LOW << s);
-
-       GPIO_WRITE(t,reg);
-}
-
 /*
  * Main GPIO support routines
  */
@@ -294,7 +293,7 @@ void adm5120_gpio_set_value(unsigned gpio, int value)
        }
 
        gpio -= ADM5120_GPIO_P0L0;
-       leds_set_value(gpio, value);
+       leds_direction_output(gpio, value);
 }
 
 int adm5120_gpio_request(unsigned gpio, const char *label)
index 97e187ea0c58a7efa5b6a50a944168846b7cd3d5..58147d393964d3a17a79be0bce1eb096d7fd0e2d 100644 (file)
@@ -26,6 +26,8 @@
 #ifndef _ADM5120_GPIO_H_
 #define _ADM5120_GPIO_H_
 
+#include <asm/mach-adm5120/adm5120_switch.h>
+
 #define ADM5120_GPIO_PIN0      0
 #define ADM5120_GPIO_PIN1      1
 #define ADM5120_GPIO_PIN2      2
 #define ADM5120_GPIO_MAX       22
 #define ADM5120_GPIO_COUNT     ADM5120_GPIO_MAX+1
 
+#define ADM5120_GPIO_LOW       0
+#define ADM5120_GPIO_HIGH      1
+
+#define ADM5120_GPIO_SWITCH    0x10
+#define ADM5120_GPIO_FLASH     (ADM5120_GPIO_SWITCH | LED_MODE_FLASH)
+#define ADM5120_GPIO_LINK      (ADM5120_GPIO_SWITCH | LED_MODE_LINK)
+#define ADM5120_GPIO_SPEED     (ADM5120_GPIO_SWITCH | LED_MODE_SPEED)
+#define ADM5120_GPIO_DUPLEX    (ADM5120_GPIO_SWITCH | LED_MODE_DUPLEX)
+#define ADM5120_GPIO_ACT       (ADM5120_GPIO_SWITCH | LED_MODE_ACT)
+#define ADM5120_GPIO_COLL      (ADM5120_GPIO_SWITCH | LED_MODE_COLL)
+#define ADM5120_GPIO_LINK_ACT  (ADM5120_GPIO_SWITCH | LED_MODE_LINK_ACT)
+#define ADM5120_GPIO_DUPLEX_COLL (ADM5120_GPIO_SWITCH | LED_MODE_DUPLEX_COLL)
+#define ADM5120_GPIO_10M_ACT   (ADM5120_GPIO_SWITCH | LED_MODE_10M_ACT)
+#define ADM5120_GPIO_100M_ACT  (ADM5120_GPIO_SWITCH | LED_MODE_100M_ACT)
+
 extern int adm5120_gpio_direction_input(unsigned gpio);
 extern int adm5120_gpio_direction_output(unsigned gpio, int value);
 extern int adm5120_gpio_get_value(unsigned gpio);