leds_sw.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #ifndef _LEDS_SW_H
  2. #define _LEDS_SW_H
  3. /******************************************************************************
  4. * LED & Backlight type defination
  5. *****************************************************************************/
  6. enum mt65xx_led_type {
  7. MT65XX_LED_TYPE_RED = 0,
  8. MT65XX_LED_TYPE_GREEN,
  9. MT65XX_LED_TYPE_BLUE,
  10. MT65XX_LED_TYPE_JOGBALL,
  11. MT65XX_LED_TYPE_KEYBOARD,
  12. MT65XX_LED_TYPE_BUTTON,
  13. MT65XX_LED_TYPE_LCD,
  14. MT65XX_LED_TYPE_TOTAL,
  15. };
  16. enum mt65xx_led_mode {
  17. MT65XX_LED_MODE_NONE,
  18. MT65XX_LED_MODE_PWM,
  19. MT65XX_LED_MODE_GPIO,
  20. MT65XX_LED_MODE_PMIC,
  21. MT65XX_LED_MODE_CUST_LCM,
  22. MT65XX_LED_MODE_CUST_BLS_PWM
  23. };
  24. /******************************************************************************
  25. * for backlight
  26. *****************************************************************************/
  27. /* backlight call back function */
  28. typedef int (*cust_brightness_set) (int level, int div);
  29. typedef int (*cust_set_brightness) (int level);
  30. /* 10bit backlight level */
  31. #define LED_INCREASE_LED_LEVEL_MTKPATCH
  32. #ifdef LED_INCREASE_LED_LEVEL_MTKPATCH
  33. #define MT_LED_INTERNAL_LEVEL_BIT_CNT 10
  34. #endif
  35. /******************************************************************************
  36. * for PMIC
  37. *****************************************************************************/
  38. enum mt65xx_led_pmic {
  39. MT65XX_LED_PMIC_LCD_ISINK = 0,
  40. MT65XX_LED_PMIC_NLED_ISINK0,
  41. MT65XX_LED_PMIC_NLED_ISINK1,
  42. MT65XX_LED_PMIC_NLED_ISINK2,
  43. MT65XX_LED_PMIC_NLED_ISINK3
  44. };
  45. enum MT65XX_PMIC_ISINK_MODE {
  46. ISINK_PWM_MODE = 0,
  47. ISINK_BREATH_MODE = 1,
  48. ISINK_REGISTER_MODE = 2
  49. };
  50. enum MT65XX_PMIC_ISINK_STEP {
  51. ISINK_0 = 0, /* 4mA */
  52. ISINK_1 = 1, /* 8mA */
  53. ISINK_2 = 2, /* 12mA */
  54. ISINK_3 = 3, /* 16mA */
  55. ISINK_4 = 4, /* 20mA */
  56. ISINK_5 = 5 /* 24mA */
  57. };
  58. enum MT65XX_PMIC_ISINK_FSEL {
  59. /* 32K clock */
  60. ISINK_1KHZ = 0,
  61. ISINK_200HZ = 4,
  62. ISINK_5HZ = 199,
  63. ISINK_2HZ = 499,
  64. ISINK_1HZ = 999,
  65. ISINK_05HZ = 1999,
  66. ISINK_02HZ = 4999,
  67. ISINK_01HZ = 9999,
  68. /* 2M clock */
  69. ISINK_2M_20KHZ = 2,
  70. ISINK_2M_1KHZ = 61,
  71. ISINK_2M_200HZ = 311,
  72. ISINK_2M_5HZ = 12499,
  73. ISINK_2M_2HZ = 31249,
  74. ISINK_2M_1HZ = 62499
  75. };
  76. /******************************************************************************
  77. * for PWM
  78. *****************************************************************************/
  79. #define MIN_FRE_OLD_PWM 32 /* the min frequence when use old mode pwm by kHz */
  80. #define BACKLIGHT_LEVEL_PWM_64_FIFO_MODE_SUPPORT 64
  81. #define BACKLIGHT_LEVEL_PWM_256_SUPPORT 256
  82. #define BACKLIGHT_LEVEL_PWM_MODE_CONFIG BACKLIGHT_LEVEL_PWM_256_SUPPORT
  83. static inline unsigned int Cust_GetBacklightLevelSupport_byPWM(void)
  84. {
  85. return BACKLIGHT_LEVEL_PWM_MODE_CONFIG;
  86. }
  87. static inline unsigned int brightness_mapping(unsigned int level)
  88. {
  89. unsigned int mapped_level;
  90. mapped_level = level;
  91. return mapped_level;
  92. }
  93. struct PWM_config {
  94. int clock_source;
  95. int div;
  96. int low_duration;
  97. int High_duration;
  98. bool pmic_pad;
  99. };
  100. /****************************************************************************
  101. * sw data structures
  102. ***************************************************************************/
  103. /**
  104. * led customization data structure
  105. * name : must the same as lights HAL
  106. * mode : control mode
  107. * data :
  108. * PWM: pwm number
  109. * GPIO: gpio id
  110. * PMIC: enum mt65xx_led_pmic
  111. * CUST: custom set brightness function pointer
  112. * config_data: pwm config data
  113. */
  114. struct cust_mt65xx_led {
  115. char *name;
  116. enum mt65xx_led_mode mode;
  117. long data;
  118. struct PWM_config config_data;
  119. };
  120. /**
  121. * led device node structure with mtk extentions
  122. * cdev: common led device structure
  123. * cust: customization data from device tree
  124. * work: workqueue for specialfied led device
  125. * level: brightness level
  126. * delay_on: on time if led is blinking
  127. * delay_off: off time if led is blinking
  128. */
  129. struct mt65xx_led_data {
  130. struct led_classdev cdev;
  131. struct cust_mt65xx_led cust;
  132. struct work_struct work;
  133. int level;
  134. int delay_on;
  135. int delay_off;
  136. };
  137. /**
  138. * LED Variable Settings
  139. * nled_mode: 0, off; 1, on; 2, blink
  140. * blink_on_time: on time if led is blinking
  141. * blink_off_time: off time if led is blinking
  142. */
  143. #define NLED_OFF 0
  144. #define NLED_ON 1
  145. #define NLED_BLINK 2
  146. struct nled_setting {
  147. u8 nled_mode;
  148. u32 blink_on_time;
  149. u32 blink_off_time;
  150. };
  151. #endif /* _LEDS_SW_H */