led.c 2.1 KB

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