/* * Copyright (c) 2018 ISEE 2007 SL * Manel Caro * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #include #include "led.h" /* Return gpio number from Name */ int gpio_name_to_num(char* name) { int i = 0; while(ldef[i].led_name[0] != 0){ if(!strcmp(name, ldef[i].led_name)){ return ldef[i].gpio_num; } i++; } return 0; } /* GPIO pins for the LEDs */ /* GPIO Leds */ #define IGEP0146_LED_RED_USER0 8 #define IGEP0146_LED_GREEN_USER1 9 #ifdef CONFIG_LED_STATUS_GREEN void green_led_off(void) { #if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0146) __led_set(IGEP0146_LED_GREEN_USER1, CONFIG_LED_STATUS_OFF); #elif (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0046) __led_set(gpio_name_to_num("green"), CONFIG_LED_STATUS_OFF); #endif } void green_led_on(void) { #if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0146) __led_set(IGEP0146_LED_GREEN_USER1, CONFIG_LED_STATUS_ON); #elif (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0046) __led_set(gpio_name_to_num("green"), CONFIG_LED_STATUS_ON); #endif } #endif #ifdef CONFIG_LED_STATUS_RED void red_led_off(void) { #if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0146) __led_set(IGEP0146_LED_RED_USER0, CONFIG_LED_STATUS_OFF); #elif (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0046) __led_set(gpio_name_to_num("red"), CONFIG_LED_STATUS_OFF); #endif } void red_led_on(void) { #if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0146) __led_set(IGEP0146_LED_RED_USER0, CONFIG_LED_STATUS_ON); #elif (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0046) __led_set(gpio_name_to_num("red"), CONFIG_LED_STATUS_ON); #endif } #endif #if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0146) static int get_led_gpio(led_id_t mask) { #ifdef CONFIG_LED_STATUS0 if (CONFIG_LED_STATUS_BIT == mask) { return IGEP0146_LED_RED_USER0; } #endif #ifdef CONFIG_LED_STATUS1 if (CONFIG_LED_STATUS_BIT1 == mask) { return IGEP0146_LED_GREEN_USER1; } #endif return 0; } #elif (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0046) /* Convert Status from gpio mask */ static int get_led_gpio(led_id_t mask) { int i = 0; while(ldef[i].led_name[0] != 0){ if(mask == ldef[i].led_st) { return ldef[i].gpio_num; } i++; } return 0; } #endif void __led_init (led_id_t mask, int state) { int toggle_gpio; toggle_gpio = get_led_gpio(mask); if(toggle_gpio) { if (!gpio_request(toggle_gpio, "led")) __led_set(mask, state); } } void __led_toggle (led_id_t mask) { int state, toggle_gpio; toggle_gpio = get_led_gpio(mask); if(toggle_gpio) { state = gpio_get_value(toggle_gpio); gpio_direction_output(toggle_gpio, !state); } } void __led_set (led_id_t mask, int state) { int toggle_gpio; toggle_gpio = get_led_gpio(mask); if(toggle_gpio) { gpio_direction_output(toggle_gpio, state); } }