sx9500.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. /*
  2. * Copyright (c) 2014 Intel Corporation
  3. *
  4. * Driver for Semtech's SX9500 capacitive proximity/button solution.
  5. * Datasheet available at
  6. * <http://www.semtech.com/images/datasheet/sx9500.pdf>.
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License version 2 as published by
  10. * the Free Software Foundation.
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/slab.h>
  14. #include <linux/module.h>
  15. #include <linux/i2c.h>
  16. #include <linux/irq.h>
  17. #include <linux/acpi.h>
  18. #include <linux/gpio/consumer.h>
  19. #include <linux/regmap.h>
  20. #include <linux/iio/iio.h>
  21. #include <linux/iio/buffer.h>
  22. #include <linux/iio/sysfs.h>
  23. #include <linux/iio/events.h>
  24. #include <linux/iio/trigger.h>
  25. #include <linux/iio/triggered_buffer.h>
  26. #include <linux/iio/trigger_consumer.h>
  27. #define SX9500_DRIVER_NAME "sx9500"
  28. #define SX9500_IRQ_NAME "sx9500_event"
  29. #define SX9500_GPIO_NAME "sx9500_gpio"
  30. /* Register definitions. */
  31. #define SX9500_REG_IRQ_SRC 0x00
  32. #define SX9500_REG_STAT 0x01
  33. #define SX9500_REG_IRQ_MSK 0x03
  34. #define SX9500_REG_PROX_CTRL0 0x06
  35. #define SX9500_REG_PROX_CTRL1 0x07
  36. #define SX9500_REG_PROX_CTRL2 0x08
  37. #define SX9500_REG_PROX_CTRL3 0x09
  38. #define SX9500_REG_PROX_CTRL4 0x0a
  39. #define SX9500_REG_PROX_CTRL5 0x0b
  40. #define SX9500_REG_PROX_CTRL6 0x0c
  41. #define SX9500_REG_PROX_CTRL7 0x0d
  42. #define SX9500_REG_PROX_CTRL8 0x0e
  43. #define SX9500_REG_SENSOR_SEL 0x20
  44. #define SX9500_REG_USE_MSB 0x21
  45. #define SX9500_REG_USE_LSB 0x22
  46. #define SX9500_REG_AVG_MSB 0x23
  47. #define SX9500_REG_AVG_LSB 0x24
  48. #define SX9500_REG_DIFF_MSB 0x25
  49. #define SX9500_REG_DIFF_LSB 0x26
  50. #define SX9500_REG_OFFSET_MSB 0x27
  51. #define SX9500_REG_OFFSET_LSB 0x28
  52. #define SX9500_REG_RESET 0x7f
  53. /* Write this to REG_RESET to do a soft reset. */
  54. #define SX9500_SOFT_RESET 0xde
  55. #define SX9500_SCAN_PERIOD_MASK GENMASK(6, 4)
  56. #define SX9500_SCAN_PERIOD_SHIFT 4
  57. /*
  58. * These serve for identifying IRQ source in the IRQ_SRC register, and
  59. * also for masking the IRQs in the IRQ_MSK register.
  60. */
  61. #define SX9500_CLOSE_IRQ BIT(6)
  62. #define SX9500_FAR_IRQ BIT(5)
  63. #define SX9500_CONVDONE_IRQ BIT(3)
  64. #define SX9500_PROXSTAT_SHIFT 4
  65. #define SX9500_NUM_CHANNELS 4
  66. struct sx9500_data {
  67. struct mutex mutex;
  68. struct i2c_client *client;
  69. struct iio_trigger *trig;
  70. struct regmap *regmap;
  71. /*
  72. * Last reading of the proximity status for each channel. We
  73. * only send an event to user space when this changes.
  74. */
  75. bool prox_stat[SX9500_NUM_CHANNELS];
  76. bool event_enabled[SX9500_NUM_CHANNELS];
  77. bool trigger_enabled;
  78. u16 *buffer;
  79. };
  80. static const struct iio_event_spec sx9500_events[] = {
  81. {
  82. .type = IIO_EV_TYPE_THRESH,
  83. .dir = IIO_EV_DIR_EITHER,
  84. .mask_separate = BIT(IIO_EV_INFO_ENABLE),
  85. },
  86. };
  87. #define SX9500_CHANNEL(idx) \
  88. { \
  89. .type = IIO_PROXIMITY, \
  90. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  91. .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  92. .indexed = 1, \
  93. .channel = idx, \
  94. .event_spec = sx9500_events, \
  95. .num_event_specs = ARRAY_SIZE(sx9500_events), \
  96. .scan_index = idx, \
  97. .scan_type = { \
  98. .sign = 'u', \
  99. .realbits = 16, \
  100. .storagebits = 16, \
  101. .shift = 0, \
  102. }, \
  103. }
  104. static const struct iio_chan_spec sx9500_channels[] = {
  105. SX9500_CHANNEL(0),
  106. SX9500_CHANNEL(1),
  107. SX9500_CHANNEL(2),
  108. SX9500_CHANNEL(3),
  109. IIO_CHAN_SOFT_TIMESTAMP(4),
  110. };
  111. static const struct {
  112. int val;
  113. int val2;
  114. } sx9500_samp_freq_table[] = {
  115. {33, 333333},
  116. {16, 666666},
  117. {11, 111111},
  118. {8, 333333},
  119. {6, 666666},
  120. {5, 0},
  121. {3, 333333},
  122. {2, 500000},
  123. };
  124. static const struct regmap_range sx9500_writable_reg_ranges[] = {
  125. regmap_reg_range(SX9500_REG_IRQ_MSK, SX9500_REG_IRQ_MSK),
  126. regmap_reg_range(SX9500_REG_PROX_CTRL0, SX9500_REG_PROX_CTRL8),
  127. regmap_reg_range(SX9500_REG_SENSOR_SEL, SX9500_REG_SENSOR_SEL),
  128. regmap_reg_range(SX9500_REG_OFFSET_MSB, SX9500_REG_OFFSET_LSB),
  129. regmap_reg_range(SX9500_REG_RESET, SX9500_REG_RESET),
  130. };
  131. static const struct regmap_access_table sx9500_writeable_regs = {
  132. .yes_ranges = sx9500_writable_reg_ranges,
  133. .n_yes_ranges = ARRAY_SIZE(sx9500_writable_reg_ranges),
  134. };
  135. /*
  136. * All allocated registers are readable, so we just list unallocated
  137. * ones.
  138. */
  139. static const struct regmap_range sx9500_non_readable_reg_ranges[] = {
  140. regmap_reg_range(SX9500_REG_STAT + 1, SX9500_REG_STAT + 1),
  141. regmap_reg_range(SX9500_REG_IRQ_MSK + 1, SX9500_REG_PROX_CTRL0 - 1),
  142. regmap_reg_range(SX9500_REG_PROX_CTRL8 + 1, SX9500_REG_SENSOR_SEL - 1),
  143. regmap_reg_range(SX9500_REG_OFFSET_LSB + 1, SX9500_REG_RESET - 1),
  144. };
  145. static const struct regmap_access_table sx9500_readable_regs = {
  146. .no_ranges = sx9500_non_readable_reg_ranges,
  147. .n_no_ranges = ARRAY_SIZE(sx9500_non_readable_reg_ranges),
  148. };
  149. static const struct regmap_range sx9500_volatile_reg_ranges[] = {
  150. regmap_reg_range(SX9500_REG_IRQ_SRC, SX9500_REG_STAT),
  151. regmap_reg_range(SX9500_REG_USE_MSB, SX9500_REG_OFFSET_LSB),
  152. regmap_reg_range(SX9500_REG_RESET, SX9500_REG_RESET),
  153. };
  154. static const struct regmap_access_table sx9500_volatile_regs = {
  155. .yes_ranges = sx9500_volatile_reg_ranges,
  156. .n_yes_ranges = ARRAY_SIZE(sx9500_volatile_reg_ranges),
  157. };
  158. static const struct regmap_config sx9500_regmap_config = {
  159. .reg_bits = 8,
  160. .val_bits = 8,
  161. .max_register = SX9500_REG_RESET,
  162. .cache_type = REGCACHE_RBTREE,
  163. .wr_table = &sx9500_writeable_regs,
  164. .rd_table = &sx9500_readable_regs,
  165. .volatile_table = &sx9500_volatile_regs,
  166. };
  167. static int sx9500_read_proximity(struct sx9500_data *data,
  168. const struct iio_chan_spec *chan,
  169. int *val)
  170. {
  171. int ret;
  172. __be16 regval;
  173. ret = regmap_write(data->regmap, SX9500_REG_SENSOR_SEL, chan->channel);
  174. if (ret < 0)
  175. return ret;
  176. ret = regmap_bulk_read(data->regmap, SX9500_REG_USE_MSB, &regval, 2);
  177. if (ret < 0)
  178. return ret;
  179. *val = 32767 - (s16)be16_to_cpu(regval);
  180. return IIO_VAL_INT;
  181. }
  182. static int sx9500_read_samp_freq(struct sx9500_data *data,
  183. int *val, int *val2)
  184. {
  185. int ret;
  186. unsigned int regval;
  187. mutex_lock(&data->mutex);
  188. ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, &regval);
  189. mutex_unlock(&data->mutex);
  190. if (ret < 0)
  191. return ret;
  192. regval = (regval & SX9500_SCAN_PERIOD_MASK) >> SX9500_SCAN_PERIOD_SHIFT;
  193. *val = sx9500_samp_freq_table[regval].val;
  194. *val2 = sx9500_samp_freq_table[regval].val2;
  195. return IIO_VAL_INT_PLUS_MICRO;
  196. }
  197. static int sx9500_read_raw(struct iio_dev *indio_dev,
  198. const struct iio_chan_spec *chan,
  199. int *val, int *val2, long mask)
  200. {
  201. struct sx9500_data *data = iio_priv(indio_dev);
  202. int ret;
  203. switch (chan->type) {
  204. case IIO_PROXIMITY:
  205. switch (mask) {
  206. case IIO_CHAN_INFO_RAW:
  207. if (iio_buffer_enabled(indio_dev))
  208. return -EBUSY;
  209. mutex_lock(&data->mutex);
  210. ret = sx9500_read_proximity(data, chan, val);
  211. mutex_unlock(&data->mutex);
  212. return ret;
  213. case IIO_CHAN_INFO_SAMP_FREQ:
  214. return sx9500_read_samp_freq(data, val, val2);
  215. default:
  216. return -EINVAL;
  217. }
  218. default:
  219. return -EINVAL;
  220. }
  221. }
  222. static int sx9500_set_samp_freq(struct sx9500_data *data,
  223. int val, int val2)
  224. {
  225. int i, ret;
  226. for (i = 0; i < ARRAY_SIZE(sx9500_samp_freq_table); i++)
  227. if (val == sx9500_samp_freq_table[i].val &&
  228. val2 == sx9500_samp_freq_table[i].val2)
  229. break;
  230. if (i == ARRAY_SIZE(sx9500_samp_freq_table))
  231. return -EINVAL;
  232. mutex_lock(&data->mutex);
  233. ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
  234. SX9500_SCAN_PERIOD_MASK,
  235. i << SX9500_SCAN_PERIOD_SHIFT);
  236. mutex_unlock(&data->mutex);
  237. return ret;
  238. }
  239. static int sx9500_write_raw(struct iio_dev *indio_dev,
  240. const struct iio_chan_spec *chan,
  241. int val, int val2, long mask)
  242. {
  243. struct sx9500_data *data = iio_priv(indio_dev);
  244. switch (chan->type) {
  245. case IIO_PROXIMITY:
  246. switch (mask) {
  247. case IIO_CHAN_INFO_SAMP_FREQ:
  248. return sx9500_set_samp_freq(data, val, val2);
  249. default:
  250. return -EINVAL;
  251. }
  252. default:
  253. return -EINVAL;
  254. }
  255. }
  256. static irqreturn_t sx9500_irq_handler(int irq, void *private)
  257. {
  258. struct iio_dev *indio_dev = private;
  259. struct sx9500_data *data = iio_priv(indio_dev);
  260. if (data->trigger_enabled)
  261. iio_trigger_poll(data->trig);
  262. /*
  263. * Even if no event is enabled, we need to wake the thread to
  264. * clear the interrupt state by reading SX9500_REG_IRQ_SRC. It
  265. * is not possible to do that here because regmap_read takes a
  266. * mutex.
  267. */
  268. return IRQ_WAKE_THREAD;
  269. }
  270. static irqreturn_t sx9500_irq_thread_handler(int irq, void *private)
  271. {
  272. struct iio_dev *indio_dev = private;
  273. struct sx9500_data *data = iio_priv(indio_dev);
  274. int ret;
  275. unsigned int val, chan;
  276. mutex_lock(&data->mutex);
  277. ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val);
  278. if (ret < 0) {
  279. dev_err(&data->client->dev, "i2c transfer error in irq\n");
  280. goto out;
  281. }
  282. if (!(val & (SX9500_CLOSE_IRQ | SX9500_FAR_IRQ)))
  283. goto out;
  284. ret = regmap_read(data->regmap, SX9500_REG_STAT, &val);
  285. if (ret < 0) {
  286. dev_err(&data->client->dev, "i2c transfer error in irq\n");
  287. goto out;
  288. }
  289. val >>= SX9500_PROXSTAT_SHIFT;
  290. for (chan = 0; chan < SX9500_NUM_CHANNELS; chan++) {
  291. int dir;
  292. u64 ev;
  293. bool new_prox = val & BIT(chan);
  294. if (!data->event_enabled[chan])
  295. continue;
  296. if (new_prox == data->prox_stat[chan])
  297. /* No change on this channel. */
  298. continue;
  299. dir = new_prox ? IIO_EV_DIR_FALLING :
  300. IIO_EV_DIR_RISING;
  301. ev = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY,
  302. chan,
  303. IIO_EV_TYPE_THRESH,
  304. dir);
  305. iio_push_event(indio_dev, ev, iio_get_time_ns());
  306. data->prox_stat[chan] = new_prox;
  307. }
  308. out:
  309. mutex_unlock(&data->mutex);
  310. return IRQ_HANDLED;
  311. }
  312. static int sx9500_read_event_config(struct iio_dev *indio_dev,
  313. const struct iio_chan_spec *chan,
  314. enum iio_event_type type,
  315. enum iio_event_direction dir)
  316. {
  317. struct sx9500_data *data = iio_priv(indio_dev);
  318. if (chan->type != IIO_PROXIMITY || type != IIO_EV_TYPE_THRESH ||
  319. dir != IIO_EV_DIR_EITHER)
  320. return -EINVAL;
  321. return data->event_enabled[chan->channel];
  322. }
  323. static int sx9500_write_event_config(struct iio_dev *indio_dev,
  324. const struct iio_chan_spec *chan,
  325. enum iio_event_type type,
  326. enum iio_event_direction dir,
  327. int state)
  328. {
  329. struct sx9500_data *data = iio_priv(indio_dev);
  330. int ret, i;
  331. bool any_active = false;
  332. unsigned int irqmask;
  333. if (chan->type != IIO_PROXIMITY || type != IIO_EV_TYPE_THRESH ||
  334. dir != IIO_EV_DIR_EITHER)
  335. return -EINVAL;
  336. mutex_lock(&data->mutex);
  337. data->event_enabled[chan->channel] = state;
  338. for (i = 0; i < SX9500_NUM_CHANNELS; i++)
  339. if (data->event_enabled[i]) {
  340. any_active = true;
  341. break;
  342. }
  343. irqmask = SX9500_CLOSE_IRQ | SX9500_FAR_IRQ;
  344. if (any_active)
  345. ret = regmap_update_bits(data->regmap, SX9500_REG_IRQ_MSK,
  346. irqmask, irqmask);
  347. else
  348. ret = regmap_update_bits(data->regmap, SX9500_REG_IRQ_MSK,
  349. irqmask, 0);
  350. mutex_unlock(&data->mutex);
  351. return ret;
  352. }
  353. static int sx9500_update_scan_mode(struct iio_dev *indio_dev,
  354. const unsigned long *scan_mask)
  355. {
  356. struct sx9500_data *data = iio_priv(indio_dev);
  357. mutex_lock(&data->mutex);
  358. kfree(data->buffer);
  359. data->buffer = kzalloc(indio_dev->scan_bytes, GFP_KERNEL);
  360. mutex_unlock(&data->mutex);
  361. if (data->buffer == NULL)
  362. return -ENOMEM;
  363. return 0;
  364. }
  365. static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
  366. "2.500000 3.333333 5 6.666666 8.333333 11.111111 16.666666 33.333333");
  367. static struct attribute *sx9500_attributes[] = {
  368. &iio_const_attr_sampling_frequency_available.dev_attr.attr,
  369. NULL,
  370. };
  371. static const struct attribute_group sx9500_attribute_group = {
  372. .attrs = sx9500_attributes,
  373. };
  374. static const struct iio_info sx9500_info = {
  375. .driver_module = THIS_MODULE,
  376. .attrs = &sx9500_attribute_group,
  377. .read_raw = &sx9500_read_raw,
  378. .write_raw = &sx9500_write_raw,
  379. .read_event_config = &sx9500_read_event_config,
  380. .write_event_config = &sx9500_write_event_config,
  381. .update_scan_mode = &sx9500_update_scan_mode,
  382. };
  383. static int sx9500_set_trigger_state(struct iio_trigger *trig,
  384. bool state)
  385. {
  386. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  387. struct sx9500_data *data = iio_priv(indio_dev);
  388. int ret;
  389. mutex_lock(&data->mutex);
  390. ret = regmap_update_bits(data->regmap, SX9500_REG_IRQ_MSK,
  391. SX9500_CONVDONE_IRQ,
  392. state ? SX9500_CONVDONE_IRQ : 0);
  393. if (ret == 0)
  394. data->trigger_enabled = state;
  395. mutex_unlock(&data->mutex);
  396. return ret;
  397. }
  398. static const struct iio_trigger_ops sx9500_trigger_ops = {
  399. .set_trigger_state = sx9500_set_trigger_state,
  400. .owner = THIS_MODULE,
  401. };
  402. static irqreturn_t sx9500_trigger_handler(int irq, void *private)
  403. {
  404. struct iio_poll_func *pf = private;
  405. struct iio_dev *indio_dev = pf->indio_dev;
  406. struct sx9500_data *data = iio_priv(indio_dev);
  407. int val, bit, ret, i = 0;
  408. mutex_lock(&data->mutex);
  409. for_each_set_bit(bit, indio_dev->active_scan_mask,
  410. indio_dev->masklength) {
  411. ret = sx9500_read_proximity(data, &indio_dev->channels[bit],
  412. &val);
  413. if (ret < 0)
  414. goto out;
  415. data->buffer[i++] = val;
  416. }
  417. iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
  418. iio_get_time_ns());
  419. out:
  420. mutex_unlock(&data->mutex);
  421. iio_trigger_notify_done(indio_dev->trig);
  422. return IRQ_HANDLED;
  423. }
  424. struct sx9500_reg_default {
  425. u8 reg;
  426. u8 def;
  427. };
  428. static const struct sx9500_reg_default sx9500_default_regs[] = {
  429. {
  430. .reg = SX9500_REG_PROX_CTRL1,
  431. /* Shield enabled, small range. */
  432. .def = 0x43,
  433. },
  434. {
  435. .reg = SX9500_REG_PROX_CTRL2,
  436. /* x8 gain, 167kHz frequency, finest resolution. */
  437. .def = 0x77,
  438. },
  439. {
  440. .reg = SX9500_REG_PROX_CTRL3,
  441. /* Doze enabled, 2x scan period doze, no raw filter. */
  442. .def = 0x40,
  443. },
  444. {
  445. .reg = SX9500_REG_PROX_CTRL4,
  446. /* Average threshold. */
  447. .def = 0x30,
  448. },
  449. {
  450. .reg = SX9500_REG_PROX_CTRL5,
  451. /*
  452. * Debouncer off, lowest average negative filter,
  453. * highest average postive filter.
  454. */
  455. .def = 0x0f,
  456. },
  457. {
  458. .reg = SX9500_REG_PROX_CTRL6,
  459. /* Proximity detection threshold: 280 */
  460. .def = 0x0e,
  461. },
  462. {
  463. .reg = SX9500_REG_PROX_CTRL7,
  464. /*
  465. * No automatic compensation, compensate each pin
  466. * independently, proximity hysteresis: 32, close
  467. * debouncer off, far debouncer off.
  468. */
  469. .def = 0x00,
  470. },
  471. {
  472. .reg = SX9500_REG_PROX_CTRL8,
  473. /* No stuck timeout, no periodic compensation. */
  474. .def = 0x00,
  475. },
  476. {
  477. .reg = SX9500_REG_PROX_CTRL0,
  478. /* Scan period: 30ms, all sensors enabled. */
  479. .def = 0x0f,
  480. },
  481. };
  482. static int sx9500_init_device(struct iio_dev *indio_dev)
  483. {
  484. struct sx9500_data *data = iio_priv(indio_dev);
  485. int ret, i;
  486. unsigned int val;
  487. ret = regmap_write(data->regmap, SX9500_REG_IRQ_MSK, 0);
  488. if (ret < 0)
  489. return ret;
  490. ret = regmap_write(data->regmap, SX9500_REG_RESET,
  491. SX9500_SOFT_RESET);
  492. if (ret < 0)
  493. return ret;
  494. ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val);
  495. if (ret < 0)
  496. return ret;
  497. for (i = 0; i < ARRAY_SIZE(sx9500_default_regs); i++) {
  498. ret = regmap_write(data->regmap,
  499. sx9500_default_regs[i].reg,
  500. sx9500_default_regs[i].def);
  501. if (ret < 0)
  502. return ret;
  503. }
  504. return 0;
  505. }
  506. static int sx9500_gpio_probe(struct i2c_client *client,
  507. struct sx9500_data *data)
  508. {
  509. struct device *dev;
  510. struct gpio_desc *gpio;
  511. int ret;
  512. if (!client)
  513. return -EINVAL;
  514. dev = &client->dev;
  515. /* data ready gpio interrupt pin */
  516. gpio = devm_gpiod_get_index(dev, SX9500_GPIO_NAME, 0, GPIOD_IN);
  517. if (IS_ERR(gpio)) {
  518. dev_err(dev, "acpi gpio get index failed\n");
  519. return PTR_ERR(gpio);
  520. }
  521. ret = gpiod_to_irq(gpio);
  522. dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
  523. return ret;
  524. }
  525. static int sx9500_probe(struct i2c_client *client,
  526. const struct i2c_device_id *id)
  527. {
  528. int ret;
  529. struct iio_dev *indio_dev;
  530. struct sx9500_data *data;
  531. indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
  532. if (indio_dev == NULL)
  533. return -ENOMEM;
  534. data = iio_priv(indio_dev);
  535. data->client = client;
  536. mutex_init(&data->mutex);
  537. data->trigger_enabled = false;
  538. data->regmap = devm_regmap_init_i2c(client, &sx9500_regmap_config);
  539. if (IS_ERR(data->regmap))
  540. return PTR_ERR(data->regmap);
  541. sx9500_init_device(indio_dev);
  542. indio_dev->dev.parent = &client->dev;
  543. indio_dev->name = SX9500_DRIVER_NAME;
  544. indio_dev->channels = sx9500_channels;
  545. indio_dev->num_channels = ARRAY_SIZE(sx9500_channels);
  546. indio_dev->info = &sx9500_info;
  547. indio_dev->modes = INDIO_DIRECT_MODE;
  548. i2c_set_clientdata(client, indio_dev);
  549. if (client->irq <= 0)
  550. client->irq = sx9500_gpio_probe(client, data);
  551. if (client->irq > 0) {
  552. ret = devm_request_threaded_irq(&client->dev, client->irq,
  553. sx9500_irq_handler, sx9500_irq_thread_handler,
  554. IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
  555. SX9500_IRQ_NAME, indio_dev);
  556. if (ret < 0)
  557. return ret;
  558. data->trig = devm_iio_trigger_alloc(&client->dev,
  559. "%s-dev%d", indio_dev->name, indio_dev->id);
  560. if (!data->trig)
  561. return -ENOMEM;
  562. data->trig->dev.parent = &client->dev;
  563. data->trig->ops = &sx9500_trigger_ops;
  564. iio_trigger_set_drvdata(data->trig, indio_dev);
  565. ret = iio_trigger_register(data->trig);
  566. if (ret)
  567. return ret;
  568. }
  569. ret = iio_triggered_buffer_setup(indio_dev, NULL,
  570. sx9500_trigger_handler, NULL);
  571. if (ret < 0)
  572. goto out_trigger_unregister;
  573. ret = iio_device_register(indio_dev);
  574. if (ret < 0)
  575. goto out_buffer_cleanup;
  576. return 0;
  577. out_buffer_cleanup:
  578. iio_triggered_buffer_cleanup(indio_dev);
  579. out_trigger_unregister:
  580. if (client->irq > 0)
  581. iio_trigger_unregister(data->trig);
  582. return ret;
  583. }
  584. static int sx9500_remove(struct i2c_client *client)
  585. {
  586. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  587. struct sx9500_data *data = iio_priv(indio_dev);
  588. iio_device_unregister(indio_dev);
  589. iio_triggered_buffer_cleanup(indio_dev);
  590. if (client->irq > 0)
  591. iio_trigger_unregister(data->trig);
  592. kfree(data->buffer);
  593. return 0;
  594. }
  595. static const struct acpi_device_id sx9500_acpi_match[] = {
  596. {"SSX9500", 0},
  597. { },
  598. };
  599. MODULE_DEVICE_TABLE(acpi, sx9500_acpi_match);
  600. static const struct i2c_device_id sx9500_id[] = {
  601. {"sx9500", 0},
  602. {}
  603. };
  604. MODULE_DEVICE_TABLE(i2c, sx9500_id);
  605. static struct i2c_driver sx9500_driver = {
  606. .driver = {
  607. .name = SX9500_DRIVER_NAME,
  608. .acpi_match_table = ACPI_PTR(sx9500_acpi_match),
  609. },
  610. .probe = sx9500_probe,
  611. .remove = sx9500_remove,
  612. .id_table = sx9500_id,
  613. };
  614. module_i2c_driver(sx9500_driver);
  615. MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
  616. MODULE_DESCRIPTION("Driver for Semtech SX9500 proximity sensor");
  617. MODULE_LICENSE("GPL v2");