bmg160_core.c 30 KB

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