ss_vibrator.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. /* Copyright (c) 2016, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #ifndef _VIBRATOR_H
  13. #define _VIBRATOR_H
  14. extern struct vibrator_platform_data vibrator_drvdata;
  15. struct pm_gpio vib_pwm = {
  16. .direction = PM_GPIO_DIR_OUT,
  17. .output_buffer = 0,
  18. .output_value = 0,
  19. .pull = PM_GPIO_PULL_NO,
  20. .vin_sel = 0,
  21. .out_strength = PM_GPIO_STRENGTH_HIGH,
  22. .function = PM_GPIO_FUNC_1,
  23. .inv_int_pol = 0,
  24. };
  25. /* Error and Return value codes */
  26. #define VIBRATION_SUCCESS 0 /* Success */
  27. #define VIBRATION_FAIL -1 /* Generic error */
  28. #define VIBRATION_ON 1
  29. #define VIBRATION_OFF 0
  30. #define DEFAULT_INTENSITY 5000
  31. #define MAX_INTENSITY 10000
  32. #if defined(CONFIG_MACH_KS01SKT) \
  33. || defined(CONFIG_MACH_KS01KTT) || defined(CONFIG_MACH_KS01LGT) \
  34. || defined(CONFIG_MACH_JACTIVESKT) || defined(CONFIG_MACH_HLTEDCM) \
  35. || defined(CONFIG_MACH_HLTEKDI)
  36. #define MOTOR_STRENGTH 94/*MOTOR_STRENGTH 94 %*/
  37. #elif defined(CONFIG_MACH_LT03EUR) || defined(CONFIG_MACH_LT03SKT)\
  38. || defined(CONFIG_MACH_LT03KTT) || defined(CONFIG_MACH_LT03LGT)
  39. #define MOTOR_STRENGTH 98/*MOTOR_STRENGTH 98 %*/
  40. #elif defined(CONFIG_MACH_PICASSO_LTE)
  41. #define MOTOR_STRENGTH 91
  42. #elif defined(CONFIG_MACH_HLTEUSC) || defined(CONFIG_MACH_HLTEVZW)
  43. #define MOTOR_STRENGTH 99/*MOTOR_STRENGTH 99 %*/
  44. #elif defined(CONFIG_MACH_KACTIVELTE_KOR)
  45. #define MOTOR_STRENGTH 95/*MOTOR_STRENGTH 95 %*/
  46. #elif defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || defined(CONFIG_SEC_KSPORTS_PROJECT) \
  47. || defined(CONFIG_SEC_PATEK_PROJECT)
  48. #define MOTOR_STRENGTH 98/*MOTOR_STRENGTH 98 %*/
  49. #elif defined(CONFIG_SEC_S_PROJECT)
  50. #define MOTOR_STRENGTH 87/*MOTOR_STRENGTH 87 %*/
  51. #else
  52. #define MOTOR_STRENGTH 98/*MOTOR_STRENGTH 98 %*/
  53. #endif
  54. #if defined (CONFIG_MACH_HLTESPR) || defined (CONFIG_MACH_HLTEEUR) || defined(CONFIG_SEC_LOCALE_KOR_H) || defined (CONFIG_MACH_HLTETMO) || defined(CONFIG_MACH_H3GDUOS) || defined(CONFIG_MACH_HLTEATT)
  55. #define GP_CLK_M_DEFAULT 3
  56. #define GP_CLK_N_DEFAULT 138
  57. #define GP_CLK_D_DEFAULT 69 /* 50% duty cycle */
  58. #define IMM_PWM_MULTIPLIER 137
  59. #elif defined (CONFIG_MACH_HLTEDCM) || defined (CONFIG_MACH_HLTEKDI) || defined (CONFIG_MACH_JS01LTEDCM) || defined (CONFIG_MACH_JS01LTESBM)
  60. #define GP_CLK_M_DEFAULT 2
  61. #define GP_CLK_N_DEFAULT 92
  62. #define GP_CLK_D_DEFAULT 46 /* 50% duty cycle */
  63. #define IMM_PWM_MULTIPLIER 92
  64. #elif defined (CONFIG_MACH_HLTEUSC) || defined(CONFIG_MACH_HLTEVZW)
  65. #define GP_CLK_M_DEFAULT 1
  66. #define GP_CLK_N_DEFAULT 46
  67. #define GP_CLK_D_DEFAULT 23 /* 50% duty cycle */
  68. #define IMM_PWM_MULTIPLIER 46
  69. #elif defined(CONFIG_MACH_FLTESKT)
  70. #define GP_CLK_M_DEFAULT 2
  71. #define GP_CLK_N_DEFAULT 92
  72. #define GP_CLK_D_DEFAULT 46 /* 50% duty cycle */
  73. #define IMM_PWM_MULTIPLIER 92
  74. #elif defined(CONFIG_SEC_K_PROJECT) || defined(CONFIG_SEC_KACTIVE_PROJECT) || defined(CONFIG_SEC_KSPORTS_PROJECT) ||\
  75. defined(CONFIG_SEC_PATEK_PROJECT)
  76. #if defined(CONFIG_MACH_KLTE_MAX77828_JPN)
  77. #define GP_CLK_M_DEFAULT 1
  78. #define GP_CLK_N_DEFAULT 20
  79. #define GP_CLK_D_DEFAULT 10 /* 50% duty cycle */
  80. #define IMM_PWM_MULTIPLIER 20
  81. #else
  82. #define GP_CLK_M_DEFAULT 3
  83. #define GP_CLK_N_DEFAULT 121
  84. #define GP_CLK_D_DEFAULT 61 /* 50% duty cycle */
  85. #define IMM_PWM_MULTIPLIER 121
  86. #endif
  87. #elif defined(CONFIG_SEC_S_PROJECT)
  88. #define GP_CLK_M_DEFAULT 3
  89. #define GP_CLK_N_DEFAULT 121
  90. #define GP_CLK_D_DEFAULT 61 /* 50% duty cycle */
  91. #define IMM_PWM_MULTIPLIER 121
  92. #elif defined(CONFIG_SEC_LOCALE_KOR_FRESCO)
  93. #define GP_CLK_M_DEFAULT 3
  94. #define GP_CLK_N_DEFAULT 120
  95. #define GP_CLK_D_DEFAULT 60 /* 50% duty cycle */
  96. #define IMM_PWM_MULTIPLIER 120
  97. #elif defined(CONFIG_SEC_BERLUTI_PROJECT) || defined(CONFIG_MACH_S3VE3G_EUR)
  98. #define GP_CLK_M_DEFAULT 1
  99. #define GP_CLK_N_DEFAULT 61
  100. #define GP_CLK_D_DEFAULT 31 /* 50% duty cycle */
  101. #define IMM_PWM_MULTIPLIER 61
  102. #elif defined(CONFIG_MACH_HESTIALTE_EUR)
  103. #define GP_CLK_M_DEFAULT 1
  104. #define GP_CLK_N_DEFAULT 40
  105. #define GP_CLK_D_DEFAULT 20
  106. #define IMM_PWM_MULTIPLIER 40
  107. #else
  108. #define GP_CLK_M_DEFAULT 2
  109. #define GP_CLK_N_DEFAULT 91
  110. #define GP_CLK_D_DEFAULT 46 /* 50% duty cycle */
  111. #define IMM_PWM_MULTIPLIER 91
  112. #endif
  113. #define MOTOR_MIN_STRENGTH 54/*IMMERSION VALUE*/
  114. /*
  115. * ** Global variables for LRA PWM M,N and D values.
  116. * */
  117. int32_t g_nlra_gp_clk_m = GP_CLK_M_DEFAULT;
  118. int32_t g_nlra_gp_clk_n = GP_CLK_N_DEFAULT;
  119. int32_t g_nlra_gp_clk_d = GP_CLK_D_DEFAULT;
  120. int32_t g_nlra_gp_clk_pwm_mul = IMM_PWM_MULTIPLIER;
  121. int32_t motor_strength = MOTOR_STRENGTH;
  122. int32_t motor_min_strength;
  123. #define __inp(port) ioread8(port)
  124. #define __inpw(port) ioread16(port)
  125. #define __inpdw(port) ioread32(port)
  126. #define __outp(port, val) iowrite8(val, port)
  127. #define __outpw(port, val) iowrite16(val, port)
  128. #define __outpdw(port, val) iowrite32(val, port)
  129. #define in_dword(addr) (__inpdw(addr))
  130. #define in_dword_masked(addr, mask) (__inpdw(addr) & (mask))
  131. #define out_dword(addr, val) __outpdw(addr, val)
  132. #define out_dword_masked(io, mask, val, shadow) \
  133. (void) out_dword(io, \
  134. ((shadow & (unsigned int)(~(mask))) | ((unsigned int)((val) & (mask)))))
  135. #define out_dword_masked_ns(io, mask, val, current_reg_content) \
  136. (void) out_dword(io, \
  137. ((current_reg_content & (unsigned int)(~(mask))) \
  138. | ((unsigned int)((val) & (mask)))))
  139. #if !defined(CONFIG_MOTOR_DRV_ISA1400)
  140. static void __iomem *virt_mmss_gp1_base;
  141. #define HWIO_GP1_CMD_RCGR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0)) //MMSS_CC_GP1_CMD_RCGR
  142. #define HWIO_GP1_CFG_RCGR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 4)) //MMSS_CC_GP1_CFG_RCGR
  143. #define HWIO_GP_M_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 8)) //MMSS_CC_GP1_M
  144. #define HWIO_GP_NS_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0xc)) //MMSS_CC_GP1_N
  145. #define HWIO_GP_D_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0x10)) //MMSS_CC_GP1_D
  146. #if defined(CONFIG_MACH_HLTEDCM) || defined(CONFIG_MACH_HLTEKDI) || \
  147. defined(CONFIG_MACH_JS01LTEDCM) || defined(CONFIG_MACH_JS01LTESBM)
  148. #define HWIO_CAMSS_GP1_CBCR_ADDR ((void __iomem *)(virt_mmss_gp1_base - 0x4)) //MMSS_CC_CAMSS_GP3_CBCR
  149. #else
  150. #define HWIO_CAMSS_GP1_CBCR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0x24)) //MMSS_CC_CAMSS_GP1_CBCR
  151. #endif
  152. #define HWIO_GP_MD_REG_RMSK 0xffffffff
  153. #define HWIO_GP_NS_REG_RMSK 0xffffffff
  154. #define HWIO_GP_MD_REG_M_VAL_BMSK 0xff
  155. #define HWIO_GP_MD_REG_M_VAL_SHFT 0
  156. #define HWIO_GP_MD_REG_D_VAL_BMSK 0xff
  157. #define HWIO_GP_MD_REG_D_VAL_SHFT 0
  158. #define HWIO_GP_NS_REG_GP_N_VAL_BMSK 0xff
  159. #define HWIO_GP_SRC_SEL_VAL_BMSK 0x700
  160. #define HWIO_GP_SRC_SEL_VAL_SHFT 8
  161. #define HWIO_GP_SRC_DIV_VAL_BMSK 0x1f
  162. #define HWIO_GP_SRC_DIV_VAL_SHFT 0
  163. #define HWIO_GP_MODE_VAL_BMSK 0x3000
  164. #define HWIO_GP_MODE_VAL_SHFT 12
  165. #define HWIO_CLK_ENABLE_VAL_BMSK 0x1
  166. #define HWIO_CLK_ENABLE_VAL_SHFT 0
  167. #define HWIO_UPDATE_VAL_BMSK 0x1
  168. #define HWIO_UPDATE_VAL_SHFT 0
  169. #define HWIO_ROOT_EN_VAL_BMSK 0x2
  170. #define HWIO_ROOT_EN_VAL_SHFT 1
  171. #define HWIO_GP1_CMD_RCGR_IN \
  172. in_dword_masked(HWIO_GP1_CMD_RCGR_ADDR, HWIO_GP_NS_REG_RMSK)
  173. #define HWIO_GP1_CMD_RCGR_OUTM(m, v) \
  174. out_dword_masked_ns(HWIO_GP1_CMD_RCGR_ADDR, m, v, HWIO_GP1_CMD_RCGR_IN)
  175. #define HWIO_GP1_CFG_RCGR_IN \
  176. in_dword_masked(HWIO_GP1_CFG_RCGR_ADDR, HWIO_GP_NS_REG_RMSK)
  177. #define HWIO_GP1_CFG_RCGR_OUTM(m, v) \
  178. out_dword_masked_ns(HWIO_GP1_CFG_RCGR_ADDR, m, v, HWIO_GP1_CFG_RCGR_IN)
  179. #define HWIO_CAMSS_GP1_CBCR_IN \
  180. in_dword_masked(HWIO_CAMSS_GP1_CBCR_ADDR, HWIO_GP_NS_REG_RMSK)
  181. #define HWIO_CAMSS_GP1_CBCR_OUTM(m, v) \
  182. out_dword_masked_ns(HWIO_CAMSS_GP1_CBCR_ADDR, m, v, HWIO_CAMSS_GP1_CBCR_IN)
  183. #define HWIO_GP_D_REG_IN \
  184. in_dword_masked(HWIO_GP_D_REG_ADDR, HWIO_GP_MD_REG_RMSK)
  185. #define HWIO_GP_D_REG_OUTM(m, v)\
  186. out_dword_masked_ns(HWIO_GP_D_REG_ADDR, m, v, HWIO_GP_D_REG_IN)
  187. #define HWIO_GP_M_REG_IN \
  188. in_dword_masked(HWIO_GP_M_REG_ADDR, HWIO_GP_MD_REG_RMSK)
  189. #define HWIO_GP_M_REG_OUTM(m, v)\
  190. out_dword_masked_ns(HWIO_GP_M_REG_ADDR, m, v, HWIO_GP_M_REG_IN)
  191. #define HWIO_GP_NS_REG_IN \
  192. in_dword_masked(HWIO_GP_NS_REG_ADDR, HWIO_GP_NS_REG_RMSK)
  193. #define HWIO_GP_NS_REG_OUTM(m, v) \
  194. out_dword_masked_ns(HWIO_GP_NS_REG_ADDR, m, v, HWIO_GP_NS_REG_IN)
  195. #define __msmhwio_outm(hwiosym, mask, val) HWIO_##hwiosym##_OUTM(mask, val)
  196. #define HWIO_OUTM(hwiosym, mask, val) __msmhwio_outm(hwiosym, mask, val)
  197. int32_t vibe_pwm_onoff(u8 onoff);
  198. int32_t vibe_set_pwm_freq(int intensity);
  199. int vib_config_pwm_device(void);
  200. #endif
  201. #if defined(CONFIG_MOTOR_DRV_MAX77803)
  202. extern void max77803_vibtonz_en(bool en);
  203. #elif defined(CONFIG_MOTOR_DRV_MAX77804K)
  204. extern void max77804k_vibtonz_en(bool en);
  205. #elif defined(CONFIG_MOTOR_DRV_MAX77828)
  206. extern void max77828_vibtonz_en(bool en);
  207. #elif defined(CONFIG_MOTOR_DRV_MAX77888)
  208. void max77888_gpio_en(bool);
  209. void max77888_vibtonz_en(bool);
  210. static int32_t max77888_gpio_init(void);
  211. #elif defined(CONFIG_MOTOR_DRV_DRV2603)
  212. void drv2603_gpio_en(bool);
  213. static int32_t drv2603_gpio_init(void);
  214. #endif
  215. #endif /* _VIBRATOR_H */