2 * Copyright (c) 2013 Corscience GmbH & Co.KG
3 * Andreas Bießmann <andreas.biessmann@corscience.de>
5 * SPDX-License-Identifier: GPL-2.0+
8 #include <status_led.h>
10 #include <asm/arch/cpu.h>
12 #include <asm/arch/sys_proto.h>
15 #define TRICORDER_STATUS_LED_YELLOW 42
16 #define TRICORDER_STATUS_LED_GREEN 43
18 void __led_init(led_id_t mask, int state)
20 __led_set(mask, state);
23 void __led_toggle(led_id_t mask)
27 if (!toggle_gpio && STATUS_LED_BIT & mask)
28 toggle_gpio = TRICORDER_STATUS_LED_GREEN;
30 #ifdef STATUS_LED_BIT1
31 if (!toggle_gpio && STATUS_LED_BIT1 & mask)
32 toggle_gpio = TRICORDER_STATUS_LED_YELLOW;
34 #ifdef STATUS_LED_BIT2
35 if (!toggle_gpio && STATUS_LED_BIT2 & mask) {
37 twl4030_i2c_read_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
39 val ^= (TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDAPWM);
40 twl4030_i2c_write_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
46 gpio_request(toggle_gpio, "");
47 state = gpio_get_value(toggle_gpio);
48 gpio_set_value(toggle_gpio, !state);
52 void __led_set(led_id_t mask, int state)
55 if (STATUS_LED_BIT & mask) {
56 gpio_request(TRICORDER_STATUS_LED_GREEN, "");
57 gpio_direction_output(TRICORDER_STATUS_LED_GREEN, 0);
58 gpio_set_value(TRICORDER_STATUS_LED_GREEN, state);
61 #ifdef STATUS_LED_BIT1
62 if (STATUS_LED_BIT1 & mask) {
63 gpio_request(TRICORDER_STATUS_LED_YELLOW, "");
64 gpio_direction_output(TRICORDER_STATUS_LED_YELLOW, 0);
65 gpio_set_value(TRICORDER_STATUS_LED_YELLOW, state);
68 #ifdef STATUS_LED_BIT2
69 if (STATUS_LED_BIT2 & mask) {
70 if (STATUS_LED_OFF == state)
71 twl4030_i2c_write_u8(TWL4030_CHIP_LED,
72 TWL4030_LED_LEDEN, 0);
74 twl4030_i2c_write_u8(TWL4030_CHIP_LED,
76 (TWL4030_LED_LEDEN_LEDAON |
77 TWL4030_LED_LEDEN_LEDAPWM));