rohm-bm1390.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * BM1390 ROHM pressure sensor
  4. *
  5. * Copyright (c) 2023, ROHM Semiconductor.
  6. * https://fscdn.rohm.com/en/products/databook/datasheet/ic/sensor/pressure/bm1390glv-z-e.pdf
  7. */
  8. #include <linux/bitfield.h>
  9. #include <linux/bits.h>
  10. #include <linux/device.h>
  11. #include <linux/i2c.h>
  12. #include <linux/module.h>
  13. #include <linux/regmap.h>
  14. #include <linux/regulator/consumer.h>
  15. #include <linux/iio/iio.h>
  16. #include <linux/iio/trigger.h>
  17. #include <linux/iio/trigger_consumer.h>
  18. #include <linux/iio/triggered_buffer.h>
  19. #define BM1390_REG_MANUFACT_ID 0x0f
  20. #define BM1390_REG_PART_ID 0x10
  21. #define BM1390_REG_POWER 0x12
  22. #define BM1390_MASK_POWER BIT(0)
  23. #define BM1390_POWER_ON BM1390_MASK_POWER
  24. #define BM1390_POWER_OFF 0x00
  25. #define BM1390_REG_RESET 0x13
  26. #define BM1390_MASK_RESET BIT(0)
  27. #define BM1390_RESET_RELEASE BM1390_MASK_RESET
  28. #define BM1390_RESET 0x00
  29. #define BM1390_REG_MODE_CTRL 0x14
  30. #define BM1390_MASK_MEAS_MODE GENMASK(1, 0)
  31. #define BM1390_MASK_DRDY_EN BIT(4)
  32. #define BM1390_MASK_WMI_EN BIT(2)
  33. #define BM1390_MASK_AVE_NUM GENMASK(7, 5)
  34. /*
  35. * Data-sheet states that when the IIR is used, the AVE_NUM must be set to
  36. * value 110b
  37. */
  38. #define BM1390_IIR_AVE_NUM 0x06
  39. #define BM1390_REG_FIFO_CTRL 0x15
  40. #define BM1390_MASK_IIR_MODE GENMASK(1, 0)
  41. #define BM1390_IIR_MODE_OFF 0x0
  42. #define BM1390_IIR_MODE_WEAK 0x1
  43. #define BM1390_IIR_MODE_MID 0x2
  44. #define BM1390_IIR_MODE_STRONG 0x3
  45. #define BM1390_MASK_FIFO_LEN BIT(6)
  46. #define BM1390_MASK_FIFO_EN BIT(7)
  47. #define BM1390_WMI_MIN 2
  48. #define BM1390_WMI_MAX 3
  49. #define BM1390_REG_FIFO_LVL 0x18
  50. #define BM1390_MASK_FIFO_LVL GENMASK(2, 0)
  51. #define BM1390_REG_STATUS 0x19
  52. #define BM1390_REG_PRESSURE_BASE 0x1a
  53. #define BM1390_REG_TEMP_HI 0x1d
  54. #define BM1390_REG_TEMP_LO 0x1e
  55. #define BM1390_MAX_REGISTER BM1390_REG_TEMP_LO
  56. #define BM1390_ID 0x34
  57. /* Regmap configs */
  58. static const struct regmap_range bm1390_volatile_ranges[] = {
  59. {
  60. .range_min = BM1390_REG_STATUS,
  61. .range_max = BM1390_REG_STATUS,
  62. },
  63. {
  64. .range_min = BM1390_REG_FIFO_LVL,
  65. .range_max = BM1390_REG_TEMP_LO,
  66. },
  67. };
  68. static const struct regmap_access_table bm1390_volatile_regs = {
  69. .yes_ranges = &bm1390_volatile_ranges[0],
  70. .n_yes_ranges = ARRAY_SIZE(bm1390_volatile_ranges),
  71. };
  72. static const struct regmap_range bm1390_precious_ranges[] = {
  73. {
  74. .range_min = BM1390_REG_STATUS,
  75. .range_max = BM1390_REG_STATUS,
  76. },
  77. };
  78. static const struct regmap_access_table bm1390_precious_regs = {
  79. .yes_ranges = &bm1390_precious_ranges[0],
  80. .n_yes_ranges = ARRAY_SIZE(bm1390_precious_ranges),
  81. };
  82. static const struct regmap_range bm1390_read_only_ranges[] = {
  83. {
  84. .range_min = BM1390_REG_MANUFACT_ID,
  85. .range_max = BM1390_REG_PART_ID,
  86. }, {
  87. .range_min = BM1390_REG_FIFO_LVL,
  88. .range_max = BM1390_REG_TEMP_LO,
  89. },
  90. };
  91. static const struct regmap_access_table bm1390_ro_regs = {
  92. .no_ranges = &bm1390_read_only_ranges[0],
  93. .n_no_ranges = ARRAY_SIZE(bm1390_read_only_ranges),
  94. };
  95. static const struct regmap_range bm1390_noinc_read_ranges[] = {
  96. {
  97. .range_min = BM1390_REG_PRESSURE_BASE,
  98. .range_max = BM1390_REG_TEMP_LO,
  99. },
  100. };
  101. static const struct regmap_access_table bm1390_nir_regs = {
  102. .yes_ranges = &bm1390_noinc_read_ranges[0],
  103. .n_yes_ranges = ARRAY_SIZE(bm1390_noinc_read_ranges),
  104. };
  105. static const struct regmap_config bm1390_regmap = {
  106. .reg_bits = 8,
  107. .val_bits = 8,
  108. .volatile_table = &bm1390_volatile_regs,
  109. .wr_table = &bm1390_ro_regs,
  110. .rd_noinc_table = &bm1390_nir_regs,
  111. .precious_table = &bm1390_precious_regs,
  112. .max_register = BM1390_MAX_REGISTER,
  113. .cache_type = REGCACHE_RBTREE,
  114. .disable_locking = true,
  115. };
  116. enum {
  117. BM1390_STATE_SAMPLE,
  118. BM1390_STATE_FIFO,
  119. };
  120. struct bm1390_data_buf {
  121. u32 pressure;
  122. __be16 temp;
  123. s64 ts __aligned(8);
  124. };
  125. /* BM1390 has FIFO for 4 pressure samples */
  126. #define BM1390_FIFO_LENGTH 4
  127. struct bm1390_data {
  128. s64 timestamp, old_timestamp;
  129. struct iio_trigger *trig;
  130. struct regmap *regmap;
  131. struct device *dev;
  132. struct bm1390_data_buf buf;
  133. int irq;
  134. unsigned int state;
  135. bool trigger_enabled;
  136. u8 watermark;
  137. /* Prevent accessing sensor during FIFO read sequence */
  138. struct mutex mutex;
  139. };
  140. enum {
  141. BM1390_CHAN_PRESSURE,
  142. BM1390_CHAN_TEMP,
  143. };
  144. static const struct iio_chan_spec bm1390_channels[] = {
  145. {
  146. .type = IIO_PRESSURE,
  147. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  148. /*
  149. * When IIR is used, we must fix amount of averaged samples.
  150. * Thus we don't allow setting oversampling ratio.
  151. */
  152. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
  153. .scan_index = BM1390_CHAN_PRESSURE,
  154. .scan_type = {
  155. .sign = 'u',
  156. .realbits = 22,
  157. .storagebits = 32,
  158. .endianness = IIO_LE,
  159. },
  160. },
  161. {
  162. .type = IIO_TEMP,
  163. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
  164. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
  165. .scan_index = BM1390_CHAN_TEMP,
  166. .scan_type = {
  167. .sign = 's',
  168. .realbits = 16,
  169. .storagebits = 16,
  170. .endianness = IIO_BE,
  171. },
  172. },
  173. IIO_CHAN_SOFT_TIMESTAMP(2),
  174. };
  175. /*
  176. * We can't skip reading the pressure because the watermark IRQ is acked
  177. * only when the pressure data is read from the FIFO.
  178. */
  179. static const unsigned long bm1390_scan_masks[] = {
  180. BIT(BM1390_CHAN_PRESSURE),
  181. BIT(BM1390_CHAN_PRESSURE) | BIT(BM1390_CHAN_TEMP),
  182. 0
  183. };
  184. static int bm1390_read_temp(struct bm1390_data *data, int *temp)
  185. {
  186. __be16 temp_raw;
  187. int ret;
  188. ret = regmap_bulk_read(data->regmap, BM1390_REG_TEMP_HI, &temp_raw,
  189. sizeof(temp_raw));
  190. if (ret)
  191. return ret;
  192. *temp = be16_to_cpu(temp_raw);
  193. return 0;
  194. }
  195. static int bm1390_pressure_read(struct bm1390_data *data, u32 *pressure)
  196. {
  197. /* Pressure data is in 3 8-bit registers */
  198. u8 raw[3];
  199. int ret;
  200. ret = regmap_bulk_read(data->regmap, BM1390_REG_PRESSURE_BASE,
  201. raw, sizeof(raw));
  202. if (ret < 0)
  203. return ret;
  204. *pressure = (u32)(raw[2] >> 2 | raw[1] << 6 | raw[0] << 14);
  205. return 0;
  206. }
  207. /* The enum values map directly to register bits */
  208. enum bm1390_meas_mode {
  209. BM1390_MEAS_MODE_STOP = 0x0,
  210. BM1390_MEAS_MODE_1SHOT = 0x1,
  211. BM1390_MEAS_MODE_CONTINUOUS = 0x2,
  212. };
  213. static int bm1390_meas_set(struct bm1390_data *data, enum bm1390_meas_mode mode)
  214. {
  215. return regmap_update_bits(data->regmap, BM1390_REG_MODE_CTRL,
  216. BM1390_MASK_MEAS_MODE, mode);
  217. }
  218. /*
  219. * If the trigger is not used we just wait until the measurement has
  220. * completed. The data-sheet says maximum measurement cycle (regardless
  221. * the AVE_NUM) is 200 mS so let's just sleep at least that long. If speed
  222. * is needed the trigger should be used.
  223. */
  224. #define BM1390_MAX_MEAS_TIME_MS 205
  225. static int bm1390_read_data(struct bm1390_data *data,
  226. struct iio_chan_spec const *chan, int *val, int *val2)
  227. {
  228. int ret, warn;
  229. mutex_lock(&data->mutex);
  230. /*
  231. * We use 'continuous mode' even for raw read because according to the
  232. * data-sheet an one-shot mode can't be used with IIR filter.
  233. */
  234. ret = bm1390_meas_set(data, BM1390_MEAS_MODE_CONTINUOUS);
  235. if (ret)
  236. goto unlock_out;
  237. switch (chan->type) {
  238. case IIO_PRESSURE:
  239. msleep(BM1390_MAX_MEAS_TIME_MS);
  240. ret = bm1390_pressure_read(data, val);
  241. break;
  242. case IIO_TEMP:
  243. msleep(BM1390_MAX_MEAS_TIME_MS);
  244. ret = bm1390_read_temp(data, val);
  245. break;
  246. default:
  247. ret = -EINVAL;
  248. }
  249. warn = bm1390_meas_set(data, BM1390_MEAS_MODE_STOP);
  250. if (warn)
  251. dev_warn(data->dev, "Failed to stop measurement (%d)\n", warn);
  252. unlock_out:
  253. mutex_unlock(&data->mutex);
  254. return ret;
  255. }
  256. static int bm1390_read_raw(struct iio_dev *idev,
  257. struct iio_chan_spec const *chan,
  258. int *val, int *val2, long mask)
  259. {
  260. struct bm1390_data *data = iio_priv(idev);
  261. int ret;
  262. switch (mask) {
  263. case IIO_CHAN_INFO_SCALE:
  264. if (chan->type == IIO_TEMP) {
  265. *val = 31;
  266. *val2 = 250000;
  267. return IIO_VAL_INT_PLUS_MICRO;
  268. } else if (chan->type == IIO_PRESSURE) {
  269. /*
  270. * pressure in hPa is register value divided by 2048.
  271. * This means kPa is 1/20480 times the register value,
  272. */
  273. *val = 1;
  274. *val2 = 2048;
  275. return IIO_VAL_FRACTIONAL;
  276. }
  277. return -EINVAL;
  278. case IIO_CHAN_INFO_RAW:
  279. ret = iio_device_claim_direct_mode(idev);
  280. if (ret)
  281. return ret;
  282. ret = bm1390_read_data(data, chan, val, val2);
  283. iio_device_release_direct_mode(idev);
  284. if (ret)
  285. return ret;
  286. return IIO_VAL_INT;
  287. default:
  288. return -EINVAL;
  289. }
  290. }
  291. static int __bm1390_fifo_flush(struct iio_dev *idev, unsigned int samples,
  292. s64 timestamp)
  293. {
  294. /* BM1390_FIFO_LENGTH is small so we shouldn't run out of stack */
  295. struct bm1390_data_buf buffer[BM1390_FIFO_LENGTH];
  296. struct bm1390_data *data = iio_priv(idev);
  297. int smp_lvl, ret, i, warn, dummy;
  298. u64 sample_period;
  299. __be16 temp = 0;
  300. ret = regmap_read(data->regmap, BM1390_REG_FIFO_LVL, &smp_lvl);
  301. if (ret)
  302. return ret;
  303. smp_lvl = FIELD_GET(BM1390_MASK_FIFO_LVL, smp_lvl);
  304. if (!smp_lvl)
  305. return 0;
  306. if (smp_lvl > BM1390_FIFO_LENGTH) {
  307. /*
  308. * The fifo holds maximum of 4 samples so valid values
  309. * should be 0, 1, 2, 3, 4 - rest are probably bit errors
  310. * in I2C line. Don't overflow if this happens.
  311. */
  312. dev_err(data->dev, "bad FIFO level %d\n", smp_lvl);
  313. smp_lvl = BM1390_FIFO_LENGTH;
  314. }
  315. sample_period = timestamp - data->old_timestamp;
  316. do_div(sample_period, smp_lvl);
  317. if (samples && smp_lvl > samples)
  318. smp_lvl = samples;
  319. /*
  320. * After some testing it appears that the temperature is not readable
  321. * until the FIFO access has been done after the WMI. Thus, we need
  322. * to read the all pressure values to memory and read the temperature
  323. * only after that.
  324. */
  325. for (i = 0; i < smp_lvl; i++) {
  326. /*
  327. * When we start reading data from the FIFO the sensor goes to
  328. * special FIFO reading mode. If any other register is accessed
  329. * during the FIFO read, samples can be dropped. Prevent access
  330. * until FIFO_LVL is read. We have mutex locked and we do also
  331. * go performing reading of FIFO_LVL even if this read fails.
  332. */
  333. if (test_bit(BM1390_CHAN_PRESSURE, idev->active_scan_mask)) {
  334. ret = bm1390_pressure_read(data, &buffer[i].pressure);
  335. if (ret)
  336. break;
  337. }
  338. /*
  339. * Old timestamp is either the previous sample IRQ time,
  340. * previous flush-time or, if this was first sample, the enable
  341. * time. When we add a sample period to that we should get the
  342. * best approximation of the time-stamp we are handling.
  343. *
  344. * Idea is to always keep the "old_timestamp" matching the
  345. * timestamp which we are currently handling.
  346. */
  347. data->old_timestamp += sample_period;
  348. buffer[i].ts = data->old_timestamp;
  349. }
  350. /* Reading the FIFO_LVL closes the FIFO access sequence */
  351. warn = regmap_read(data->regmap, BM1390_REG_FIFO_LVL, &dummy);
  352. if (warn)
  353. dev_warn(data->dev, "Closing FIFO sequence failed\n");
  354. if (ret)
  355. return ret;
  356. if (test_bit(BM1390_CHAN_TEMP, idev->active_scan_mask)) {
  357. ret = regmap_bulk_read(data->regmap, BM1390_REG_TEMP_HI, &temp,
  358. sizeof(temp));
  359. if (ret)
  360. return ret;
  361. }
  362. if (ret)
  363. return ret;
  364. for (i = 0; i < smp_lvl; i++) {
  365. buffer[i].temp = temp;
  366. iio_push_to_buffers(idev, &buffer[i]);
  367. }
  368. return smp_lvl;
  369. }
  370. static int bm1390_fifo_flush(struct iio_dev *idev, unsigned int samples)
  371. {
  372. struct bm1390_data *data = iio_priv(idev);
  373. s64 timestamp;
  374. int ret;
  375. /*
  376. * If fifo_flush is being called from IRQ handler we know the stored
  377. * timestamp is fairly accurate for the last stored sample. If we are
  378. * called as a result of a read operation from userspace and hence
  379. * before the watermark interrupt was triggered, take a timestamp
  380. * now. We can fall anywhere in between two samples so the error in this
  381. * case is at most one sample period.
  382. * We need to have the IRQ disabled or we risk of messing-up
  383. * the timestamps. If we are ran from IRQ, then the
  384. * IRQF_ONESHOT has us covered - but if we are ran by the
  385. * user-space read we need to disable the IRQ to be on a safe
  386. * side. We do this usng synchronous disable so that if the
  387. * IRQ thread is being ran on other CPU we wait for it to be
  388. * finished.
  389. */
  390. timestamp = iio_get_time_ns(idev);
  391. mutex_lock(&data->mutex);
  392. ret = __bm1390_fifo_flush(idev, samples, timestamp);
  393. mutex_unlock(&data->mutex);
  394. return ret;
  395. }
  396. static int bm1390_set_watermark(struct iio_dev *idev, unsigned int val)
  397. {
  398. struct bm1390_data *data = iio_priv(idev);
  399. if (val < BM1390_WMI_MIN || val > BM1390_WMI_MAX)
  400. return -EINVAL;
  401. mutex_lock(&data->mutex);
  402. data->watermark = val;
  403. mutex_unlock(&data->mutex);
  404. return 0;
  405. }
  406. static const struct iio_info bm1390_noirq_info = {
  407. .read_raw = &bm1390_read_raw,
  408. };
  409. static const struct iio_info bm1390_info = {
  410. .read_raw = &bm1390_read_raw,
  411. .hwfifo_set_watermark = bm1390_set_watermark,
  412. .hwfifo_flush_to_buffer = bm1390_fifo_flush,
  413. };
  414. static int bm1390_chip_init(struct bm1390_data *data)
  415. {
  416. int ret;
  417. ret = regmap_write_bits(data->regmap, BM1390_REG_POWER,
  418. BM1390_MASK_POWER, BM1390_POWER_ON);
  419. if (ret)
  420. return ret;
  421. msleep(1);
  422. ret = regmap_write_bits(data->regmap, BM1390_REG_RESET,
  423. BM1390_MASK_RESET, BM1390_RESET);
  424. if (ret)
  425. return ret;
  426. msleep(1);
  427. ret = regmap_write_bits(data->regmap, BM1390_REG_RESET,
  428. BM1390_MASK_RESET, BM1390_RESET_RELEASE);
  429. if (ret)
  430. return ret;
  431. msleep(1);
  432. ret = regmap_reinit_cache(data->regmap, &bm1390_regmap);
  433. if (ret) {
  434. dev_err(data->dev, "Failed to reinit reg cache\n");
  435. return ret;
  436. }
  437. /*
  438. * Default to use IIR filter in "middle" mode. Also the AVE_NUM must
  439. * be fixed when IIR is in use.
  440. */
  441. ret = regmap_update_bits(data->regmap, BM1390_REG_MODE_CTRL,
  442. BM1390_MASK_AVE_NUM, BM1390_IIR_AVE_NUM);
  443. if (ret)
  444. return ret;
  445. return regmap_update_bits(data->regmap, BM1390_REG_FIFO_CTRL,
  446. BM1390_MASK_IIR_MODE, BM1390_IIR_MODE_MID);
  447. }
  448. static int bm1390_fifo_set_wmi(struct bm1390_data *data)
  449. {
  450. u8 regval;
  451. regval = FIELD_PREP(BM1390_MASK_FIFO_LEN,
  452. data->watermark - BM1390_WMI_MIN);
  453. return regmap_update_bits(data->regmap, BM1390_REG_FIFO_CTRL,
  454. BM1390_MASK_FIFO_LEN, regval);
  455. }
  456. static int bm1390_fifo_enable(struct iio_dev *idev)
  457. {
  458. struct bm1390_data *data = iio_priv(idev);
  459. int ret;
  460. /* We can't do buffered stuff without IRQ as we never get WMI */
  461. if (data->irq <= 0)
  462. return -EINVAL;
  463. mutex_lock(&data->mutex);
  464. if (data->trigger_enabled) {
  465. ret = -EBUSY;
  466. goto unlock_out;
  467. }
  468. /* Update watermark to HW */
  469. ret = bm1390_fifo_set_wmi(data);
  470. if (ret)
  471. goto unlock_out;
  472. /* Enable WMI_IRQ */
  473. ret = regmap_set_bits(data->regmap, BM1390_REG_MODE_CTRL,
  474. BM1390_MASK_WMI_EN);
  475. if (ret)
  476. goto unlock_out;
  477. /* Enable FIFO */
  478. ret = regmap_set_bits(data->regmap, BM1390_REG_FIFO_CTRL,
  479. BM1390_MASK_FIFO_EN);
  480. if (ret)
  481. goto unlock_out;
  482. data->state = BM1390_STATE_FIFO;
  483. data->old_timestamp = iio_get_time_ns(idev);
  484. ret = bm1390_meas_set(data, BM1390_MEAS_MODE_CONTINUOUS);
  485. unlock_out:
  486. mutex_unlock(&data->mutex);
  487. return ret;
  488. }
  489. static int bm1390_fifo_disable(struct iio_dev *idev)
  490. {
  491. struct bm1390_data *data = iio_priv(idev);
  492. int ret;
  493. msleep(1);
  494. mutex_lock(&data->mutex);
  495. ret = bm1390_meas_set(data, BM1390_MEAS_MODE_STOP);
  496. if (ret)
  497. goto unlock_out;
  498. /* Disable FIFO */
  499. ret = regmap_clear_bits(data->regmap, BM1390_REG_FIFO_CTRL,
  500. BM1390_MASK_FIFO_EN);
  501. if (ret)
  502. goto unlock_out;
  503. data->state = BM1390_STATE_SAMPLE;
  504. /* Disable WMI_IRQ */
  505. ret = regmap_clear_bits(data->regmap, BM1390_REG_MODE_CTRL,
  506. BM1390_MASK_WMI_EN);
  507. unlock_out:
  508. mutex_unlock(&data->mutex);
  509. return ret;
  510. }
  511. static int bm1390_buffer_postenable(struct iio_dev *idev)
  512. {
  513. /*
  514. * If we use data-ready trigger, then the IRQ masks should be handled by
  515. * trigger enable and the hardware buffer is not used but we just update
  516. * results to the IIO FIFO when data-ready triggers.
  517. */
  518. if (iio_device_get_current_mode(idev) == INDIO_BUFFER_TRIGGERED)
  519. return 0;
  520. return bm1390_fifo_enable(idev);
  521. }
  522. static int bm1390_buffer_predisable(struct iio_dev *idev)
  523. {
  524. if (iio_device_get_current_mode(idev) == INDIO_BUFFER_TRIGGERED)
  525. return 0;
  526. return bm1390_fifo_disable(idev);
  527. }
  528. static const struct iio_buffer_setup_ops bm1390_buffer_ops = {
  529. .postenable = bm1390_buffer_postenable,
  530. .predisable = bm1390_buffer_predisable,
  531. };
  532. static irqreturn_t bm1390_trigger_handler(int irq, void *p)
  533. {
  534. struct iio_poll_func *pf = p;
  535. struct iio_dev *idev = pf->indio_dev;
  536. struct bm1390_data *data = iio_priv(idev);
  537. int ret, status;
  538. /* DRDY is acked by reading status reg */
  539. ret = regmap_read(data->regmap, BM1390_REG_STATUS, &status);
  540. if (ret || !status)
  541. return IRQ_NONE;
  542. dev_dbg(data->dev, "DRDY trig status 0x%x\n", status);
  543. if (test_bit(BM1390_CHAN_PRESSURE, idev->active_scan_mask)) {
  544. ret = bm1390_pressure_read(data, &data->buf.pressure);
  545. if (ret) {
  546. dev_warn(data->dev, "sample read failed %d\n", ret);
  547. return IRQ_NONE;
  548. }
  549. }
  550. if (test_bit(BM1390_CHAN_TEMP, idev->active_scan_mask)) {
  551. ret = regmap_bulk_read(data->regmap, BM1390_REG_TEMP_HI,
  552. &data->buf.temp, sizeof(data->buf.temp));
  553. if (ret) {
  554. dev_warn(data->dev, "temp read failed %d\n", ret);
  555. return IRQ_HANDLED;
  556. }
  557. }
  558. iio_push_to_buffers_with_timestamp(idev, &data->buf, data->timestamp);
  559. iio_trigger_notify_done(idev->trig);
  560. return IRQ_HANDLED;
  561. }
  562. /* Get timestamps and wake the thread if we need to read data */
  563. static irqreturn_t bm1390_irq_handler(int irq, void *private)
  564. {
  565. struct iio_dev *idev = private;
  566. struct bm1390_data *data = iio_priv(idev);
  567. data->timestamp = iio_get_time_ns(idev);
  568. if (data->state == BM1390_STATE_FIFO || data->trigger_enabled)
  569. return IRQ_WAKE_THREAD;
  570. return IRQ_NONE;
  571. }
  572. static irqreturn_t bm1390_irq_thread_handler(int irq, void *private)
  573. {
  574. struct iio_dev *idev = private;
  575. struct bm1390_data *data = iio_priv(idev);
  576. int ret = IRQ_NONE;
  577. mutex_lock(&data->mutex);
  578. if (data->trigger_enabled) {
  579. iio_trigger_poll_nested(data->trig);
  580. ret = IRQ_HANDLED;
  581. } else if (data->state == BM1390_STATE_FIFO) {
  582. int ok;
  583. ok = __bm1390_fifo_flush(idev, BM1390_FIFO_LENGTH,
  584. data->timestamp);
  585. if (ok > 0)
  586. ret = IRQ_HANDLED;
  587. }
  588. mutex_unlock(&data->mutex);
  589. return ret;
  590. }
  591. static int bm1390_set_drdy_irq(struct bm1390_data *data, bool en)
  592. {
  593. if (en)
  594. return regmap_set_bits(data->regmap, BM1390_REG_MODE_CTRL,
  595. BM1390_MASK_DRDY_EN);
  596. return regmap_clear_bits(data->regmap, BM1390_REG_MODE_CTRL,
  597. BM1390_MASK_DRDY_EN);
  598. }
  599. static int bm1390_trigger_set_state(struct iio_trigger *trig,
  600. bool state)
  601. {
  602. struct bm1390_data *data = iio_trigger_get_drvdata(trig);
  603. int ret = 0;
  604. mutex_lock(&data->mutex);
  605. if (data->trigger_enabled == state)
  606. goto unlock_out;
  607. if (data->state == BM1390_STATE_FIFO) {
  608. dev_warn(data->dev, "Can't set trigger when FIFO enabled\n");
  609. ret = -EBUSY;
  610. goto unlock_out;
  611. }
  612. data->trigger_enabled = state;
  613. if (state) {
  614. ret = bm1390_meas_set(data, BM1390_MEAS_MODE_CONTINUOUS);
  615. if (ret)
  616. goto unlock_out;
  617. } else {
  618. int dummy;
  619. ret = bm1390_meas_set(data, BM1390_MEAS_MODE_STOP);
  620. if (ret)
  621. goto unlock_out;
  622. /*
  623. * We need to read the status register in order to ACK the
  624. * data-ready which may have been generated just before we
  625. * disabled the measurement.
  626. */
  627. ret = regmap_read(data->regmap, BM1390_REG_STATUS, &dummy);
  628. if (ret)
  629. dev_warn(data->dev, "status read failed\n");
  630. }
  631. ret = bm1390_set_drdy_irq(data, state);
  632. unlock_out:
  633. mutex_unlock(&data->mutex);
  634. return ret;
  635. }
  636. static const struct iio_trigger_ops bm1390_trigger_ops = {
  637. .set_trigger_state = bm1390_trigger_set_state,
  638. };
  639. static int bm1390_setup_buffer(struct bm1390_data *data, struct iio_dev *idev)
  640. {
  641. int ret;
  642. ret = devm_iio_triggered_buffer_setup(data->dev, idev,
  643. &iio_pollfunc_store_time,
  644. &bm1390_trigger_handler,
  645. &bm1390_buffer_ops);
  646. if (ret)
  647. return dev_err_probe(data->dev, ret,
  648. "iio_triggered_buffer_setup FAIL\n");
  649. idev->available_scan_masks = bm1390_scan_masks;
  650. return 0;
  651. }
  652. static int bm1390_setup_trigger(struct bm1390_data *data, struct iio_dev *idev,
  653. int irq)
  654. {
  655. struct iio_trigger *itrig;
  656. char *name;
  657. int ret;
  658. itrig = devm_iio_trigger_alloc(data->dev, "%sdata-rdy-dev%d", idev->name,
  659. iio_device_id(idev));
  660. if (!itrig)
  661. return -ENOMEM;
  662. data->trig = itrig;
  663. itrig->ops = &bm1390_trigger_ops;
  664. iio_trigger_set_drvdata(itrig, data);
  665. name = devm_kasprintf(data->dev, GFP_KERNEL, "%s-bm1390",
  666. dev_name(data->dev));
  667. if (name == NULL)
  668. return -ENOMEM;
  669. ret = devm_request_threaded_irq(data->dev, irq, bm1390_irq_handler,
  670. &bm1390_irq_thread_handler,
  671. IRQF_ONESHOT, name, idev);
  672. if (ret)
  673. return dev_err_probe(data->dev, ret, "Could not request IRQ\n");
  674. ret = devm_iio_trigger_register(data->dev, itrig);
  675. if (ret)
  676. return dev_err_probe(data->dev, ret,
  677. "Trigger registration failed\n");
  678. return 0;
  679. }
  680. static int bm1390_probe(struct i2c_client *i2c)
  681. {
  682. struct bm1390_data *data;
  683. struct regmap *regmap;
  684. struct iio_dev *idev;
  685. struct device *dev;
  686. unsigned int part_id;
  687. int ret;
  688. dev = &i2c->dev;
  689. regmap = devm_regmap_init_i2c(i2c, &bm1390_regmap);
  690. if (IS_ERR(regmap))
  691. return dev_err_probe(dev, PTR_ERR(regmap),
  692. "Failed to initialize Regmap\n");
  693. ret = devm_regulator_get_enable(dev, "vdd");
  694. if (ret)
  695. return dev_err_probe(dev, ret, "Failed to get regulator\n");
  696. ret = regmap_read(regmap, BM1390_REG_PART_ID, &part_id);
  697. if (ret)
  698. return dev_err_probe(dev, ret, "Failed to access sensor\n");
  699. if (part_id != BM1390_ID)
  700. dev_warn(dev, "unknown device 0x%x\n", part_id);
  701. idev = devm_iio_device_alloc(dev, sizeof(*data));
  702. if (!idev)
  703. return -ENOMEM;
  704. data = iio_priv(idev);
  705. data->regmap = regmap;
  706. data->dev = dev;
  707. data->irq = i2c->irq;
  708. /*
  709. * For now we just allow BM1390_WMI_MIN to BM1390_WMI_MAX and
  710. * discard every other configuration when triggered mode is not used.
  711. */
  712. data->watermark = BM1390_WMI_MAX;
  713. mutex_init(&data->mutex);
  714. idev->channels = bm1390_channels;
  715. idev->num_channels = ARRAY_SIZE(bm1390_channels);
  716. idev->name = "bm1390";
  717. idev->modes = INDIO_DIRECT_MODE;
  718. ret = bm1390_chip_init(data);
  719. if (ret)
  720. return dev_err_probe(dev, ret, "sensor init failed\n");
  721. ret = bm1390_setup_buffer(data, idev);
  722. if (ret)
  723. return ret;
  724. /* No trigger if we don't have IRQ for data-ready and WMI */
  725. if (i2c->irq > 0) {
  726. idev->info = &bm1390_info;
  727. idev->modes |= INDIO_BUFFER_SOFTWARE;
  728. ret = bm1390_setup_trigger(data, idev, i2c->irq);
  729. if (ret)
  730. return ret;
  731. } else {
  732. idev->info = &bm1390_noirq_info;
  733. }
  734. ret = devm_iio_device_register(dev, idev);
  735. if (ret < 0)
  736. return dev_err_probe(dev, ret,
  737. "Unable to register iio device\n");
  738. return 0;
  739. }
  740. static const struct of_device_id bm1390_of_match[] = {
  741. { .compatible = "rohm,bm1390glv-z" },
  742. {}
  743. };
  744. MODULE_DEVICE_TABLE(of, bm1390_of_match);
  745. static const struct i2c_device_id bm1390_id[] = {
  746. { "bm1390glv-z", },
  747. {}
  748. };
  749. MODULE_DEVICE_TABLE(i2c, bm1390_id);
  750. static struct i2c_driver bm1390_driver = {
  751. .driver = {
  752. .name = "bm1390",
  753. .of_match_table = bm1390_of_match,
  754. /*
  755. * Probing explicitly requires a few millisecond of sleep.
  756. * Enabling the VDD regulator may include ramp up rates.
  757. */
  758. .probe_type = PROBE_PREFER_ASYNCHRONOUS,
  759. },
  760. .probe = bm1390_probe,
  761. .id_table = bm1390_id,
  762. };
  763. module_i2c_driver(bm1390_driver);
  764. MODULE_AUTHOR("Matti Vaittinen <mazziesaccount@gmail.com>");
  765. MODULE_DESCRIPTION("Driver for ROHM BM1390 pressure sensor");
  766. MODULE_LICENSE("GPL");