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);
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
*/
}
gpio -= ADM5120_GPIO_P0L0;
- leds_set_value(gpio, value);
+ leds_direction_output(gpio, value);
}
int adm5120_gpio_request(unsigned gpio, const char *label)
return 0;
}
-subsys_initcall(adm5120_gpio_init);
+pure_initcall(adm5120_gpio_init);
EXPORT_SYMBOL(adm5120_gpio_direction_output);
EXPORT_SYMBOL(adm5120_gpio_direction_input);