1ad9f072cSAndreas Bießmann /*
2ad9f072cSAndreas Bießmann * Copyright (c) 2013 Corscience GmbH & Co.KG
3ad9f072cSAndreas Bießmann * Andreas Bießmann <andreas.biessmann@corscience.de>
4ad9f072cSAndreas Bießmann *
5ad9f072cSAndreas Bießmann * SPDX-License-Identifier: GPL-2.0+
6ad9f072cSAndreas Bießmann */
7ad9f072cSAndreas Bießmann #include <common.h>
8ad9f072cSAndreas Bießmann #include <status_led.h>
9ad9f072cSAndreas Bießmann #include <twl4030.h>
10ad9f072cSAndreas Bießmann #include <asm/arch/cpu.h>
11ad9f072cSAndreas Bießmann #include <asm/io.h>
12ad9f072cSAndreas Bießmann #include <asm/arch/sys_proto.h>
13ad9f072cSAndreas Bießmann #include <asm/gpio.h>
14ad9f072cSAndreas Bießmann
15ad9f072cSAndreas Bießmann #define TRICORDER_STATUS_LED_YELLOW 42
16ad9f072cSAndreas Bießmann #define TRICORDER_STATUS_LED_GREEN 43
17ad9f072cSAndreas Bießmann
__led_init(led_id_t mask,int state)18ad9f072cSAndreas Bießmann void __led_init(led_id_t mask, int state)
19ad9f072cSAndreas Bießmann {
20ad9f072cSAndreas Bießmann __led_set(mask, state);
21ad9f072cSAndreas Bießmann }
22ad9f072cSAndreas Bießmann
__led_toggle(led_id_t mask)23ad9f072cSAndreas Bießmann void __led_toggle(led_id_t mask)
24ad9f072cSAndreas Bießmann {
25ad9f072cSAndreas Bießmann int toggle_gpio = 0;
26*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS0
27*2d8d190cSUri Mashiach if (!toggle_gpio && CONFIG_LED_STATUS_BIT & mask)
28ad9f072cSAndreas Bießmann toggle_gpio = TRICORDER_STATUS_LED_GREEN;
29ad9f072cSAndreas Bießmann #endif
30*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS1
31*2d8d190cSUri Mashiach if (!toggle_gpio && CONFIG_LED_STATUS_BIT1 & mask)
32ad9f072cSAndreas Bießmann toggle_gpio = TRICORDER_STATUS_LED_YELLOW;
33ad9f072cSAndreas Bießmann #endif
34*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS2
35*2d8d190cSUri Mashiach if (!toggle_gpio && CONFIG_LED_STATUS_BIT2 & mask) {
36ad9f072cSAndreas Bießmann uint8_t val;
37ad9f072cSAndreas Bießmann twl4030_i2c_read_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
38ad9f072cSAndreas Bießmann &val);
39ad9f072cSAndreas Bießmann val ^= (TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDAPWM);
40ad9f072cSAndreas Bießmann twl4030_i2c_write_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
41ad9f072cSAndreas Bießmann val);
42ad9f072cSAndreas Bießmann }
43ad9f072cSAndreas Bießmann #endif
44ad9f072cSAndreas Bießmann if (toggle_gpio) {
45ad9f072cSAndreas Bießmann int state;
46ad9f072cSAndreas Bießmann gpio_request(toggle_gpio, "");
47ad9f072cSAndreas Bießmann state = gpio_get_value(toggle_gpio);
48ad9f072cSAndreas Bießmann gpio_set_value(toggle_gpio, !state);
49ad9f072cSAndreas Bießmann }
50ad9f072cSAndreas Bießmann }
51ad9f072cSAndreas Bießmann
__led_set(led_id_t mask,int state)52ad9f072cSAndreas Bießmann void __led_set(led_id_t mask, int state)
53ad9f072cSAndreas Bießmann {
54*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS0
55*2d8d190cSUri Mashiach if (CONFIG_LED_STATUS_BIT & mask) {
56ad9f072cSAndreas Bießmann gpio_request(TRICORDER_STATUS_LED_GREEN, "");
57ad9f072cSAndreas Bießmann gpio_direction_output(TRICORDER_STATUS_LED_GREEN, 0);
58ad9f072cSAndreas Bießmann gpio_set_value(TRICORDER_STATUS_LED_GREEN, state);
59ad9f072cSAndreas Bießmann }
60ad9f072cSAndreas Bießmann #endif
61*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS1
62*2d8d190cSUri Mashiach if (CONFIG_LED_STATUS_BIT1 & mask) {
63ad9f072cSAndreas Bießmann gpio_request(TRICORDER_STATUS_LED_YELLOW, "");
64ad9f072cSAndreas Bießmann gpio_direction_output(TRICORDER_STATUS_LED_YELLOW, 0);
65ad9f072cSAndreas Bießmann gpio_set_value(TRICORDER_STATUS_LED_YELLOW, state);
66ad9f072cSAndreas Bießmann }
67ad9f072cSAndreas Bießmann #endif
68*2d8d190cSUri Mashiach #ifdef CONFIG_LED_STATUS2
69*2d8d190cSUri Mashiach if (CONFIG_LED_STATUS_BIT2 & mask) {
70*2d8d190cSUri Mashiach if (CONFIG_LED_STATUS_OFF == state)
71ad9f072cSAndreas Bießmann twl4030_i2c_write_u8(TWL4030_CHIP_LED,
72ad9f072cSAndreas Bießmann TWL4030_LED_LEDEN, 0);
73ad9f072cSAndreas Bießmann else
74ad9f072cSAndreas Bießmann twl4030_i2c_write_u8(TWL4030_CHIP_LED,
75ad9f072cSAndreas Bießmann TWL4030_LED_LEDEN,
76ad9f072cSAndreas Bießmann (TWL4030_LED_LEDEN_LEDAON |
77ad9f072cSAndreas Bießmann TWL4030_LED_LEDEN_LEDAPWM));
78ad9f072cSAndreas Bießmann }
79ad9f072cSAndreas Bießmann #endif
80ad9f072cSAndreas Bießmann }
81