bmg160_core.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269
  1. /*
  2. * BMG160 Gyro Sensor driver
  3. * Copyright (c) 2014, Intel Corporation.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms and conditions of the GNU General Public License,
  7. * version 2, as published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. */
  14. #include <linux/module.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/delay.h>
  17. #include <linux/slab.h>
  18. #include <linux/acpi.h>
  19. #include <linux/pm.h>
  20. #include <linux/pm_runtime.h>
  21. #include <linux/iio/iio.h>
  22. #include <linux/iio/sysfs.h>
  23. #include <linux/iio/buffer.h>
  24. #include <linux/iio/trigger.h>
  25. #include <linux/iio/events.h>
  26. #include <linux/iio/trigger_consumer.h>
  27. #include <linux/iio/triggered_buffer.h>
  28. #include <linux/regmap.h>
  29. #include "bmg160.h"
  30. #define BMG160_IRQ_NAME "bmg160_event"
  31. #define BMG160_REG_CHIP_ID 0x00
  32. #define BMG160_CHIP_ID_VAL 0x0F
  33. #define BMG160_REG_PMU_LPW 0x11
  34. #define BMG160_MODE_NORMAL 0x00
  35. #define BMG160_MODE_DEEP_SUSPEND 0x20
  36. #define BMG160_MODE_SUSPEND 0x80
  37. #define BMG160_REG_RANGE 0x0F
  38. #define BMG160_RANGE_2000DPS 0
  39. #define BMG160_RANGE_1000DPS 1
  40. #define BMG160_RANGE_500DPS 2
  41. #define BMG160_RANGE_250DPS 3
  42. #define BMG160_RANGE_125DPS 4
  43. #define BMG160_REG_PMU_BW 0x10
  44. #define BMG160_NO_FILTER 0
  45. #define BMG160_DEF_BW 100
  46. #define BMG160_REG_PMU_BW_RES BIT(7)
  47. #define BMG160_GYRO_REG_RESET 0x14
  48. #define BMG160_GYRO_RESET_VAL 0xb6
  49. #define BMG160_REG_INT_MAP_0 0x17
  50. #define BMG160_INT_MAP_0_BIT_ANY BIT(1)
  51. #define BMG160_REG_INT_MAP_1 0x18
  52. #define BMG160_INT_MAP_1_BIT_NEW_DATA BIT(0)
  53. #define BMG160_REG_INT_RST_LATCH 0x21
  54. #define BMG160_INT_MODE_LATCH_RESET 0x80
  55. #define BMG160_INT_MODE_LATCH_INT 0x0F
  56. #define BMG160_INT_MODE_NON_LATCH_INT 0x00
  57. #define BMG160_REG_INT_EN_0 0x15
  58. #define BMG160_DATA_ENABLE_INT BIT(7)
  59. #define BMG160_REG_INT_EN_1 0x16
  60. #define BMG160_INT1_BIT_OD BIT(1)
  61. #define BMG160_REG_XOUT_L 0x02
  62. #define BMG160_AXIS_TO_REG(axis) (BMG160_REG_XOUT_L + (axis * 2))
  63. #define BMG160_REG_SLOPE_THRES 0x1B
  64. #define BMG160_SLOPE_THRES_MASK 0x0F
  65. #define BMG160_REG_MOTION_INTR 0x1C
  66. #define BMG160_INT_MOTION_X BIT(0)
  67. #define BMG160_INT_MOTION_Y BIT(1)
  68. #define BMG160_INT_MOTION_Z BIT(2)
  69. #define BMG160_ANY_DUR_MASK 0x30
  70. #define BMG160_ANY_DUR_SHIFT 4
  71. #define BMG160_REG_INT_STATUS_2 0x0B
  72. #define BMG160_ANY_MOTION_MASK 0x07
  73. #define BMG160_ANY_MOTION_BIT_X BIT(0)
  74. #define BMG160_ANY_MOTION_BIT_Y BIT(1)
  75. #define BMG160_ANY_MOTION_BIT_Z BIT(2)
  76. #define BMG160_REG_TEMP 0x08
  77. #define BMG160_TEMP_CENTER_VAL 23
  78. #define BMG160_MAX_STARTUP_TIME_MS 80
  79. #define BMG160_AUTO_SUSPEND_DELAY_MS 2000
  80. struct bmg160_data {
  81. struct regmap *regmap;
  82. struct iio_trigger *dready_trig;
  83. struct iio_trigger *motion_trig;
  84. struct mutex mutex;
  85. s16 buffer[8];
  86. u32 dps_range;
  87. int ev_enable_state;
  88. int slope_thres;
  89. bool dready_trigger_on;
  90. bool motion_trigger_on;
  91. int irq;
  92. };
  93. enum bmg160_axis {
  94. AXIS_X,
  95. AXIS_Y,
  96. AXIS_Z,
  97. AXIS_MAX,
  98. };
  99. static const struct {
  100. int odr;
  101. int filter;
  102. int bw_bits;
  103. } bmg160_samp_freq_table[] = { {100, 32, 0x07},
  104. {200, 64, 0x06},
  105. {100, 12, 0x05},
  106. {200, 23, 0x04},
  107. {400, 47, 0x03},
  108. {1000, 116, 0x02},
  109. {2000, 230, 0x01} };
  110. static const struct {
  111. int scale;
  112. int dps_range;
  113. } bmg160_scale_table[] = { { 1065, BMG160_RANGE_2000DPS},
  114. { 532, BMG160_RANGE_1000DPS},
  115. { 266, BMG160_RANGE_500DPS},
  116. { 133, BMG160_RANGE_250DPS},
  117. { 66, BMG160_RANGE_125DPS} };
  118. static int bmg160_set_mode(struct bmg160_data *data, u8 mode)
  119. {
  120. struct device *dev = regmap_get_device(data->regmap);
  121. int ret;
  122. ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode);
  123. if (ret < 0) {
  124. dev_err(dev, "Error writing reg_pmu_lpw\n");
  125. return ret;
  126. }
  127. return 0;
  128. }
  129. static int bmg160_convert_freq_to_bit(int val)
  130. {
  131. int i;
  132. for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
  133. if (bmg160_samp_freq_table[i].odr == val)
  134. return bmg160_samp_freq_table[i].bw_bits;
  135. }
  136. return -EINVAL;
  137. }
  138. static int bmg160_set_bw(struct bmg160_data *data, int val)
  139. {
  140. struct device *dev = regmap_get_device(data->regmap);
  141. int ret;
  142. int bw_bits;
  143. bw_bits = bmg160_convert_freq_to_bit(val);
  144. if (bw_bits < 0)
  145. return bw_bits;
  146. ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits);
  147. if (ret < 0) {
  148. dev_err(dev, "Error writing reg_pmu_bw\n");
  149. return ret;
  150. }
  151. return 0;
  152. }
  153. static int bmg160_get_filter(struct bmg160_data *data, int *val)
  154. {
  155. struct device *dev = regmap_get_device(data->regmap);
  156. int ret;
  157. int i;
  158. unsigned int bw_bits;
  159. ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
  160. if (ret < 0) {
  161. dev_err(dev, "Error reading reg_pmu_bw\n");
  162. return ret;
  163. }
  164. /* Ignore the readonly reserved bit. */
  165. bw_bits &= ~BMG160_REG_PMU_BW_RES;
  166. for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
  167. if (bmg160_samp_freq_table[i].bw_bits == bw_bits)
  168. break;
  169. }
  170. *val = bmg160_samp_freq_table[i].filter;
  171. return ret ? ret : IIO_VAL_INT;
  172. }
  173. static int bmg160_set_filter(struct bmg160_data *data, int val)
  174. {
  175. struct device *dev = regmap_get_device(data->regmap);
  176. int ret;
  177. int i;
  178. for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
  179. if (bmg160_samp_freq_table[i].filter == val)
  180. break;
  181. }
  182. ret = regmap_write(data->regmap, BMG160_REG_PMU_BW,
  183. bmg160_samp_freq_table[i].bw_bits);
  184. if (ret < 0) {
  185. dev_err(dev, "Error writing reg_pmu_bw\n");
  186. return ret;
  187. }
  188. return 0;
  189. }
  190. static int bmg160_chip_init(struct bmg160_data *data)
  191. {
  192. struct device *dev = regmap_get_device(data->regmap);
  193. int ret;
  194. unsigned int val;
  195. /*
  196. * Reset chip to get it in a known good state. A delay of 30ms after
  197. * reset is required according to the datasheet.
  198. */
  199. regmap_write(data->regmap, BMG160_GYRO_REG_RESET,
  200. BMG160_GYRO_RESET_VAL);
  201. usleep_range(30000, 30700);
  202. ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val);
  203. if (ret < 0) {
  204. dev_err(dev, "Error reading reg_chip_id\n");
  205. return ret;
  206. }
  207. dev_dbg(dev, "Chip Id %x\n", val);
  208. if (val != BMG160_CHIP_ID_VAL) {
  209. dev_err(dev, "invalid chip %x\n", val);
  210. return -ENODEV;
  211. }
  212. ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
  213. if (ret < 0)
  214. return ret;
  215. /* Wait upto 500 ms to be ready after changing mode */
  216. usleep_range(500, 1000);
  217. /* Set Bandwidth */
  218. ret = bmg160_set_bw(data, BMG160_DEF_BW);
  219. if (ret < 0)
  220. return ret;
  221. /* Set Default Range */
  222. ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS);
  223. if (ret < 0) {
  224. dev_err(dev, "Error writing reg_range\n");
  225. return ret;
  226. }
  227. data->dps_range = BMG160_RANGE_500DPS;
  228. ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val);
  229. if (ret < 0) {
  230. dev_err(dev, "Error reading reg_slope_thres\n");
  231. return ret;
  232. }
  233. data->slope_thres = val;
  234. /* Set default interrupt mode */
  235. ret = regmap_update_bits(data->regmap, BMG160_REG_INT_EN_1,
  236. BMG160_INT1_BIT_OD, 0);
  237. if (ret < 0) {
  238. dev_err(dev, "Error updating bits in reg_int_en_1\n");
  239. return ret;
  240. }
  241. ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
  242. BMG160_INT_MODE_LATCH_INT |
  243. BMG160_INT_MODE_LATCH_RESET);
  244. if (ret < 0) {
  245. dev_err(dev,
  246. "Error writing reg_motion_intr\n");
  247. return ret;
  248. }
  249. return 0;
  250. }
  251. static int bmg160_set_power_state(struct bmg160_data *data, bool on)
  252. {
  253. #ifdef CONFIG_PM
  254. struct device *dev = regmap_get_device(data->regmap);
  255. int ret;
  256. if (on)
  257. ret = pm_runtime_get_sync(dev);
  258. else {
  259. pm_runtime_mark_last_busy(dev);
  260. ret = pm_runtime_put_autosuspend(dev);
  261. }
  262. if (ret < 0) {
  263. dev_err(dev, "Failed: bmg160_set_power_state for %d\n", on);
  264. if (on)
  265. pm_runtime_put_noidle(dev);
  266. return ret;
  267. }
  268. #endif
  269. return 0;
  270. }
  271. static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data,
  272. bool status)
  273. {
  274. struct device *dev = regmap_get_device(data->regmap);
  275. int ret;
  276. /* Enable/Disable INT_MAP0 mapping */
  277. ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0,
  278. BMG160_INT_MAP_0_BIT_ANY,
  279. (status ? BMG160_INT_MAP_0_BIT_ANY : 0));
  280. if (ret < 0) {
  281. dev_err(dev, "Error updating bits reg_int_map0\n");
  282. return ret;
  283. }
  284. /* Enable/Disable slope interrupts */
  285. if (status) {
  286. /* Update slope thres */
  287. ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES,
  288. data->slope_thres);
  289. if (ret < 0) {
  290. dev_err(dev, "Error writing reg_slope_thres\n");
  291. return ret;
  292. }
  293. ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR,
  294. BMG160_INT_MOTION_X | BMG160_INT_MOTION_Y |
  295. BMG160_INT_MOTION_Z);
  296. if (ret < 0) {
  297. dev_err(dev, "Error writing reg_motion_intr\n");
  298. return ret;
  299. }
  300. /*
  301. * New data interrupt is always non-latched,
  302. * which will have higher priority, so no need
  303. * to set latched mode, we will be flooded anyway with INTR
  304. */
  305. if (!data->dready_trigger_on) {
  306. ret = regmap_write(data->regmap,
  307. BMG160_REG_INT_RST_LATCH,
  308. BMG160_INT_MODE_LATCH_INT |
  309. BMG160_INT_MODE_LATCH_RESET);
  310. if (ret < 0) {
  311. dev_err(dev, "Error writing reg_rst_latch\n");
  312. return ret;
  313. }
  314. }
  315. ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
  316. BMG160_DATA_ENABLE_INT);
  317. } else {
  318. ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
  319. }
  320. if (ret < 0) {
  321. dev_err(dev, "Error writing reg_int_en0\n");
  322. return ret;
  323. }
  324. return 0;
  325. }
  326. static int bmg160_setup_new_data_interrupt(struct bmg160_data *data,
  327. bool status)
  328. {
  329. struct device *dev = regmap_get_device(data->regmap);
  330. int ret;
  331. /* Enable/Disable INT_MAP1 mapping */
  332. ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1,
  333. BMG160_INT_MAP_1_BIT_NEW_DATA,
  334. (status ? BMG160_INT_MAP_1_BIT_NEW_DATA : 0));
  335. if (ret < 0) {
  336. dev_err(dev, "Error updating bits in reg_int_map1\n");
  337. return ret;
  338. }
  339. if (status) {
  340. ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
  341. BMG160_INT_MODE_NON_LATCH_INT |
  342. BMG160_INT_MODE_LATCH_RESET);
  343. if (ret < 0) {
  344. dev_err(dev, "Error writing reg_rst_latch\n");
  345. return ret;
  346. }
  347. ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
  348. BMG160_DATA_ENABLE_INT);
  349. } else {
  350. /* Restore interrupt mode */
  351. ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
  352. BMG160_INT_MODE_LATCH_INT |
  353. BMG160_INT_MODE_LATCH_RESET);
  354. if (ret < 0) {
  355. dev_err(dev, "Error writing reg_rst_latch\n");
  356. return ret;
  357. }
  358. ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
  359. }
  360. if (ret < 0) {
  361. dev_err(dev, "Error writing reg_int_en0\n");
  362. return ret;
  363. }
  364. return 0;
  365. }
  366. static int bmg160_get_bw(struct bmg160_data *data, int *val)
  367. {
  368. struct device *dev = regmap_get_device(data->regmap);
  369. int i;
  370. unsigned int bw_bits;
  371. int ret;
  372. ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
  373. if (ret < 0) {
  374. dev_err(dev, "Error reading reg_pmu_bw\n");
  375. return ret;
  376. }
  377. /* Ignore the readonly reserved bit. */
  378. bw_bits &= ~BMG160_REG_PMU_BW_RES;
  379. for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
  380. if (bmg160_samp_freq_table[i].bw_bits == bw_bits) {
  381. *val = bmg160_samp_freq_table[i].odr;
  382. return IIO_VAL_INT;
  383. }
  384. }
  385. return -EINVAL;
  386. }
  387. static int bmg160_set_scale(struct bmg160_data *data, int val)
  388. {
  389. struct device *dev = regmap_get_device(data->regmap);
  390. int ret, i;
  391. for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
  392. if (bmg160_scale_table[i].scale == val) {
  393. ret = regmap_write(data->regmap, BMG160_REG_RANGE,
  394. bmg160_scale_table[i].dps_range);
  395. if (ret < 0) {
  396. dev_err(dev, "Error writing reg_range\n");
  397. return ret;
  398. }
  399. data->dps_range = bmg160_scale_table[i].dps_range;
  400. return 0;
  401. }
  402. }
  403. return -EINVAL;
  404. }
  405. static int bmg160_get_temp(struct bmg160_data *data, int *val)
  406. {
  407. struct device *dev = regmap_get_device(data->regmap);
  408. int ret;
  409. unsigned int raw_val;
  410. mutex_lock(&data->mutex);
  411. ret = bmg160_set_power_state(data, true);
  412. if (ret < 0) {
  413. mutex_unlock(&data->mutex);
  414. return ret;
  415. }
  416. ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val);
  417. if (ret < 0) {
  418. dev_err(dev, "Error reading reg_temp\n");
  419. bmg160_set_power_state(data, false);
  420. mutex_unlock(&data->mutex);
  421. return ret;
  422. }
  423. *val = sign_extend32(raw_val, 7);
  424. ret = bmg160_set_power_state(data, false);
  425. mutex_unlock(&data->mutex);
  426. if (ret < 0)
  427. return ret;
  428. return IIO_VAL_INT;
  429. }
  430. static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
  431. {
  432. struct device *dev = regmap_get_device(data->regmap);
  433. int ret;
  434. __le16 raw_val;
  435. mutex_lock(&data->mutex);
  436. ret = bmg160_set_power_state(data, true);
  437. if (ret < 0) {
  438. mutex_unlock(&data->mutex);
  439. return ret;
  440. }
  441. ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val,
  442. sizeof(raw_val));
  443. if (ret < 0) {
  444. dev_err(dev, "Error reading axis %d\n", axis);
  445. bmg160_set_power_state(data, false);
  446. mutex_unlock(&data->mutex);
  447. return ret;
  448. }
  449. *val = sign_extend32(le16_to_cpu(raw_val), 15);
  450. ret = bmg160_set_power_state(data, false);
  451. mutex_unlock(&data->mutex);
  452. if (ret < 0)
  453. return ret;
  454. return IIO_VAL_INT;
  455. }
  456. static int bmg160_read_raw(struct iio_dev *indio_dev,
  457. struct iio_chan_spec const *chan,
  458. int *val, int *val2, long mask)
  459. {
  460. struct bmg160_data *data = iio_priv(indio_dev);
  461. int ret;
  462. switch (mask) {
  463. case IIO_CHAN_INFO_RAW:
  464. switch (chan->type) {
  465. case IIO_TEMP:
  466. return bmg160_get_temp(data, val);
  467. case IIO_ANGL_VEL:
  468. if (iio_buffer_enabled(indio_dev))
  469. return -EBUSY;
  470. else
  471. return bmg160_get_axis(data, chan->scan_index,
  472. val);
  473. default:
  474. return -EINVAL;
  475. }
  476. case IIO_CHAN_INFO_OFFSET:
  477. if (chan->type == IIO_TEMP) {
  478. *val = BMG160_TEMP_CENTER_VAL;
  479. return IIO_VAL_INT;
  480. } else
  481. return -EINVAL;
  482. case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
  483. return bmg160_get_filter(data, val);
  484. case IIO_CHAN_INFO_SCALE:
  485. switch (chan->type) {
  486. case IIO_TEMP:
  487. *val = 500;
  488. return IIO_VAL_INT;
  489. case IIO_ANGL_VEL:
  490. {
  491. int i;
  492. for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
  493. if (bmg160_scale_table[i].dps_range ==
  494. data->dps_range) {
  495. *val = 0;
  496. *val2 = bmg160_scale_table[i].scale;
  497. return IIO_VAL_INT_PLUS_MICRO;
  498. }
  499. }
  500. return -EINVAL;
  501. }
  502. default:
  503. return -EINVAL;
  504. }
  505. case IIO_CHAN_INFO_SAMP_FREQ:
  506. *val2 = 0;
  507. mutex_lock(&data->mutex);
  508. ret = bmg160_get_bw(data, val);
  509. mutex_unlock(&data->mutex);
  510. return ret;
  511. default:
  512. return -EINVAL;
  513. }
  514. }
  515. static int bmg160_write_raw(struct iio_dev *indio_dev,
  516. struct iio_chan_spec const *chan,
  517. int val, int val2, long mask)
  518. {
  519. struct bmg160_data *data = iio_priv(indio_dev);
  520. int ret;
  521. switch (mask) {
  522. case IIO_CHAN_INFO_SAMP_FREQ:
  523. mutex_lock(&data->mutex);
  524. /*
  525. * Section 4.2 of spec
  526. * In suspend mode, the only supported operations are reading
  527. * registers as well as writing to the (0x14) softreset
  528. * register. Since we will be in suspend mode by default, change
  529. * mode to power on for other writes.
  530. */
  531. ret = bmg160_set_power_state(data, true);
  532. if (ret < 0) {
  533. mutex_unlock(&data->mutex);
  534. return ret;
  535. }
  536. ret = bmg160_set_bw(data, val);
  537. if (ret < 0) {
  538. bmg160_set_power_state(data, false);
  539. mutex_unlock(&data->mutex);
  540. return ret;
  541. }
  542. ret = bmg160_set_power_state(data, false);
  543. mutex_unlock(&data->mutex);
  544. return ret;
  545. case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
  546. if (val2)
  547. return -EINVAL;
  548. mutex_lock(&data->mutex);
  549. ret = bmg160_set_power_state(data, true);
  550. if (ret < 0) {
  551. bmg160_set_power_state(data, false);
  552. mutex_unlock(&data->mutex);
  553. return ret;
  554. }
  555. ret = bmg160_set_filter(data, val);
  556. if (ret < 0) {
  557. bmg160_set_power_state(data, false);
  558. mutex_unlock(&data->mutex);
  559. return ret;
  560. }
  561. ret = bmg160_set_power_state(data, false);
  562. mutex_unlock(&data->mutex);
  563. return ret;
  564. case IIO_CHAN_INFO_SCALE:
  565. if (val)
  566. return -EINVAL;
  567. mutex_lock(&data->mutex);
  568. /* Refer to comments above for the suspend mode ops */
  569. ret = bmg160_set_power_state(data, true);
  570. if (ret < 0) {
  571. mutex_unlock(&data->mutex);
  572. return ret;
  573. }
  574. ret = bmg160_set_scale(data, val2);
  575. if (ret < 0) {
  576. bmg160_set_power_state(data, false);
  577. mutex_unlock(&data->mutex);
  578. return ret;
  579. }
  580. ret = bmg160_set_power_state(data, false);
  581. mutex_unlock(&data->mutex);
  582. return ret;
  583. default:
  584. return -EINVAL;
  585. }
  586. return -EINVAL;
  587. }
  588. static int bmg160_read_event(struct iio_dev *indio_dev,
  589. const struct iio_chan_spec *chan,
  590. enum iio_event_type type,
  591. enum iio_event_direction dir,
  592. enum iio_event_info info,
  593. int *val, int *val2)
  594. {
  595. struct bmg160_data *data = iio_priv(indio_dev);
  596. *val2 = 0;
  597. switch (info) {
  598. case IIO_EV_INFO_VALUE:
  599. *val = data->slope_thres & BMG160_SLOPE_THRES_MASK;
  600. break;
  601. default:
  602. return -EINVAL;
  603. }
  604. return IIO_VAL_INT;
  605. }
  606. static int bmg160_write_event(struct iio_dev *indio_dev,
  607. const struct iio_chan_spec *chan,
  608. enum iio_event_type type,
  609. enum iio_event_direction dir,
  610. enum iio_event_info info,
  611. int val, int val2)
  612. {
  613. struct bmg160_data *data = iio_priv(indio_dev);
  614. switch (info) {
  615. case IIO_EV_INFO_VALUE:
  616. if (data->ev_enable_state)
  617. return -EBUSY;
  618. data->slope_thres &= ~BMG160_SLOPE_THRES_MASK;
  619. data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK);
  620. break;
  621. default:
  622. return -EINVAL;
  623. }
  624. return 0;
  625. }
  626. static int bmg160_read_event_config(struct iio_dev *indio_dev,
  627. const struct iio_chan_spec *chan,
  628. enum iio_event_type type,
  629. enum iio_event_direction dir)
  630. {
  631. struct bmg160_data *data = iio_priv(indio_dev);
  632. return data->ev_enable_state;
  633. }
  634. static int bmg160_write_event_config(struct iio_dev *indio_dev,
  635. const struct iio_chan_spec *chan,
  636. enum iio_event_type type,
  637. enum iio_event_direction dir,
  638. int state)
  639. {
  640. struct bmg160_data *data = iio_priv(indio_dev);
  641. int ret;
  642. if (state && data->ev_enable_state)
  643. return 0;
  644. mutex_lock(&data->mutex);
  645. if (!state && data->motion_trigger_on) {
  646. data->ev_enable_state = 0;
  647. mutex_unlock(&data->mutex);
  648. return 0;
  649. }
  650. /*
  651. * We will expect the enable and disable to do operation in
  652. * in reverse order. This will happen here anyway as our
  653. * resume operation uses sync mode runtime pm calls, the
  654. * suspend operation will be delayed by autosuspend delay
  655. * So the disable operation will still happen in reverse of
  656. * enable operation. When runtime pm is disabled the mode
  657. * is always on so sequence doesn't matter
  658. */
  659. ret = bmg160_set_power_state(data, state);
  660. if (ret < 0) {
  661. mutex_unlock(&data->mutex);
  662. return ret;
  663. }
  664. ret = bmg160_setup_any_motion_interrupt(data, state);
  665. if (ret < 0) {
  666. bmg160_set_power_state(data, false);
  667. mutex_unlock(&data->mutex);
  668. return ret;
  669. }
  670. data->ev_enable_state = state;
  671. mutex_unlock(&data->mutex);
  672. return 0;
  673. }
  674. static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("100 200 400 1000 2000");
  675. static IIO_CONST_ATTR(in_anglvel_scale_available,
  676. "0.001065 0.000532 0.000266 0.000133 0.000066");
  677. static struct attribute *bmg160_attributes[] = {
  678. &iio_const_attr_sampling_frequency_available.dev_attr.attr,
  679. &iio_const_attr_in_anglvel_scale_available.dev_attr.attr,
  680. NULL,
  681. };
  682. static const struct attribute_group bmg160_attrs_group = {
  683. .attrs = bmg160_attributes,
  684. };
  685. static const struct iio_event_spec bmg160_event = {
  686. .type = IIO_EV_TYPE_ROC,
  687. .dir = IIO_EV_DIR_EITHER,
  688. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
  689. BIT(IIO_EV_INFO_ENABLE)
  690. };
  691. #define BMG160_CHANNEL(_axis) { \
  692. .type = IIO_ANGL_VEL, \
  693. .modified = 1, \
  694. .channel2 = IIO_MOD_##_axis, \
  695. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  696. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
  697. BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
  698. BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
  699. .scan_index = AXIS_##_axis, \
  700. .scan_type = { \
  701. .sign = 's', \
  702. .realbits = 16, \
  703. .storagebits = 16, \
  704. .endianness = IIO_LE, \
  705. }, \
  706. .event_spec = &bmg160_event, \
  707. .num_event_specs = 1 \
  708. }
  709. static const struct iio_chan_spec bmg160_channels[] = {
  710. {
  711. .type = IIO_TEMP,
  712. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
  713. BIT(IIO_CHAN_INFO_SCALE) |
  714. BIT(IIO_CHAN_INFO_OFFSET),
  715. .scan_index = -1,
  716. },
  717. BMG160_CHANNEL(X),
  718. BMG160_CHANNEL(Y),
  719. BMG160_CHANNEL(Z),
  720. IIO_CHAN_SOFT_TIMESTAMP(3),
  721. };
  722. static const struct iio_info bmg160_info = {
  723. .attrs = &bmg160_attrs_group,
  724. .read_raw = bmg160_read_raw,
  725. .write_raw = bmg160_write_raw,
  726. .read_event_value = bmg160_read_event,
  727. .write_event_value = bmg160_write_event,
  728. .write_event_config = bmg160_write_event_config,
  729. .read_event_config = bmg160_read_event_config,
  730. };
  731. static const unsigned long bmg160_accel_scan_masks[] = {
  732. BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z),
  733. 0};
  734. static irqreturn_t bmg160_trigger_handler(int irq, void *p)
  735. {
  736. struct iio_poll_func *pf = p;
  737. struct iio_dev *indio_dev = pf->indio_dev;
  738. struct bmg160_data *data = iio_priv(indio_dev);
  739. int ret;
  740. mutex_lock(&data->mutex);
  741. ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L,
  742. data->buffer, AXIS_MAX * 2);
  743. mutex_unlock(&data->mutex);
  744. if (ret < 0)
  745. goto err;
  746. iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
  747. pf->timestamp);
  748. err:
  749. iio_trigger_notify_done(indio_dev->trig);
  750. return IRQ_HANDLED;
  751. }
  752. static int bmg160_trig_try_reen(struct iio_trigger *trig)
  753. {
  754. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  755. struct bmg160_data *data = iio_priv(indio_dev);
  756. struct device *dev = regmap_get_device(data->regmap);
  757. int ret;
  758. /* new data interrupts don't need ack */
  759. if (data->dready_trigger_on)
  760. return 0;
  761. /* Set latched mode interrupt and clear any latched interrupt */
  762. ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
  763. BMG160_INT_MODE_LATCH_INT |
  764. BMG160_INT_MODE_LATCH_RESET);
  765. if (ret < 0) {
  766. dev_err(dev, "Error writing reg_rst_latch\n");
  767. return ret;
  768. }
  769. return 0;
  770. }
  771. static int bmg160_data_rdy_trigger_set_state(struct iio_trigger *trig,
  772. bool state)
  773. {
  774. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  775. struct bmg160_data *data = iio_priv(indio_dev);
  776. int ret;
  777. mutex_lock(&data->mutex);
  778. if (!state && data->ev_enable_state && data->motion_trigger_on) {
  779. data->motion_trigger_on = false;
  780. mutex_unlock(&data->mutex);
  781. return 0;
  782. }
  783. /*
  784. * Refer to comment in bmg160_write_event_config for
  785. * enable/disable operation order
  786. */
  787. ret = bmg160_set_power_state(data, state);
  788. if (ret < 0) {
  789. mutex_unlock(&data->mutex);
  790. return ret;
  791. }
  792. if (data->motion_trig == trig)
  793. ret = bmg160_setup_any_motion_interrupt(data, state);
  794. else
  795. ret = bmg160_setup_new_data_interrupt(data, state);
  796. if (ret < 0) {
  797. bmg160_set_power_state(data, false);
  798. mutex_unlock(&data->mutex);
  799. return ret;
  800. }
  801. if (data->motion_trig == trig)
  802. data->motion_trigger_on = state;
  803. else
  804. data->dready_trigger_on = state;
  805. mutex_unlock(&data->mutex);
  806. return 0;
  807. }
  808. static const struct iio_trigger_ops bmg160_trigger_ops = {
  809. .set_trigger_state = bmg160_data_rdy_trigger_set_state,
  810. .try_reenable = bmg160_trig_try_reen,
  811. };
  812. static irqreturn_t bmg160_event_handler(int irq, void *private)
  813. {
  814. struct iio_dev *indio_dev = private;
  815. struct bmg160_data *data = iio_priv(indio_dev);
  816. struct device *dev = regmap_get_device(data->regmap);
  817. int ret;
  818. int dir;
  819. unsigned int val;
  820. ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val);
  821. if (ret < 0) {
  822. dev_err(dev, "Error reading reg_int_status2\n");
  823. goto ack_intr_status;
  824. }
  825. if (val & 0x08)
  826. dir = IIO_EV_DIR_RISING;
  827. else
  828. dir = IIO_EV_DIR_FALLING;
  829. if (val & BMG160_ANY_MOTION_BIT_X)
  830. iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
  831. 0,
  832. IIO_MOD_X,
  833. IIO_EV_TYPE_ROC,
  834. dir),
  835. iio_get_time_ns(indio_dev));
  836. if (val & BMG160_ANY_MOTION_BIT_Y)
  837. iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
  838. 0,
  839. IIO_MOD_Y,
  840. IIO_EV_TYPE_ROC,
  841. dir),
  842. iio_get_time_ns(indio_dev));
  843. if (val & BMG160_ANY_MOTION_BIT_Z)
  844. iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
  845. 0,
  846. IIO_MOD_Z,
  847. IIO_EV_TYPE_ROC,
  848. dir),
  849. iio_get_time_ns(indio_dev));
  850. ack_intr_status:
  851. if (!data->dready_trigger_on) {
  852. ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
  853. BMG160_INT_MODE_LATCH_INT |
  854. BMG160_INT_MODE_LATCH_RESET);
  855. if (ret < 0)
  856. dev_err(dev, "Error writing reg_rst_latch\n");
  857. }
  858. return IRQ_HANDLED;
  859. }
  860. static irqreturn_t bmg160_data_rdy_trig_poll(int irq, void *private)
  861. {
  862. struct iio_dev *indio_dev = private;
  863. struct bmg160_data *data = iio_priv(indio_dev);
  864. if (data->dready_trigger_on)
  865. iio_trigger_poll(data->dready_trig);
  866. else if (data->motion_trigger_on)
  867. iio_trigger_poll(data->motion_trig);
  868. if (data->ev_enable_state)
  869. return IRQ_WAKE_THREAD;
  870. else
  871. return IRQ_HANDLED;
  872. }
  873. static int bmg160_buffer_preenable(struct iio_dev *indio_dev)
  874. {
  875. struct bmg160_data *data = iio_priv(indio_dev);
  876. return bmg160_set_power_state(data, true);
  877. }
  878. static int bmg160_buffer_postdisable(struct iio_dev *indio_dev)
  879. {
  880. struct bmg160_data *data = iio_priv(indio_dev);
  881. return bmg160_set_power_state(data, false);
  882. }
  883. static const struct iio_buffer_setup_ops bmg160_buffer_setup_ops = {
  884. .preenable = bmg160_buffer_preenable,
  885. .postenable = iio_triggered_buffer_postenable,
  886. .predisable = iio_triggered_buffer_predisable,
  887. .postdisable = bmg160_buffer_postdisable,
  888. };
  889. static const char *bmg160_match_acpi_device(struct device *dev)
  890. {
  891. const struct acpi_device_id *id;
  892. id = acpi_match_device(dev->driver->acpi_match_table, dev);
  893. if (!id)
  894. return NULL;
  895. return dev_name(dev);
  896. }
  897. int bmg160_core_probe(struct device *dev, struct regmap *regmap, int irq,
  898. const char *name)
  899. {
  900. struct bmg160_data *data;
  901. struct iio_dev *indio_dev;
  902. int ret;
  903. indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
  904. if (!indio_dev)
  905. return -ENOMEM;
  906. data = iio_priv(indio_dev);
  907. dev_set_drvdata(dev, indio_dev);
  908. data->irq = irq;
  909. data->regmap = regmap;
  910. ret = bmg160_chip_init(data);
  911. if (ret < 0)
  912. return ret;
  913. mutex_init(&data->mutex);
  914. if (ACPI_HANDLE(dev))
  915. name = bmg160_match_acpi_device(dev);
  916. indio_dev->dev.parent = dev;
  917. indio_dev->channels = bmg160_channels;
  918. indio_dev->num_channels = ARRAY_SIZE(bmg160_channels);
  919. indio_dev->name = name;
  920. indio_dev->available_scan_masks = bmg160_accel_scan_masks;
  921. indio_dev->modes = INDIO_DIRECT_MODE;
  922. indio_dev->info = &bmg160_info;
  923. if (data->irq > 0) {
  924. ret = devm_request_threaded_irq(dev,
  925. data->irq,
  926. bmg160_data_rdy_trig_poll,
  927. bmg160_event_handler,
  928. IRQF_TRIGGER_RISING,
  929. BMG160_IRQ_NAME,
  930. indio_dev);
  931. if (ret)
  932. return ret;
  933. data->dready_trig = devm_iio_trigger_alloc(dev,
  934. "%s-dev%d",
  935. indio_dev->name,
  936. indio_dev->id);
  937. if (!data->dready_trig)
  938. return -ENOMEM;
  939. data->motion_trig = devm_iio_trigger_alloc(dev,
  940. "%s-any-motion-dev%d",
  941. indio_dev->name,
  942. indio_dev->id);
  943. if (!data->motion_trig)
  944. return -ENOMEM;
  945. data->dready_trig->dev.parent = dev;
  946. data->dready_trig->ops = &bmg160_trigger_ops;
  947. iio_trigger_set_drvdata(data->dready_trig, indio_dev);
  948. ret = iio_trigger_register(data->dready_trig);
  949. if (ret)
  950. return ret;
  951. data->motion_trig->dev.parent = dev;
  952. data->motion_trig->ops = &bmg160_trigger_ops;
  953. iio_trigger_set_drvdata(data->motion_trig, indio_dev);
  954. ret = iio_trigger_register(data->motion_trig);
  955. if (ret) {
  956. data->motion_trig = NULL;
  957. goto err_trigger_unregister;
  958. }
  959. }
  960. ret = iio_triggered_buffer_setup(indio_dev,
  961. iio_pollfunc_store_time,
  962. bmg160_trigger_handler,
  963. &bmg160_buffer_setup_ops);
  964. if (ret < 0) {
  965. dev_err(dev,
  966. "iio triggered buffer setup failed\n");
  967. goto err_trigger_unregister;
  968. }
  969. ret = pm_runtime_set_active(dev);
  970. if (ret)
  971. goto err_buffer_cleanup;
  972. pm_runtime_enable(dev);
  973. pm_runtime_set_autosuspend_delay(dev,
  974. BMG160_AUTO_SUSPEND_DELAY_MS);
  975. pm_runtime_use_autosuspend(dev);
  976. ret = iio_device_register(indio_dev);
  977. if (ret < 0) {
  978. dev_err(dev, "unable to register iio device\n");
  979. goto err_buffer_cleanup;
  980. }
  981. return 0;
  982. err_buffer_cleanup:
  983. iio_triggered_buffer_cleanup(indio_dev);
  984. err_trigger_unregister:
  985. if (data->dready_trig)
  986. iio_trigger_unregister(data->dready_trig);
  987. if (data->motion_trig)
  988. iio_trigger_unregister(data->motion_trig);
  989. return ret;
  990. }
  991. EXPORT_SYMBOL_GPL(bmg160_core_probe);
  992. void bmg160_core_remove(struct device *dev)
  993. {
  994. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  995. struct bmg160_data *data = iio_priv(indio_dev);
  996. iio_device_unregister(indio_dev);
  997. pm_runtime_disable(dev);
  998. pm_runtime_set_suspended(dev);
  999. pm_runtime_put_noidle(dev);
  1000. iio_triggered_buffer_cleanup(indio_dev);
  1001. if (data->dready_trig) {
  1002. iio_trigger_unregister(data->dready_trig);
  1003. iio_trigger_unregister(data->motion_trig);
  1004. }
  1005. mutex_lock(&data->mutex);
  1006. bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND);
  1007. mutex_unlock(&data->mutex);
  1008. }
  1009. EXPORT_SYMBOL_GPL(bmg160_core_remove);
  1010. #ifdef CONFIG_PM_SLEEP
  1011. static int bmg160_suspend(struct device *dev)
  1012. {
  1013. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1014. struct bmg160_data *data = iio_priv(indio_dev);
  1015. mutex_lock(&data->mutex);
  1016. bmg160_set_mode(data, BMG160_MODE_SUSPEND);
  1017. mutex_unlock(&data->mutex);
  1018. return 0;
  1019. }
  1020. static int bmg160_resume(struct device *dev)
  1021. {
  1022. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1023. struct bmg160_data *data = iio_priv(indio_dev);
  1024. mutex_lock(&data->mutex);
  1025. if (data->dready_trigger_on || data->motion_trigger_on ||
  1026. data->ev_enable_state)
  1027. bmg160_set_mode(data, BMG160_MODE_NORMAL);
  1028. mutex_unlock(&data->mutex);
  1029. return 0;
  1030. }
  1031. #endif
  1032. #ifdef CONFIG_PM
  1033. static int bmg160_runtime_suspend(struct device *dev)
  1034. {
  1035. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1036. struct bmg160_data *data = iio_priv(indio_dev);
  1037. int ret;
  1038. ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND);
  1039. if (ret < 0) {
  1040. dev_err(dev, "set mode failed\n");
  1041. return -EAGAIN;
  1042. }
  1043. return 0;
  1044. }
  1045. static int bmg160_runtime_resume(struct device *dev)
  1046. {
  1047. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1048. struct bmg160_data *data = iio_priv(indio_dev);
  1049. int ret;
  1050. ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
  1051. if (ret < 0)
  1052. return ret;
  1053. msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS);
  1054. return 0;
  1055. }
  1056. #endif
  1057. const struct dev_pm_ops bmg160_pm_ops = {
  1058. SET_SYSTEM_SLEEP_PM_OPS(bmg160_suspend, bmg160_resume)
  1059. SET_RUNTIME_PM_OPS(bmg160_runtime_suspend,
  1060. bmg160_runtime_resume, NULL)
  1061. };
  1062. EXPORT_SYMBOL_GPL(bmg160_pm_ops);
  1063. MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
  1064. MODULE_LICENSE("GPL v2");
  1065. MODULE_DESCRIPTION("BMG160 Gyro driver");