qpnp-vibrator.c 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /* Copyright (c) 2013, 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. #include <linux/module.h>
  13. #include <linux/init.h>
  14. #include <linux/kernel.h>
  15. #include <linux/errno.h>
  16. #include <linux/slab.h>
  17. #include <linux/hrtimer.h>
  18. #include <linux/of_device.h>
  19. #include <linux/spmi.h>
  20. #include <linux/qpnp/vibrator.h>
  21. #include "../../staging/android/timed_output.h"
  22. #define QPNP_VIB_VTG_CTL(base) (base + 0x41)
  23. #define QPNP_VIB_EN_CTL(base) (base + 0x46)
  24. #define QPNP_VIB_MAX_LEVEL 31
  25. #define QPNP_VIB_MIN_LEVEL 12
  26. #define QPNP_VIB_DEFAULT_TIMEOUT 15000
  27. #define QPNP_VIB_DEFAULT_VTG_LVL 3100
  28. #define QPNP_VIB_EN BIT(7)
  29. #define QPNP_VIB_VTG_SET_MASK 0x1F
  30. #define QPNP_VIB_LOGIC_SHIFT 4
  31. struct qpnp_vib {
  32. struct spmi_device *spmi;
  33. struct hrtimer vib_timer;
  34. struct timed_output_dev timed_dev;
  35. u8 reg_vtg_ctl;
  36. u8 reg_en_ctl;
  37. u16 base;
  38. int state;
  39. int vtg_level;
  40. int timeout;
  41. struct mutex lock;
  42. };
  43. static struct qpnp_vib *vib_dev;
  44. static int qpnp_vib_read_u8(struct qpnp_vib *vib, u8 *data, u16 reg)
  45. {
  46. int rc;
  47. rc = spmi_ext_register_readl(vib->spmi->ctrl, vib->spmi->sid,
  48. reg, data, 1);
  49. if (rc < 0)
  50. dev_err(&vib->spmi->dev,
  51. "Error reading address: %X - ret %X\n", reg, rc);
  52. return rc;
  53. }
  54. static int qpnp_vib_write_u8(struct qpnp_vib *vib, u8 *data, u16 reg)
  55. {
  56. int rc;
  57. rc = spmi_ext_register_writel(vib->spmi->ctrl, vib->spmi->sid,
  58. reg, data, 1);
  59. if (rc < 0)
  60. dev_err(&vib->spmi->dev,
  61. "Error writing address: %X - ret %X\n", reg, rc);
  62. return rc;
  63. }
  64. int qpnp_vibrator_config(struct qpnp_vib_config *vib_cfg)
  65. {
  66. u8 reg = 0;
  67. int rc = -EINVAL, level;
  68. if (vib_dev == NULL) {
  69. pr_err("%s: vib_dev is NULL\n", __func__);
  70. return -ENODEV;
  71. }
  72. level = vib_cfg->drive_mV / 100;
  73. if (level) {
  74. if ((level < QPNP_VIB_MIN_LEVEL) ||
  75. (level > QPNP_VIB_MAX_LEVEL)) {
  76. dev_err(&vib_dev->spmi->dev, "Invalid voltage level\n");
  77. return -EINVAL;
  78. }
  79. } else {
  80. dev_err(&vib_dev->spmi->dev, "Voltage level not specified\n");
  81. return -EINVAL;
  82. }
  83. /* Configure the VTG CTL regiser */
  84. reg = vib_dev->reg_vtg_ctl;
  85. reg &= ~QPNP_VIB_VTG_SET_MASK;
  86. reg |= (level & QPNP_VIB_VTG_SET_MASK);
  87. rc = qpnp_vib_write_u8(vib_dev, &reg, QPNP_VIB_VTG_CTL(vib_dev->base));
  88. if (rc)
  89. return rc;
  90. vib_dev->reg_vtg_ctl = reg;
  91. /* Configure the VIB ENABLE regiser */
  92. reg = vib_dev->reg_en_ctl;
  93. reg |= (!!vib_cfg->active_low) << QPNP_VIB_LOGIC_SHIFT;
  94. if (vib_cfg->enable_mode == QPNP_VIB_MANUAL)
  95. reg |= QPNP_VIB_EN;
  96. else
  97. reg |= BIT(vib_cfg->enable_mode - 1);
  98. rc = qpnp_vib_write_u8(vib_dev, &reg, QPNP_VIB_EN_CTL(vib_dev->base));
  99. if (rc < 0)
  100. return rc;
  101. vib_dev->reg_en_ctl = reg;
  102. return rc;
  103. }
  104. EXPORT_SYMBOL(qpnp_vibrator_config);
  105. static int qpnp_vib_set(struct qpnp_vib *vib, int on)
  106. {
  107. int rc;
  108. u8 val;
  109. if (on) {
  110. val = vib->reg_vtg_ctl;
  111. val &= ~QPNP_VIB_VTG_SET_MASK;
  112. val |= (vib->vtg_level & QPNP_VIB_VTG_SET_MASK);
  113. rc = qpnp_vib_write_u8(vib, &val, QPNP_VIB_VTG_CTL(vib->base));
  114. if (rc < 0)
  115. return rc;
  116. vib->reg_vtg_ctl = val;
  117. val = vib->reg_en_ctl;
  118. val |= QPNP_VIB_EN;
  119. rc = qpnp_vib_write_u8(vib, &val, QPNP_VIB_EN_CTL(vib->base));
  120. if (rc < 0)
  121. return rc;
  122. vib->reg_en_ctl = val;
  123. } else {
  124. val = vib->reg_en_ctl;
  125. val &= ~QPNP_VIB_EN;
  126. rc = qpnp_vib_write_u8(vib, &val, QPNP_VIB_EN_CTL(vib->base));
  127. if (rc < 0)
  128. return rc;
  129. vib->reg_en_ctl = val;
  130. }
  131. return rc;
  132. }
  133. static void qpnp_vib_enable(struct timed_output_dev *dev, int value)
  134. {
  135. struct qpnp_vib *vib = container_of(dev, struct qpnp_vib,
  136. timed_dev);
  137. mutex_lock(&vib->lock);
  138. hrtimer_cancel(&vib->vib_timer);
  139. if (value == 0)
  140. vib->state = 0;
  141. else {
  142. value = (value > vib->timeout ?
  143. vib->timeout : value);
  144. vib->state = 1;
  145. hrtimer_start(&vib->vib_timer,
  146. ktime_set(value / 1000, (value % 1000) * 1000000),
  147. HRTIMER_MODE_REL);
  148. }
  149. mutex_unlock(&vib->lock);
  150. schedule_work(&vib->work);
  151. }
  152. static int qpnp_vib_get_time(struct timed_output_dev *dev)
  153. {
  154. struct qpnp_vib *vib = container_of(dev, struct qpnp_vib,
  155. timed_dev);
  156. if (hrtimer_active(&vib->vib_timer)) {
  157. ktime_t r = hrtimer_get_remaining(&vib->vib_timer);
  158. return (int)ktime_to_us(r);
  159. } else
  160. return 0;
  161. }
  162. static enum hrtimer_restart qpnp_vib_timer_func(struct hrtimer *timer)
  163. {
  164. struct qpnp_vib *vib = container_of(timer, struct qpnp_vib,
  165. vib_timer);
  166. vib->state = 0;
  167. schedule_work(&vib->work);
  168. return HRTIMER_NORESTART;
  169. }
  170. #ifdef CONFIG_PM
  171. static int qpnp_vibrator_suspend(struct device *dev)
  172. {
  173. struct qpnp_vib *vib = dev_get_drvdata(dev);
  174. hrtimer_cancel(&vib->vib_timer);
  175. /* turn-off vibrator */
  176. qpnp_vib_set(vib, 0);
  177. return 0;
  178. }
  179. #endif
  180. static SIMPLE_DEV_PM_OPS(qpnp_vibrator_pm_ops, qpnp_vibrator_suspend, NULL);
  181. static int __devinit qpnp_vibrator_probe(struct spmi_device *spmi)
  182. {
  183. struct qpnp_vib *vib;
  184. struct resource *vib_resource;
  185. int rc;
  186. u8 val;
  187. u32 temp_val;
  188. vib = devm_kzalloc(&spmi->dev, sizeof(*vib), GFP_KERNEL);
  189. if (!vib)
  190. return -ENOMEM;
  191. vib->spmi = spmi;
  192. vib->timeout = QPNP_VIB_DEFAULT_TIMEOUT;
  193. rc = of_property_read_u32(spmi->dev.of_node,
  194. "qcom,vib-timeout-ms", &temp_val);
  195. if (!rc) {
  196. vib->timeout = temp_val;
  197. } else if (rc != EINVAL) {
  198. dev_err(&spmi->dev, "Unable to read vib timeout\n");
  199. return rc;
  200. }
  201. vib->vtg_level = QPNP_VIB_DEFAULT_VTG_LVL;
  202. rc = of_property_read_u32(spmi->dev.of_node,
  203. "qcom,vib-vtg-level-mV", &temp_val);
  204. if (!rc) {
  205. vib->vtg_level = temp_val;
  206. } else if (rc != -EINVAL) {
  207. dev_err(&spmi->dev, "Unable to read vtg level\n");
  208. return rc;
  209. }
  210. vib->vtg_level /= 100;
  211. vib_resource = spmi_get_resource(spmi, 0, IORESOURCE_MEM, 0);
  212. if (!vib_resource) {
  213. dev_err(&spmi->dev, "Unable to get vibrator base address\n");
  214. return -EINVAL;
  215. }
  216. vib->base = vib_resource->start;
  217. /* save the control registers values */
  218. rc = qpnp_vib_read_u8(vib, &val, QPNP_VIB_VTG_CTL(vib->base));
  219. if (rc < 0)
  220. return rc;
  221. vib->reg_vtg_ctl = val;
  222. rc = qpnp_vib_read_u8(vib, &val, QPNP_VIB_EN_CTL(vib->base));
  223. if (rc < 0)
  224. return rc;
  225. vib->reg_en_ctl = val;
  226. mutex_init(&vib->lock);
  227. hrtimer_init(&vib->vib_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  228. vib->vib_timer.function = qpnp_vib_timer_func;
  229. vib->timed_dev.name = "vibrator";
  230. vib->timed_dev.get_time = qpnp_vib_get_time;
  231. vib->timed_dev.enable = qpnp_vib_enable;
  232. dev_set_drvdata(&spmi->dev, vib);
  233. rc = timed_output_dev_register(&vib->timed_dev);
  234. if (rc < 0)
  235. return rc;
  236. vib_dev = vib;
  237. return rc;
  238. }
  239. static int __devexit qpnp_vibrator_remove(struct spmi_device *spmi)
  240. {
  241. struct qpnp_vib *vib = dev_get_drvdata(&spmi->dev);
  242. hrtimer_cancel(&vib->vib_timer);
  243. timed_output_dev_unregister(&vib->timed_dev);
  244. mutex_destroy(&vib->lock);
  245. return 0;
  246. }
  247. static struct of_device_id spmi_match_table[] = {
  248. { .compatible = "qcom,qpnp-vibrator",
  249. },
  250. {}
  251. };
  252. static struct spmi_driver qpnp_vibrator_driver = {
  253. .driver = {
  254. .name = "qcom,qpnp-vibrator",
  255. .of_match_table = spmi_match_table,
  256. .pm = &qpnp_vibrator_pm_ops,
  257. },
  258. .probe = qpnp_vibrator_probe,
  259. .remove = __devexit_p(qpnp_vibrator_remove),
  260. };
  261. static int __init qpnp_vibrator_init(void)
  262. {
  263. return spmi_driver_register(&qpnp_vibrator_driver);
  264. }
  265. module_init(qpnp_vibrator_init);
  266. static void __exit qpnp_vibrator_exit(void)
  267. {
  268. return spmi_driver_unregister(&qpnp_vibrator_driver);
  269. }
  270. module_exit(qpnp_vibrator_exit);
  271. MODULE_DESCRIPTION("qpnp vibrator driver");
  272. MODULE_LICENSE("GPL v2");