[adm5120] add special values for GPIO lines in switch
[openwrt/svn-archive/archive.git] / target / linux / adm5120-2.6 / files / arch / mips / adm5120 / gpio.c
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)