isa1200_vibrator.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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 _ISA1200_VIBRATOR_H
  13. #define _ISA1200_VIBRATOR_H
  14. #include <mach/msm_iomap.h>
  15. #define VIBRATION_ON 1
  16. #define VIBRATION_OFF 0
  17. #define HCTRL0 (0x30) /* 0x09 */ /* Haptic Motor Driver Control Register Group 0*/
  18. #define HCTRL1 (0x31) /* 0x4B */ /* Haptic Motor Driver Control Register Group 1*/
  19. #define MAX_INTENSITY 10000
  20. #define GP_CLK_M_DEFAULT 2
  21. #if defined (CONFIG_MACH_MATISSELTE_ATT)
  22. #define GP_CLK_N_DEFAULT 122
  23. #define GP_CLK_D_DEFAULT 61 /* 50% duty cycle */
  24. #else
  25. #if defined CONFIG_MACH_MATISSE3G_OPEN || defined CONFIG_SEC_MATISSELTE_COMMON
  26. #define GP_CLK_N_DEFAULT 99
  27. #define GP_CLK_D_DEFAULT 44 /* 50% duty cycle */
  28. #else
  29. #define GP_CLK_N_DEFAULT 93
  30. #define GP_CLK_D_DEFAULT 47 /* 50% duty cycle */
  31. #endif
  32. #endif//CONFIG_MACH_MATISSELTE_ATT
  33. #define IMM_PWM_MULTIPLIER GP_CLK_N_DEFAULT /* Must be integer */
  34. /*
  35. * ** Global variables for LRA PWM M,N and D values.
  36. * */
  37. #define MOTOR_MIN_STRENGTH 54/*IMMERSION VALUE*/
  38. #define MOTOR_STRENGTH 98/*MOTOR_STRENGTH 98 %*/
  39. int32_t g_nlra_gp_clk_m = GP_CLK_M_DEFAULT;
  40. int32_t g_nlra_gp_clk_n = GP_CLK_N_DEFAULT;
  41. int32_t g_nlra_gp_clk_d = GP_CLK_D_DEFAULT;
  42. int32_t g_nlra_gp_clk_pwm_mul = IMM_PWM_MULTIPLIER;
  43. int32_t motor_strength = MOTOR_STRENGTH;
  44. int32_t motor_min_strength;
  45. #define __inp(port) ioread8(port)
  46. #define __inpw(port) ioread16(port)
  47. #define __inpdw(port) ioread32(port)
  48. #define __outp(port, val) iowrite8(val, port)
  49. #define __outpw(port, val) iowrite16(val, port)
  50. #define __outpdw(port, val) iowrite32(val, port)
  51. #define in_dword(addr) (__inpdw(addr))
  52. #define in_dword_masked(addr, mask) (__inpdw(addr) & (mask))
  53. #define out_dword(addr, val) __outpdw(addr, val)
  54. #define out_dword_masked(io, mask, val, shadow) \
  55. (void) out_dword(io, \
  56. ((shadow & (unsigned int)(~(mask))) | ((unsigned int)((val) & (mask)))))
  57. #define out_dword_masked_ns(io, mask, val, current_reg_content) \
  58. (void) out_dword(io, \
  59. ((current_reg_content & (unsigned int)(~(mask))) \
  60. | ((unsigned int)((val) & (mask)))))
  61. #if !defined(CONFIG_MOTOR_DRV_ISA1400)
  62. static void __iomem *virt_mmss_gp1_base;
  63. #define HWIO_GP1_CMD_RCGR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0)) //MMSS_CC_GP1_CMD_RCGR
  64. #define HWIO_GP1_CFG_RCGR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 4)) //MMSS_CC_GP1_CFG_RCGR
  65. #define HWIO_GP_M_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 8)) //MMSS_CC_GP1_M
  66. #define HWIO_GP_NS_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0xc)) //MMSS_CC_GP1_N
  67. #define HWIO_GP_D_REG_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0x10)) //MMSS_CC_GP1_D
  68. #if defined(CONFIG_MACH_HLTEDCM) || defined(CONFIG_MACH_HLTEKDI) || defined(CONFIG_MACH_JS01LTEDCM)
  69. #define HWIO_CAMSS_GP1_CBCR_ADDR ((void __iomem *)(virt_mmss_gp1_base - 0x4)) //MMSS_CC_CAMSS_GP3_CBCR
  70. #else
  71. #define HWIO_CAMSS_GP1_CBCR_ADDR ((void __iomem *)(virt_mmss_gp1_base + 0x24)) //MMSS_CC_CAMSS_GP1_CBCR
  72. #endif
  73. #define HWIO_GP_MD_REG_RMSK 0xffffffff
  74. #define HWIO_GP_NS_REG_RMSK 0xffffffff
  75. #define HWIO_GP_MD_REG_M_VAL_BMSK 0xff
  76. #define HWIO_GP_MD_REG_M_VAL_SHFT 0
  77. #define HWIO_GP_MD_REG_D_VAL_BMSK 0xff
  78. #define HWIO_GP_MD_REG_D_VAL_SHFT 0
  79. #define HWIO_GP_NS_REG_GP_N_VAL_BMSK 0xff
  80. #define HWIO_GP_SRC_SEL_VAL_BMSK 0x700
  81. #define HWIO_GP_SRC_SEL_VAL_SHFT 8
  82. #define HWIO_GP_SRC_DIV_VAL_BMSK 0x1f
  83. #define HWIO_GP_SRC_DIV_VAL_SHFT 0
  84. #define HWIO_GP_MODE_VAL_BMSK 0x3000
  85. #define HWIO_GP_MODE_VAL_SHFT 12
  86. #define HWIO_CLK_ENABLE_VAL_BMSK 0x1
  87. #define HWIO_CLK_ENABLE_VAL_SHFT 0
  88. #define HWIO_UPDATE_VAL_BMSK 0x1
  89. #define HWIO_UPDATE_VAL_SHFT 0
  90. #define HWIO_ROOT_EN_VAL_BMSK 0x2
  91. #define HWIO_ROOT_EN_VAL_SHFT 1
  92. #define HWIO_GP1_CMD_RCGR_IN \
  93. in_dword_masked(HWIO_GP1_CMD_RCGR_ADDR, HWIO_GP_NS_REG_RMSK)
  94. #define HWIO_GP1_CMD_RCGR_OUTM(m, v) \
  95. out_dword_masked_ns(HWIO_GP1_CMD_RCGR_ADDR, m, v, HWIO_GP1_CMD_RCGR_IN)
  96. #define HWIO_GP1_CFG_RCGR_IN \
  97. in_dword_masked(HWIO_GP1_CFG_RCGR_ADDR, HWIO_GP_NS_REG_RMSK)
  98. #define HWIO_GP1_CFG_RCGR_OUTM(m, v) \
  99. out_dword_masked_ns(HWIO_GP1_CFG_RCGR_ADDR, m, v, HWIO_GP1_CFG_RCGR_IN)
  100. #define HWIO_CAMSS_GP1_CBCR_IN \
  101. in_dword_masked(HWIO_CAMSS_GP1_CBCR_ADDR, HWIO_GP_NS_REG_RMSK)
  102. #define HWIO_CAMSS_GP1_CBCR_OUTM(m, v) \
  103. out_dword_masked_ns(HWIO_CAMSS_GP1_CBCR_ADDR, m, v, HWIO_CAMSS_GP1_CBCR_IN)
  104. #define HWIO_GP_D_REG_IN \
  105. in_dword_masked(HWIO_GP_D_REG_ADDR, HWIO_GP_MD_REG_RMSK)
  106. #define HWIO_GP_D_REG_OUTM(m, v)\
  107. out_dword_masked_ns(HWIO_GP_D_REG_ADDR, m, v, HWIO_GP_D_REG_IN)
  108. #define HWIO_GP_M_REG_IN \
  109. in_dword_masked(HWIO_GP_M_REG_ADDR, HWIO_GP_MD_REG_RMSK)
  110. #define HWIO_GP_M_REG_OUTM(m, v)\
  111. out_dword_masked_ns(HWIO_GP_M_REG_ADDR, m, v, HWIO_GP_M_REG_IN)
  112. #define HWIO_GP_NS_REG_IN \
  113. in_dword_masked(HWIO_GP_NS_REG_ADDR, HWIO_GP_NS_REG_RMSK)
  114. #define HWIO_GP_NS_REG_OUTM(m, v) \
  115. out_dword_masked_ns(HWIO_GP_NS_REG_ADDR, m, v, HWIO_GP_NS_REG_IN)
  116. #define __msmhwio_outm(hwiosym, mask, val) HWIO_##hwiosym##_OUTM(mask, val)
  117. #define HWIO_OUTM(hwiosym, mask, val) __msmhwio_outm(hwiosym, mask, val)
  118. #endif
  119. int vibrator_write_register(u8 addr, u8 w_data);
  120. extern struct vibrator_platform_data_isa1200 vibrator_drvdata;
  121. #endif