qt1070.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Atmel AT42QT1070 QTouch Sensor Controller
  4. *
  5. * Copyright (C) 2011 Atmel
  6. *
  7. * Authors: Bo Shen <voice.shen@atmel.com>
  8. *
  9. * Base on AT42QT2160 driver by:
  10. * Raphael Derosso Pereira <raphaelpereira@gmail.com>
  11. * Copyright (C) 2009
  12. */
  13. #include <linux/kernel.h>
  14. #include <linux/module.h>
  15. #include <linux/i2c.h>
  16. #include <linux/input.h>
  17. #include <linux/slab.h>
  18. #include <linux/irq.h>
  19. #include <linux/interrupt.h>
  20. #include <linux/jiffies.h>
  21. #include <linux/delay.h>
  22. /* Address for each register */
  23. #define CHIP_ID 0x00
  24. #define QT1070_CHIP_ID 0x2E
  25. #define FW_VERSION 0x01
  26. #define QT1070_FW_VERSION 0x15
  27. #define DET_STATUS 0x02
  28. #define KEY_STATUS 0x03
  29. /* Calibrate */
  30. #define CALIBRATE_CMD 0x38
  31. #define QT1070_CAL_TIME 200
  32. /* Reset */
  33. #define RESET 0x39
  34. #define QT1070_RESET_TIME 255
  35. /* AT42QT1070 support up to 7 keys */
  36. static const unsigned short qt1070_key2code[] = {
  37. KEY_0, KEY_1, KEY_2, KEY_3,
  38. KEY_4, KEY_5, KEY_6,
  39. };
  40. struct qt1070_data {
  41. struct i2c_client *client;
  42. struct input_dev *input;
  43. unsigned int irq;
  44. unsigned short keycodes[ARRAY_SIZE(qt1070_key2code)];
  45. u8 last_keys;
  46. };
  47. static int qt1070_read(struct i2c_client *client, u8 reg)
  48. {
  49. int ret;
  50. ret = i2c_smbus_read_byte_data(client, reg);
  51. if (ret < 0)
  52. dev_err(&client->dev,
  53. "can not read register, returned %d\n", ret);
  54. return ret;
  55. }
  56. static int qt1070_write(struct i2c_client *client, u8 reg, u8 data)
  57. {
  58. int ret;
  59. ret = i2c_smbus_write_byte_data(client, reg, data);
  60. if (ret < 0)
  61. dev_err(&client->dev,
  62. "can not write register, returned %d\n", ret);
  63. return ret;
  64. }
  65. static bool qt1070_identify(struct i2c_client *client)
  66. {
  67. int id, ver;
  68. /* Read Chip ID */
  69. id = qt1070_read(client, CHIP_ID);
  70. if (id != QT1070_CHIP_ID) {
  71. dev_err(&client->dev, "ID %d not supported\n", id);
  72. return false;
  73. }
  74. /* Read firmware version */
  75. ver = qt1070_read(client, FW_VERSION);
  76. if (ver < 0) {
  77. dev_err(&client->dev, "could not read the firmware version\n");
  78. return false;
  79. }
  80. dev_info(&client->dev, "AT42QT1070 firmware version %x\n", ver);
  81. return true;
  82. }
  83. static irqreturn_t qt1070_interrupt(int irq, void *dev_id)
  84. {
  85. struct qt1070_data *data = dev_id;
  86. struct i2c_client *client = data->client;
  87. struct input_dev *input = data->input;
  88. int i;
  89. u8 new_keys, keyval, mask = 0x01;
  90. /* Read the detected status register, thus clearing interrupt */
  91. qt1070_read(client, DET_STATUS);
  92. /* Read which key changed */
  93. new_keys = qt1070_read(client, KEY_STATUS);
  94. for (i = 0; i < ARRAY_SIZE(qt1070_key2code); i++) {
  95. keyval = new_keys & mask;
  96. if ((data->last_keys & mask) != keyval)
  97. input_report_key(input, data->keycodes[i], keyval);
  98. mask <<= 1;
  99. }
  100. input_sync(input);
  101. data->last_keys = new_keys;
  102. return IRQ_HANDLED;
  103. }
  104. static int qt1070_probe(struct i2c_client *client)
  105. {
  106. struct qt1070_data *data;
  107. struct input_dev *input;
  108. int i;
  109. int err;
  110. err = i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE);
  111. if (!err) {
  112. dev_err(&client->dev, "%s adapter not supported\n",
  113. dev_driver_string(&client->adapter->dev));
  114. return -ENODEV;
  115. }
  116. if (!client->irq) {
  117. dev_err(&client->dev, "please assign the irq to this device\n");
  118. return -EINVAL;
  119. }
  120. /* Identify the qt1070 chip */
  121. if (!qt1070_identify(client))
  122. return -ENODEV;
  123. data = devm_kzalloc(&client->dev, sizeof(struct qt1070_data),
  124. GFP_KERNEL);
  125. if (!data)
  126. return -ENOMEM;
  127. input = devm_input_allocate_device(&client->dev);
  128. if (!input)
  129. return -ENOMEM;
  130. data->client = client;
  131. data->input = input;
  132. data->irq = client->irq;
  133. input->name = "AT42QT1070 QTouch Sensor";
  134. input->id.bustype = BUS_I2C;
  135. /* Add the keycode */
  136. input->keycode = data->keycodes;
  137. input->keycodesize = sizeof(data->keycodes[0]);
  138. input->keycodemax = ARRAY_SIZE(qt1070_key2code);
  139. __set_bit(EV_KEY, input->evbit);
  140. for (i = 0; i < ARRAY_SIZE(qt1070_key2code); i++) {
  141. data->keycodes[i] = qt1070_key2code[i];
  142. __set_bit(qt1070_key2code[i], input->keybit);
  143. }
  144. /* Calibrate device */
  145. qt1070_write(client, CALIBRATE_CMD, 1);
  146. msleep(QT1070_CAL_TIME);
  147. /* Soft reset */
  148. qt1070_write(client, RESET, 1);
  149. msleep(QT1070_RESET_TIME);
  150. err = devm_request_threaded_irq(&client->dev, client->irq,
  151. NULL, qt1070_interrupt,
  152. IRQF_TRIGGER_NONE | IRQF_ONESHOT,
  153. client->dev.driver->name, data);
  154. if (err) {
  155. dev_err(&client->dev, "fail to request irq\n");
  156. return err;
  157. }
  158. /* Register the input device */
  159. err = input_register_device(data->input);
  160. if (err) {
  161. dev_err(&client->dev, "Failed to register input device\n");
  162. return err;
  163. }
  164. i2c_set_clientdata(client, data);
  165. /* Read to clear the chang line */
  166. qt1070_read(client, DET_STATUS);
  167. return 0;
  168. }
  169. static int qt1070_suspend(struct device *dev)
  170. {
  171. struct i2c_client *client = to_i2c_client(dev);
  172. struct qt1070_data *data = i2c_get_clientdata(client);
  173. if (device_may_wakeup(dev))
  174. enable_irq_wake(data->irq);
  175. return 0;
  176. }
  177. static int qt1070_resume(struct device *dev)
  178. {
  179. struct i2c_client *client = to_i2c_client(dev);
  180. struct qt1070_data *data = i2c_get_clientdata(client);
  181. if (device_may_wakeup(dev))
  182. disable_irq_wake(data->irq);
  183. return 0;
  184. }
  185. static DEFINE_SIMPLE_DEV_PM_OPS(qt1070_pm_ops, qt1070_suspend, qt1070_resume);
  186. static const struct i2c_device_id qt1070_id[] = {
  187. { "qt1070" },
  188. { }
  189. };
  190. MODULE_DEVICE_TABLE(i2c, qt1070_id);
  191. #ifdef CONFIG_OF
  192. static const struct of_device_id qt1070_of_match[] = {
  193. { .compatible = "qt1070", },
  194. { },
  195. };
  196. MODULE_DEVICE_TABLE(of, qt1070_of_match);
  197. #endif
  198. static struct i2c_driver qt1070_driver = {
  199. .driver = {
  200. .name = "qt1070",
  201. .of_match_table = of_match_ptr(qt1070_of_match),
  202. .pm = pm_sleep_ptr(&qt1070_pm_ops),
  203. },
  204. .id_table = qt1070_id,
  205. .probe = qt1070_probe,
  206. };
  207. module_i2c_driver(qt1070_driver);
  208. MODULE_AUTHOR("Bo Shen <voice.shen@atmel.com>");
  209. MODULE_DESCRIPTION("Driver for AT42QT1070 QTouch sensor");
  210. MODULE_LICENSE("GPL");