led.c 2.0 KB

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