leds-lp3952.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * LED driver for TI lp3952 controller
  4. *
  5. * Copyright (C) 2016, DAQRI, LLC.
  6. * Author: Tony Makkiel <tony.makkiel@daqri.com>
  7. */
  8. #ifndef LEDS_LP3952_H_
  9. #define LEDS_LP3952_H_
  10. #define LP3952_NAME "lp3952"
  11. #define LP3952_CMD_REG_COUNT 8
  12. #define LP3952_BRIGHT_MAX 4
  13. #define LP3952_LABEL_MAX_LEN 15
  14. #define LP3952_REG_LED_CTRL 0x00
  15. #define LP3952_REG_R1_BLNK_TIME_CTRL 0x01
  16. #define LP3952_REG_R1_BLNK_CYCLE_CTRL 0x02
  17. #define LP3952_REG_G1_BLNK_TIME_CTRL 0x03
  18. #define LP3952_REG_G1_BLNK_CYCLE_CTRL 0x04
  19. #define LP3952_REG_B1_BLNK_TIME_CTRL 0x05
  20. #define LP3952_REG_B1_BLNK_CYCLE_CTRL 0x06
  21. #define LP3952_REG_ENABLES 0x0B
  22. #define LP3952_REG_PAT_GEN_CTRL 0x11
  23. #define LP3952_REG_RGB1_MAX_I_CTRL 0x12
  24. #define LP3952_REG_RGB2_MAX_I_CTRL 0x13
  25. #define LP3952_REG_CMD_0 0x50
  26. #define LP3952_REG_RESET 0x60
  27. #define REG_MAX LP3952_REG_RESET
  28. #define LP3952_PATRN_LOOP BIT(1)
  29. #define LP3952_PATRN_GEN_EN BIT(2)
  30. #define LP3952_INT_B00ST_LDR BIT(2)
  31. #define LP3952_ACTIVE_MODE BIT(6)
  32. #define LP3952_LED_MASK_ALL 0x3f
  33. /* Transition Time in ms */
  34. enum lp3952_tt {
  35. TT0,
  36. TT55,
  37. TT110,
  38. TT221,
  39. TT422,
  40. TT885,
  41. TT1770,
  42. TT3539
  43. };
  44. /* Command Execution Time in ms */
  45. enum lp3952_cet {
  46. CET197,
  47. CET393,
  48. CET590,
  49. CET786,
  50. CET1180,
  51. CET1376,
  52. CET1573,
  53. CET1769,
  54. CET1966,
  55. CET2163,
  56. CET2359,
  57. CET2556,
  58. CET2763,
  59. CET2949,
  60. CET3146
  61. };
  62. /* Max Current in % */
  63. enum lp3952_colour_I_log_0 {
  64. I0,
  65. I7,
  66. I14,
  67. I21,
  68. I32,
  69. I46,
  70. I71,
  71. I100
  72. };
  73. enum lp3952_leds {
  74. LP3952_BLUE_2,
  75. LP3952_GREEN_2,
  76. LP3952_RED_2,
  77. LP3952_BLUE_1,
  78. LP3952_GREEN_1,
  79. LP3952_RED_1,
  80. LP3952_LED_ALL
  81. };
  82. struct lp3952_ctrl_hdl {
  83. struct led_classdev cdev;
  84. char name[LP3952_LABEL_MAX_LEN];
  85. enum lp3952_leds channel;
  86. void *priv;
  87. };
  88. struct ptrn_gen_cmd {
  89. union {
  90. struct {
  91. u16 tt:3;
  92. u16 b:3;
  93. u16 cet:4;
  94. u16 g:3;
  95. u16 r:3;
  96. };
  97. struct {
  98. u8 lsb;
  99. u8 msb;
  100. } bytes;
  101. };
  102. } __packed;
  103. struct lp3952_led_array {
  104. struct regmap *regmap;
  105. struct i2c_client *client;
  106. struct gpio_desc *enable_gpio;
  107. struct lp3952_ctrl_hdl leds[LP3952_LED_ALL];
  108. };
  109. #endif /* LEDS_LP3952_H_ */