bmc150-accel-core.c 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * 3-axis accelerometer driver supporting many Bosch-Sensortec chips
  4. * Copyright (c) 2014, Intel Corporation.
  5. */
  6. #include <linux/module.h>
  7. #include <linux/i2c.h>
  8. #include <linux/interrupt.h>
  9. #include <linux/delay.h>
  10. #include <linux/slab.h>
  11. #include <linux/acpi.h>
  12. #include <linux/pm.h>
  13. #include <linux/pm_runtime.h>
  14. #include <linux/property.h>
  15. #include <linux/iio/iio.h>
  16. #include <linux/iio/sysfs.h>
  17. #include <linux/iio/buffer.h>
  18. #include <linux/iio/events.h>
  19. #include <linux/iio/trigger.h>
  20. #include <linux/iio/trigger_consumer.h>
  21. #include <linux/iio/triggered_buffer.h>
  22. #include <linux/regmap.h>
  23. #include <linux/regulator/consumer.h>
  24. #include "bmc150-accel.h"
  25. #define BMC150_ACCEL_REG_CHIP_ID 0x00
  26. #define BMC150_ACCEL_REG_INT_STATUS_2 0x0B
  27. #define BMC150_ACCEL_ANY_MOTION_MASK 0x07
  28. #define BMC150_ACCEL_ANY_MOTION_BIT_X BIT(0)
  29. #define BMC150_ACCEL_ANY_MOTION_BIT_Y BIT(1)
  30. #define BMC150_ACCEL_ANY_MOTION_BIT_Z BIT(2)
  31. #define BMC150_ACCEL_ANY_MOTION_BIT_SIGN BIT(3)
  32. #define BMC150_ACCEL_REG_PMU_LPW 0x11
  33. #define BMC150_ACCEL_PMU_MODE_MASK 0xE0
  34. #define BMC150_ACCEL_PMU_MODE_SHIFT 5
  35. #define BMC150_ACCEL_PMU_BIT_SLEEP_DUR_MASK 0x17
  36. #define BMC150_ACCEL_PMU_BIT_SLEEP_DUR_SHIFT 1
  37. #define BMC150_ACCEL_REG_PMU_RANGE 0x0F
  38. #define BMC150_ACCEL_DEF_RANGE_2G 0x03
  39. #define BMC150_ACCEL_DEF_RANGE_4G 0x05
  40. #define BMC150_ACCEL_DEF_RANGE_8G 0x08
  41. #define BMC150_ACCEL_DEF_RANGE_16G 0x0C
  42. /* Default BW: 125Hz */
  43. #define BMC150_ACCEL_REG_PMU_BW 0x10
  44. #define BMC150_ACCEL_DEF_BW 125
  45. #define BMC150_ACCEL_REG_RESET 0x14
  46. #define BMC150_ACCEL_RESET_VAL 0xB6
  47. #define BMC150_ACCEL_REG_INT_MAP_0 0x19
  48. #define BMC150_ACCEL_INT_MAP_0_BIT_INT1_SLOPE BIT(2)
  49. #define BMC150_ACCEL_REG_INT_MAP_1 0x1A
  50. #define BMC150_ACCEL_INT_MAP_1_BIT_INT1_DATA BIT(0)
  51. #define BMC150_ACCEL_INT_MAP_1_BIT_INT1_FWM BIT(1)
  52. #define BMC150_ACCEL_INT_MAP_1_BIT_INT1_FFULL BIT(2)
  53. #define BMC150_ACCEL_INT_MAP_1_BIT_INT2_FFULL BIT(5)
  54. #define BMC150_ACCEL_INT_MAP_1_BIT_INT2_FWM BIT(6)
  55. #define BMC150_ACCEL_INT_MAP_1_BIT_INT2_DATA BIT(7)
  56. #define BMC150_ACCEL_REG_INT_MAP_2 0x1B
  57. #define BMC150_ACCEL_INT_MAP_2_BIT_INT2_SLOPE BIT(2)
  58. #define BMC150_ACCEL_REG_INT_RST_LATCH 0x21
  59. #define BMC150_ACCEL_INT_MODE_LATCH_RESET 0x80
  60. #define BMC150_ACCEL_INT_MODE_LATCH_INT 0x0F
  61. #define BMC150_ACCEL_INT_MODE_NON_LATCH_INT 0x00
  62. #define BMC150_ACCEL_REG_INT_EN_0 0x16
  63. #define BMC150_ACCEL_INT_EN_BIT_SLP_X BIT(0)
  64. #define BMC150_ACCEL_INT_EN_BIT_SLP_Y BIT(1)
  65. #define BMC150_ACCEL_INT_EN_BIT_SLP_Z BIT(2)
  66. #define BMC150_ACCEL_REG_INT_EN_1 0x17
  67. #define BMC150_ACCEL_INT_EN_BIT_DATA_EN BIT(4)
  68. #define BMC150_ACCEL_INT_EN_BIT_FFULL_EN BIT(5)
  69. #define BMC150_ACCEL_INT_EN_BIT_FWM_EN BIT(6)
  70. #define BMC150_ACCEL_REG_INT_OUT_CTRL 0x20
  71. #define BMC150_ACCEL_INT_OUT_CTRL_INT1_LVL BIT(0)
  72. #define BMC150_ACCEL_INT_OUT_CTRL_INT2_LVL BIT(2)
  73. #define BMC150_ACCEL_REG_INT_5 0x27
  74. #define BMC150_ACCEL_SLOPE_DUR_MASK 0x03
  75. #define BMC150_ACCEL_REG_INT_6 0x28
  76. #define BMC150_ACCEL_SLOPE_THRES_MASK 0xFF
  77. /* Slope duration in terms of number of samples */
  78. #define BMC150_ACCEL_DEF_SLOPE_DURATION 1
  79. /* in terms of multiples of g's/LSB, based on range */
  80. #define BMC150_ACCEL_DEF_SLOPE_THRESHOLD 1
  81. #define BMC150_ACCEL_REG_XOUT_L 0x02
  82. #define BMC150_ACCEL_MAX_STARTUP_TIME_MS 100
  83. /* Sleep Duration values */
  84. #define BMC150_ACCEL_SLEEP_500_MICRO 0x05
  85. #define BMC150_ACCEL_SLEEP_1_MS 0x06
  86. #define BMC150_ACCEL_SLEEP_2_MS 0x07
  87. #define BMC150_ACCEL_SLEEP_4_MS 0x08
  88. #define BMC150_ACCEL_SLEEP_6_MS 0x09
  89. #define BMC150_ACCEL_SLEEP_10_MS 0x0A
  90. #define BMC150_ACCEL_SLEEP_25_MS 0x0B
  91. #define BMC150_ACCEL_SLEEP_50_MS 0x0C
  92. #define BMC150_ACCEL_SLEEP_100_MS 0x0D
  93. #define BMC150_ACCEL_SLEEP_500_MS 0x0E
  94. #define BMC150_ACCEL_SLEEP_1_SEC 0x0F
  95. #define BMC150_ACCEL_REG_TEMP 0x08
  96. #define BMC150_ACCEL_TEMP_CENTER_VAL 23
  97. #define BMC150_ACCEL_AXIS_TO_REG(axis) (BMC150_ACCEL_REG_XOUT_L + (axis * 2))
  98. #define BMC150_AUTO_SUSPEND_DELAY_MS 2000
  99. #define BMC150_ACCEL_REG_FIFO_STATUS 0x0E
  100. #define BMC150_ACCEL_REG_FIFO_CONFIG0 0x30
  101. #define BMC150_ACCEL_REG_FIFO_CONFIG1 0x3E
  102. #define BMC150_ACCEL_REG_FIFO_DATA 0x3F
  103. #define BMC150_ACCEL_FIFO_LENGTH 32
  104. enum bmc150_accel_axis {
  105. AXIS_X,
  106. AXIS_Y,
  107. AXIS_Z,
  108. AXIS_MAX,
  109. };
  110. enum bmc150_power_modes {
  111. BMC150_ACCEL_SLEEP_MODE_NORMAL,
  112. BMC150_ACCEL_SLEEP_MODE_DEEP_SUSPEND,
  113. BMC150_ACCEL_SLEEP_MODE_LPM,
  114. BMC150_ACCEL_SLEEP_MODE_SUSPEND = 0x04,
  115. };
  116. struct bmc150_scale_info {
  117. int scale;
  118. u8 reg_range;
  119. };
  120. struct bmc150_accel_chip_info {
  121. const char *name;
  122. u8 chip_id;
  123. const struct iio_chan_spec *channels;
  124. int num_channels;
  125. const struct bmc150_scale_info scale_table[4];
  126. };
  127. static const struct {
  128. int val;
  129. int val2;
  130. u8 bw_bits;
  131. } bmc150_accel_samp_freq_table[] = { {15, 620000, 0x08},
  132. {31, 260000, 0x09},
  133. {62, 500000, 0x0A},
  134. {125, 0, 0x0B},
  135. {250, 0, 0x0C},
  136. {500, 0, 0x0D},
  137. {1000, 0, 0x0E},
  138. {2000, 0, 0x0F} };
  139. static __maybe_unused const struct {
  140. int bw_bits;
  141. int msec;
  142. } bmc150_accel_sample_upd_time[] = { {0x08, 64},
  143. {0x09, 32},
  144. {0x0A, 16},
  145. {0x0B, 8},
  146. {0x0C, 4},
  147. {0x0D, 2},
  148. {0x0E, 1},
  149. {0x0F, 1} };
  150. static const struct {
  151. int sleep_dur;
  152. u8 reg_value;
  153. } bmc150_accel_sleep_value_table[] = { {0, 0},
  154. {500, BMC150_ACCEL_SLEEP_500_MICRO},
  155. {1000, BMC150_ACCEL_SLEEP_1_MS},
  156. {2000, BMC150_ACCEL_SLEEP_2_MS},
  157. {4000, BMC150_ACCEL_SLEEP_4_MS},
  158. {6000, BMC150_ACCEL_SLEEP_6_MS},
  159. {10000, BMC150_ACCEL_SLEEP_10_MS},
  160. {25000, BMC150_ACCEL_SLEEP_25_MS},
  161. {50000, BMC150_ACCEL_SLEEP_50_MS},
  162. {100000, BMC150_ACCEL_SLEEP_100_MS},
  163. {500000, BMC150_ACCEL_SLEEP_500_MS},
  164. {1000000, BMC150_ACCEL_SLEEP_1_SEC} };
  165. const struct regmap_config bmc150_regmap_conf = {
  166. .reg_bits = 8,
  167. .val_bits = 8,
  168. .max_register = 0x3f,
  169. };
  170. EXPORT_SYMBOL_NS_GPL(bmc150_regmap_conf, "IIO_BMC150");
  171. static int bmc150_accel_set_mode(struct bmc150_accel_data *data,
  172. enum bmc150_power_modes mode,
  173. int dur_us)
  174. {
  175. struct device *dev = regmap_get_device(data->regmap);
  176. int i;
  177. int ret;
  178. u8 lpw_bits;
  179. int dur_val = -1;
  180. if (dur_us > 0) {
  181. for (i = 0; i < ARRAY_SIZE(bmc150_accel_sleep_value_table);
  182. ++i) {
  183. if (bmc150_accel_sleep_value_table[i].sleep_dur ==
  184. dur_us)
  185. dur_val =
  186. bmc150_accel_sleep_value_table[i].reg_value;
  187. }
  188. } else {
  189. dur_val = 0;
  190. }
  191. if (dur_val < 0)
  192. return -EINVAL;
  193. lpw_bits = mode << BMC150_ACCEL_PMU_MODE_SHIFT;
  194. lpw_bits |= (dur_val << BMC150_ACCEL_PMU_BIT_SLEEP_DUR_SHIFT);
  195. dev_dbg(dev, "Set Mode bits %x\n", lpw_bits);
  196. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_LPW, lpw_bits);
  197. if (ret < 0) {
  198. dev_err(dev, "Error writing reg_pmu_lpw\n");
  199. return ret;
  200. }
  201. return 0;
  202. }
  203. static int bmc150_accel_set_bw(struct bmc150_accel_data *data, int val,
  204. int val2)
  205. {
  206. int i;
  207. int ret;
  208. for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) {
  209. if (bmc150_accel_samp_freq_table[i].val == val &&
  210. bmc150_accel_samp_freq_table[i].val2 == val2) {
  211. ret = regmap_write(data->regmap,
  212. BMC150_ACCEL_REG_PMU_BW,
  213. bmc150_accel_samp_freq_table[i].bw_bits);
  214. if (ret < 0)
  215. return ret;
  216. data->bw_bits =
  217. bmc150_accel_samp_freq_table[i].bw_bits;
  218. return 0;
  219. }
  220. }
  221. return -EINVAL;
  222. }
  223. static int bmc150_accel_update_slope(struct bmc150_accel_data *data)
  224. {
  225. struct device *dev = regmap_get_device(data->regmap);
  226. int ret;
  227. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_6,
  228. data->slope_thres);
  229. if (ret < 0) {
  230. dev_err(dev, "Error writing reg_int_6\n");
  231. return ret;
  232. }
  233. ret = regmap_update_bits(data->regmap, BMC150_ACCEL_REG_INT_5,
  234. BMC150_ACCEL_SLOPE_DUR_MASK, data->slope_dur);
  235. if (ret < 0) {
  236. dev_err(dev, "Error updating reg_int_5\n");
  237. return ret;
  238. }
  239. dev_dbg(dev, "%x %x\n", data->slope_thres, data->slope_dur);
  240. return ret;
  241. }
  242. static int bmc150_accel_any_motion_setup(struct bmc150_accel_trigger *t,
  243. bool state)
  244. {
  245. if (state)
  246. return bmc150_accel_update_slope(t->data);
  247. return 0;
  248. }
  249. static int bmc150_accel_get_bw(struct bmc150_accel_data *data, int *val,
  250. int *val2)
  251. {
  252. int i;
  253. for (i = 0; i < ARRAY_SIZE(bmc150_accel_samp_freq_table); ++i) {
  254. if (bmc150_accel_samp_freq_table[i].bw_bits == data->bw_bits) {
  255. *val = bmc150_accel_samp_freq_table[i].val;
  256. *val2 = bmc150_accel_samp_freq_table[i].val2;
  257. return IIO_VAL_INT_PLUS_MICRO;
  258. }
  259. }
  260. return -EINVAL;
  261. }
  262. #ifdef CONFIG_PM
  263. static int bmc150_accel_get_startup_times(struct bmc150_accel_data *data)
  264. {
  265. int i;
  266. for (i = 0; i < ARRAY_SIZE(bmc150_accel_sample_upd_time); ++i) {
  267. if (bmc150_accel_sample_upd_time[i].bw_bits == data->bw_bits)
  268. return bmc150_accel_sample_upd_time[i].msec;
  269. }
  270. return BMC150_ACCEL_MAX_STARTUP_TIME_MS;
  271. }
  272. static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on)
  273. {
  274. struct device *dev = regmap_get_device(data->regmap);
  275. int ret;
  276. if (on)
  277. ret = pm_runtime_resume_and_get(dev);
  278. else
  279. ret = pm_runtime_put_autosuspend(dev);
  280. if (ret < 0) {
  281. dev_err(dev,
  282. "Failed: %s for %d\n", __func__, on);
  283. return ret;
  284. }
  285. return 0;
  286. }
  287. #else
  288. static int bmc150_accel_set_power_state(struct bmc150_accel_data *data, bool on)
  289. {
  290. return 0;
  291. }
  292. #endif
  293. #ifdef CONFIG_ACPI
  294. /*
  295. * Support for getting accelerometer information from BOSC0200 ACPI nodes.
  296. *
  297. * There are 2 variants of the BOSC0200 ACPI node. Some 2-in-1s with 360 degree
  298. * hinges declare 2 I2C ACPI-resources for 2 accelerometers, 1 in the display
  299. * and 1 in the base of the 2-in-1. On these 2-in-1s the ROMS ACPI object
  300. * contains the mount-matrix for the sensor in the display and ROMK contains
  301. * the mount-matrix for the sensor in the base. On devices using a single
  302. * sensor there is a ROTM ACPI object which contains the mount-matrix.
  303. *
  304. * Here is an incomplete list of devices known to use 1 of these setups:
  305. *
  306. * Yoga devices with 2 accelerometers using ROMS + ROMK for the mount-matrices:
  307. * Lenovo Thinkpad Yoga 11e 3th gen
  308. * Lenovo Thinkpad Yoga 11e 4th gen
  309. *
  310. * Tablets using a single accelerometer using ROTM for the mount-matrix:
  311. * Chuwi Hi8 Pro (CWI513)
  312. * Chuwi Vi8 Plus (CWI519)
  313. * Chuwi Hi13
  314. * Irbis TW90
  315. * Jumper EZpad mini 3
  316. * Onda V80 plus
  317. * Predia Basic Tablet
  318. */
  319. static bool bmc150_apply_bosc0200_acpi_orientation(struct device *dev,
  320. struct iio_mount_matrix *orientation)
  321. {
  322. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  323. acpi_handle handle = ACPI_HANDLE(dev);
  324. char *name, *alt_name, *label;
  325. if (strcmp(dev_name(dev), "i2c-BOSC0200:base") == 0) {
  326. alt_name = "ROMK";
  327. label = "accel-base";
  328. } else {
  329. alt_name = "ROMS";
  330. label = "accel-display";
  331. }
  332. if (acpi_has_method(handle, "ROTM")) {
  333. name = "ROTM";
  334. } else if (acpi_has_method(handle, alt_name)) {
  335. name = alt_name;
  336. indio_dev->label = label;
  337. } else {
  338. return false;
  339. }
  340. return iio_read_acpi_mount_matrix(dev, orientation, name);
  341. }
  342. static bool bmc150_apply_dual250e_acpi_orientation(struct device *dev,
  343. struct iio_mount_matrix *orientation)
  344. {
  345. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  346. if (strcmp(dev_name(dev), "i2c-DUAL250E:base") == 0)
  347. indio_dev->label = "accel-base";
  348. else
  349. indio_dev->label = "accel-display";
  350. return false; /* DUAL250E fwnodes have no mount matrix info */
  351. }
  352. static bool bmc150_apply_acpi_orientation(struct device *dev,
  353. struct iio_mount_matrix *orientation)
  354. {
  355. struct acpi_device *adev = ACPI_COMPANION(dev);
  356. if (adev && acpi_dev_hid_uid_match(adev, "BOSC0200", NULL))
  357. return bmc150_apply_bosc0200_acpi_orientation(dev, orientation);
  358. if (adev && acpi_dev_hid_uid_match(adev, "DUAL250E", NULL))
  359. return bmc150_apply_dual250e_acpi_orientation(dev, orientation);
  360. return false;
  361. }
  362. #else
  363. static bool bmc150_apply_acpi_orientation(struct device *dev,
  364. struct iio_mount_matrix *orientation)
  365. {
  366. return false;
  367. }
  368. #endif
  369. struct bmc150_accel_interrupt_info {
  370. u8 map_reg;
  371. u8 map_bitmask;
  372. u8 en_reg;
  373. u8 en_bitmask;
  374. };
  375. static const struct bmc150_accel_interrupt_info
  376. bmc150_accel_interrupts_int1[BMC150_ACCEL_INTERRUPTS] = {
  377. { /* data ready interrupt */
  378. .map_reg = BMC150_ACCEL_REG_INT_MAP_1,
  379. .map_bitmask = BMC150_ACCEL_INT_MAP_1_BIT_INT1_DATA,
  380. .en_reg = BMC150_ACCEL_REG_INT_EN_1,
  381. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_DATA_EN,
  382. },
  383. { /* motion interrupt */
  384. .map_reg = BMC150_ACCEL_REG_INT_MAP_0,
  385. .map_bitmask = BMC150_ACCEL_INT_MAP_0_BIT_INT1_SLOPE,
  386. .en_reg = BMC150_ACCEL_REG_INT_EN_0,
  387. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_SLP_X |
  388. BMC150_ACCEL_INT_EN_BIT_SLP_Y |
  389. BMC150_ACCEL_INT_EN_BIT_SLP_Z
  390. },
  391. { /* fifo watermark interrupt */
  392. .map_reg = BMC150_ACCEL_REG_INT_MAP_1,
  393. .map_bitmask = BMC150_ACCEL_INT_MAP_1_BIT_INT1_FWM,
  394. .en_reg = BMC150_ACCEL_REG_INT_EN_1,
  395. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_FWM_EN,
  396. },
  397. };
  398. static const struct bmc150_accel_interrupt_info
  399. bmc150_accel_interrupts_int2[BMC150_ACCEL_INTERRUPTS] = {
  400. { /* data ready interrupt */
  401. .map_reg = BMC150_ACCEL_REG_INT_MAP_1,
  402. .map_bitmask = BMC150_ACCEL_INT_MAP_1_BIT_INT2_DATA,
  403. .en_reg = BMC150_ACCEL_REG_INT_EN_1,
  404. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_DATA_EN,
  405. },
  406. { /* motion interrupt */
  407. .map_reg = BMC150_ACCEL_REG_INT_MAP_2,
  408. .map_bitmask = BMC150_ACCEL_INT_MAP_2_BIT_INT2_SLOPE,
  409. .en_reg = BMC150_ACCEL_REG_INT_EN_0,
  410. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_SLP_X |
  411. BMC150_ACCEL_INT_EN_BIT_SLP_Y |
  412. BMC150_ACCEL_INT_EN_BIT_SLP_Z
  413. },
  414. { /* fifo watermark interrupt */
  415. .map_reg = BMC150_ACCEL_REG_INT_MAP_1,
  416. .map_bitmask = BMC150_ACCEL_INT_MAP_1_BIT_INT2_FWM,
  417. .en_reg = BMC150_ACCEL_REG_INT_EN_1,
  418. .en_bitmask = BMC150_ACCEL_INT_EN_BIT_FWM_EN,
  419. },
  420. };
  421. static void bmc150_accel_interrupts_setup(struct iio_dev *indio_dev,
  422. struct bmc150_accel_data *data, int irq)
  423. {
  424. const struct bmc150_accel_interrupt_info *irq_info = NULL;
  425. struct device *dev = regmap_get_device(data->regmap);
  426. int i;
  427. /*
  428. * For now we map all interrupts to the same output pin.
  429. * However, some boards may have just INT2 (and not INT1) connected,
  430. * so we try to detect which IRQ it is based on the interrupt-names.
  431. * Without interrupt-names, we assume the irq belongs to INT1.
  432. */
  433. irq_info = bmc150_accel_interrupts_int1;
  434. if (data->type == BOSCH_BMC156 ||
  435. irq == fwnode_irq_get_byname(dev_fwnode(dev), "INT2"))
  436. irq_info = bmc150_accel_interrupts_int2;
  437. for (i = 0; i < BMC150_ACCEL_INTERRUPTS; i++)
  438. data->interrupts[i].info = &irq_info[i];
  439. }
  440. static int bmc150_accel_set_interrupt(struct bmc150_accel_data *data, int i,
  441. bool state)
  442. {
  443. struct device *dev = regmap_get_device(data->regmap);
  444. struct bmc150_accel_interrupt *intr = &data->interrupts[i];
  445. const struct bmc150_accel_interrupt_info *info = intr->info;
  446. int ret;
  447. /* We do not always have an IRQ */
  448. if (data->irq <= 0)
  449. return 0;
  450. if (state) {
  451. if (atomic_inc_return(&intr->users) > 1)
  452. return 0;
  453. } else {
  454. if (atomic_dec_return(&intr->users) > 0)
  455. return 0;
  456. }
  457. /*
  458. * We will expect the enable and disable to do operation in reverse
  459. * order. This will happen here anyway, as our resume operation uses
  460. * sync mode runtime pm calls. The suspend operation will be delayed
  461. * by autosuspend delay.
  462. * So the disable operation will still happen in reverse order of
  463. * enable operation. When runtime pm is disabled the mode is always on,
  464. * so sequence doesn't matter.
  465. */
  466. ret = bmc150_accel_set_power_state(data, state);
  467. if (ret < 0)
  468. return ret;
  469. /* map the interrupt to the appropriate pins */
  470. ret = regmap_update_bits(data->regmap, info->map_reg, info->map_bitmask,
  471. (state ? info->map_bitmask : 0));
  472. if (ret < 0) {
  473. dev_err(dev, "Error updating reg_int_map\n");
  474. goto out_fix_power_state;
  475. }
  476. /* enable/disable the interrupt */
  477. ret = regmap_update_bits(data->regmap, info->en_reg, info->en_bitmask,
  478. (state ? info->en_bitmask : 0));
  479. if (ret < 0) {
  480. dev_err(dev, "Error updating reg_int_en\n");
  481. goto out_fix_power_state;
  482. }
  483. return 0;
  484. out_fix_power_state:
  485. bmc150_accel_set_power_state(data, false);
  486. return ret;
  487. }
  488. static int bmc150_accel_set_scale(struct bmc150_accel_data *data, int val)
  489. {
  490. struct device *dev = regmap_get_device(data->regmap);
  491. int ret, i;
  492. for (i = 0; i < ARRAY_SIZE(data->chip_info->scale_table); ++i) {
  493. if (data->chip_info->scale_table[i].scale == val) {
  494. ret = regmap_write(data->regmap,
  495. BMC150_ACCEL_REG_PMU_RANGE,
  496. data->chip_info->scale_table[i].reg_range);
  497. if (ret < 0) {
  498. dev_err(dev, "Error writing pmu_range\n");
  499. return ret;
  500. }
  501. data->range = data->chip_info->scale_table[i].reg_range;
  502. return 0;
  503. }
  504. }
  505. return -EINVAL;
  506. }
  507. static int bmc150_accel_get_temp(struct bmc150_accel_data *data, int *val)
  508. {
  509. struct device *dev = regmap_get_device(data->regmap);
  510. int ret;
  511. unsigned int value;
  512. mutex_lock(&data->mutex);
  513. ret = regmap_read(data->regmap, BMC150_ACCEL_REG_TEMP, &value);
  514. if (ret < 0) {
  515. dev_err(dev, "Error reading reg_temp\n");
  516. mutex_unlock(&data->mutex);
  517. return ret;
  518. }
  519. *val = sign_extend32(value, 7);
  520. mutex_unlock(&data->mutex);
  521. return IIO_VAL_INT;
  522. }
  523. static int bmc150_accel_get_axis(struct bmc150_accel_data *data,
  524. struct iio_chan_spec const *chan,
  525. int *val)
  526. {
  527. struct device *dev = regmap_get_device(data->regmap);
  528. int ret;
  529. int axis = chan->scan_index;
  530. __le16 raw_val;
  531. mutex_lock(&data->mutex);
  532. ret = bmc150_accel_set_power_state(data, true);
  533. if (ret < 0) {
  534. mutex_unlock(&data->mutex);
  535. return ret;
  536. }
  537. ret = regmap_bulk_read(data->regmap, BMC150_ACCEL_AXIS_TO_REG(axis),
  538. &raw_val, sizeof(raw_val));
  539. if (ret < 0) {
  540. dev_err(dev, "Error reading axis %d\n", axis);
  541. bmc150_accel_set_power_state(data, false);
  542. mutex_unlock(&data->mutex);
  543. return ret;
  544. }
  545. *val = sign_extend32(le16_to_cpu(raw_val) >> chan->scan_type.shift,
  546. chan->scan_type.realbits - 1);
  547. ret = bmc150_accel_set_power_state(data, false);
  548. mutex_unlock(&data->mutex);
  549. if (ret < 0)
  550. return ret;
  551. return IIO_VAL_INT;
  552. }
  553. static int bmc150_accel_read_raw(struct iio_dev *indio_dev,
  554. struct iio_chan_spec const *chan,
  555. int *val, int *val2, long mask)
  556. {
  557. struct bmc150_accel_data *data = iio_priv(indio_dev);
  558. int ret;
  559. switch (mask) {
  560. case IIO_CHAN_INFO_RAW:
  561. switch (chan->type) {
  562. case IIO_TEMP:
  563. return bmc150_accel_get_temp(data, val);
  564. case IIO_ACCEL:
  565. if (iio_buffer_enabled(indio_dev))
  566. return -EBUSY;
  567. else
  568. return bmc150_accel_get_axis(data, chan, val);
  569. default:
  570. return -EINVAL;
  571. }
  572. case IIO_CHAN_INFO_OFFSET:
  573. if (chan->type == IIO_TEMP) {
  574. *val = BMC150_ACCEL_TEMP_CENTER_VAL;
  575. return IIO_VAL_INT;
  576. } else {
  577. return -EINVAL;
  578. }
  579. case IIO_CHAN_INFO_SCALE:
  580. *val = 0;
  581. switch (chan->type) {
  582. case IIO_TEMP:
  583. *val2 = 500000;
  584. return IIO_VAL_INT_PLUS_MICRO;
  585. case IIO_ACCEL:
  586. {
  587. int i;
  588. const struct bmc150_scale_info *si;
  589. int st_size = ARRAY_SIZE(data->chip_info->scale_table);
  590. for (i = 0; i < st_size; ++i) {
  591. si = &data->chip_info->scale_table[i];
  592. if (si->reg_range == data->range) {
  593. *val2 = si->scale;
  594. return IIO_VAL_INT_PLUS_MICRO;
  595. }
  596. }
  597. return -EINVAL;
  598. }
  599. default:
  600. return -EINVAL;
  601. }
  602. case IIO_CHAN_INFO_SAMP_FREQ:
  603. mutex_lock(&data->mutex);
  604. ret = bmc150_accel_get_bw(data, val, val2);
  605. mutex_unlock(&data->mutex);
  606. return ret;
  607. default:
  608. return -EINVAL;
  609. }
  610. }
  611. static int bmc150_accel_write_raw(struct iio_dev *indio_dev,
  612. struct iio_chan_spec const *chan,
  613. int val, int val2, long mask)
  614. {
  615. struct bmc150_accel_data *data = iio_priv(indio_dev);
  616. int ret;
  617. switch (mask) {
  618. case IIO_CHAN_INFO_SAMP_FREQ:
  619. mutex_lock(&data->mutex);
  620. ret = bmc150_accel_set_bw(data, val, val2);
  621. mutex_unlock(&data->mutex);
  622. break;
  623. case IIO_CHAN_INFO_SCALE:
  624. if (val)
  625. return -EINVAL;
  626. mutex_lock(&data->mutex);
  627. ret = bmc150_accel_set_scale(data, val2);
  628. mutex_unlock(&data->mutex);
  629. return ret;
  630. default:
  631. ret = -EINVAL;
  632. }
  633. return ret;
  634. }
  635. static int bmc150_accel_read_event(struct iio_dev *indio_dev,
  636. const struct iio_chan_spec *chan,
  637. enum iio_event_type type,
  638. enum iio_event_direction dir,
  639. enum iio_event_info info,
  640. int *val, int *val2)
  641. {
  642. struct bmc150_accel_data *data = iio_priv(indio_dev);
  643. *val2 = 0;
  644. switch (info) {
  645. case IIO_EV_INFO_VALUE:
  646. *val = data->slope_thres;
  647. break;
  648. case IIO_EV_INFO_PERIOD:
  649. *val = data->slope_dur;
  650. break;
  651. default:
  652. return -EINVAL;
  653. }
  654. return IIO_VAL_INT;
  655. }
  656. static int bmc150_accel_write_event(struct iio_dev *indio_dev,
  657. const struct iio_chan_spec *chan,
  658. enum iio_event_type type,
  659. enum iio_event_direction dir,
  660. enum iio_event_info info,
  661. int val, int val2)
  662. {
  663. struct bmc150_accel_data *data = iio_priv(indio_dev);
  664. if (data->ev_enable_state)
  665. return -EBUSY;
  666. switch (info) {
  667. case IIO_EV_INFO_VALUE:
  668. data->slope_thres = val & BMC150_ACCEL_SLOPE_THRES_MASK;
  669. break;
  670. case IIO_EV_INFO_PERIOD:
  671. data->slope_dur = val & BMC150_ACCEL_SLOPE_DUR_MASK;
  672. break;
  673. default:
  674. return -EINVAL;
  675. }
  676. return 0;
  677. }
  678. static int bmc150_accel_read_event_config(struct iio_dev *indio_dev,
  679. const struct iio_chan_spec *chan,
  680. enum iio_event_type type,
  681. enum iio_event_direction dir)
  682. {
  683. struct bmc150_accel_data *data = iio_priv(indio_dev);
  684. return data->ev_enable_state;
  685. }
  686. static int bmc150_accel_write_event_config(struct iio_dev *indio_dev,
  687. const struct iio_chan_spec *chan,
  688. enum iio_event_type type,
  689. enum iio_event_direction dir,
  690. bool state)
  691. {
  692. struct bmc150_accel_data *data = iio_priv(indio_dev);
  693. int ret;
  694. if (state == data->ev_enable_state)
  695. return 0;
  696. mutex_lock(&data->mutex);
  697. ret = bmc150_accel_set_interrupt(data, BMC150_ACCEL_INT_ANY_MOTION,
  698. state);
  699. if (ret < 0) {
  700. mutex_unlock(&data->mutex);
  701. return ret;
  702. }
  703. data->ev_enable_state = state;
  704. mutex_unlock(&data->mutex);
  705. return 0;
  706. }
  707. static int bmc150_accel_validate_trigger(struct iio_dev *indio_dev,
  708. struct iio_trigger *trig)
  709. {
  710. struct bmc150_accel_data *data = iio_priv(indio_dev);
  711. int i;
  712. for (i = 0; i < BMC150_ACCEL_TRIGGERS; i++) {
  713. if (data->triggers[i].indio_trig == trig)
  714. return 0;
  715. }
  716. return -EINVAL;
  717. }
  718. static ssize_t bmc150_accel_get_fifo_watermark(struct device *dev,
  719. struct device_attribute *attr,
  720. char *buf)
  721. {
  722. struct iio_dev *indio_dev = dev_to_iio_dev(dev);
  723. struct bmc150_accel_data *data = iio_priv(indio_dev);
  724. int wm;
  725. mutex_lock(&data->mutex);
  726. wm = data->watermark;
  727. mutex_unlock(&data->mutex);
  728. return sprintf(buf, "%d\n", wm);
  729. }
  730. static ssize_t bmc150_accel_get_fifo_state(struct device *dev,
  731. struct device_attribute *attr,
  732. char *buf)
  733. {
  734. struct iio_dev *indio_dev = dev_to_iio_dev(dev);
  735. struct bmc150_accel_data *data = iio_priv(indio_dev);
  736. bool state;
  737. mutex_lock(&data->mutex);
  738. state = data->fifo_mode;
  739. mutex_unlock(&data->mutex);
  740. return sprintf(buf, "%d\n", state);
  741. }
  742. static const struct iio_mount_matrix *
  743. bmc150_accel_get_mount_matrix(const struct iio_dev *indio_dev,
  744. const struct iio_chan_spec *chan)
  745. {
  746. struct bmc150_accel_data *data = iio_priv(indio_dev);
  747. return &data->orientation;
  748. }
  749. static const struct iio_chan_spec_ext_info bmc150_accel_ext_info[] = {
  750. IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bmc150_accel_get_mount_matrix),
  751. { }
  752. };
  753. IIO_STATIC_CONST_DEVICE_ATTR(hwfifo_watermark_min, "1");
  754. IIO_STATIC_CONST_DEVICE_ATTR(hwfifo_watermark_max,
  755. __stringify(BMC150_ACCEL_FIFO_LENGTH));
  756. static IIO_DEVICE_ATTR(hwfifo_enabled, S_IRUGO,
  757. bmc150_accel_get_fifo_state, NULL, 0);
  758. static IIO_DEVICE_ATTR(hwfifo_watermark, S_IRUGO,
  759. bmc150_accel_get_fifo_watermark, NULL, 0);
  760. static const struct iio_dev_attr *bmc150_accel_fifo_attributes[] = {
  761. &iio_dev_attr_hwfifo_watermark_min,
  762. &iio_dev_attr_hwfifo_watermark_max,
  763. &iio_dev_attr_hwfifo_watermark,
  764. &iio_dev_attr_hwfifo_enabled,
  765. NULL,
  766. };
  767. static int bmc150_accel_set_watermark(struct iio_dev *indio_dev, unsigned val)
  768. {
  769. struct bmc150_accel_data *data = iio_priv(indio_dev);
  770. if (val > BMC150_ACCEL_FIFO_LENGTH)
  771. val = BMC150_ACCEL_FIFO_LENGTH;
  772. mutex_lock(&data->mutex);
  773. data->watermark = val;
  774. mutex_unlock(&data->mutex);
  775. return 0;
  776. }
  777. /*
  778. * We must read at least one full frame in one burst, otherwise the rest of the
  779. * frame data is discarded.
  780. */
  781. static int bmc150_accel_fifo_transfer(struct bmc150_accel_data *data,
  782. char *buffer, int samples)
  783. {
  784. struct device *dev = regmap_get_device(data->regmap);
  785. int sample_length = 3 * 2;
  786. int ret;
  787. int total_length = samples * sample_length;
  788. ret = regmap_raw_read(data->regmap, BMC150_ACCEL_REG_FIFO_DATA,
  789. buffer, total_length);
  790. if (ret)
  791. dev_err(dev,
  792. "Error transferring data from fifo: %d\n", ret);
  793. return ret;
  794. }
  795. static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev,
  796. unsigned samples, bool irq)
  797. {
  798. struct bmc150_accel_data *data = iio_priv(indio_dev);
  799. struct device *dev = regmap_get_device(data->regmap);
  800. int ret, i;
  801. u8 count;
  802. u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
  803. int64_t tstamp;
  804. uint64_t sample_period;
  805. unsigned int val;
  806. ret = regmap_read(data->regmap, BMC150_ACCEL_REG_FIFO_STATUS, &val);
  807. if (ret < 0) {
  808. dev_err(dev, "Error reading reg_fifo_status\n");
  809. return ret;
  810. }
  811. count = val & 0x7F;
  812. if (!count)
  813. return 0;
  814. /*
  815. * If we getting called from IRQ handler we know the stored timestamp is
  816. * fairly accurate for the last stored sample. Otherwise, if we are
  817. * called as a result of a read operation from userspace and hence
  818. * before the watermark interrupt was triggered, take a timestamp
  819. * now. We can fall anywhere in between two samples so the error in this
  820. * case is at most one sample period.
  821. */
  822. if (!irq) {
  823. data->old_timestamp = data->timestamp;
  824. data->timestamp = iio_get_time_ns(indio_dev);
  825. }
  826. /*
  827. * Approximate timestamps for each of the sample based on the sampling
  828. * frequency, timestamp for last sample and number of samples.
  829. *
  830. * Note that we can't use the current bandwidth settings to compute the
  831. * sample period because the sample rate varies with the device
  832. * (e.g. between 31.70ms to 32.20ms for a bandwidth of 15.63HZ). That
  833. * small variation adds when we store a large number of samples and
  834. * creates significant jitter between the last and first samples in
  835. * different batches (e.g. 32ms vs 21ms).
  836. *
  837. * To avoid this issue we compute the actual sample period ourselves
  838. * based on the timestamp delta between the last two flush operations.
  839. */
  840. sample_period = (data->timestamp - data->old_timestamp);
  841. do_div(sample_period, count);
  842. tstamp = data->timestamp - (count - 1) * sample_period;
  843. if (samples && count > samples)
  844. count = samples;
  845. ret = bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
  846. if (ret)
  847. return ret;
  848. /*
  849. * Ideally we want the IIO core to handle the demux when running in fifo
  850. * mode but not when running in triggered buffer mode. Unfortunately
  851. * this does not seem to be possible, so stick with driver demux for
  852. * now.
  853. */
  854. for (i = 0; i < count; i++) {
  855. int j, bit;
  856. j = 0;
  857. iio_for_each_active_channel(indio_dev, bit)
  858. memcpy(&data->scan.channels[j++], &buffer[i * 3 + bit],
  859. sizeof(data->scan.channels[0]));
  860. iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
  861. tstamp);
  862. tstamp += sample_period;
  863. }
  864. return count;
  865. }
  866. static int bmc150_accel_fifo_flush(struct iio_dev *indio_dev, unsigned samples)
  867. {
  868. struct bmc150_accel_data *data = iio_priv(indio_dev);
  869. int ret;
  870. mutex_lock(&data->mutex);
  871. ret = __bmc150_accel_fifo_flush(indio_dev, samples, false);
  872. mutex_unlock(&data->mutex);
  873. return ret;
  874. }
  875. static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
  876. "15.620000 31.260000 62.50000 125 250 500 1000 2000");
  877. static struct attribute *bmc150_accel_attributes[] = {
  878. &iio_const_attr_sampling_frequency_available.dev_attr.attr,
  879. NULL,
  880. };
  881. static const struct attribute_group bmc150_accel_attrs_group = {
  882. .attrs = bmc150_accel_attributes,
  883. };
  884. static const struct iio_event_spec bmc150_accel_event = {
  885. .type = IIO_EV_TYPE_ROC,
  886. .dir = IIO_EV_DIR_EITHER,
  887. .mask_separate = BIT(IIO_EV_INFO_VALUE) |
  888. BIT(IIO_EV_INFO_ENABLE) |
  889. BIT(IIO_EV_INFO_PERIOD)
  890. };
  891. #define BMC150_ACCEL_CHANNEL(_axis, bits) { \
  892. .type = IIO_ACCEL, \
  893. .modified = 1, \
  894. .channel2 = IIO_MOD_##_axis, \
  895. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  896. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
  897. BIT(IIO_CHAN_INFO_SAMP_FREQ), \
  898. .scan_index = AXIS_##_axis, \
  899. .scan_type = { \
  900. .sign = 's', \
  901. .realbits = (bits), \
  902. .storagebits = 16, \
  903. .shift = 16 - (bits), \
  904. .endianness = IIO_LE, \
  905. }, \
  906. .ext_info = bmc150_accel_ext_info, \
  907. .event_spec = &bmc150_accel_event, \
  908. .num_event_specs = 1 \
  909. }
  910. #define BMC150_ACCEL_CHANNELS(bits) { \
  911. { \
  912. .type = IIO_TEMP, \
  913. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
  914. BIT(IIO_CHAN_INFO_SCALE) | \
  915. BIT(IIO_CHAN_INFO_OFFSET), \
  916. .scan_index = -1, \
  917. }, \
  918. BMC150_ACCEL_CHANNEL(X, bits), \
  919. BMC150_ACCEL_CHANNEL(Y, bits), \
  920. BMC150_ACCEL_CHANNEL(Z, bits), \
  921. IIO_CHAN_SOFT_TIMESTAMP(3), \
  922. }
  923. static const struct iio_chan_spec bma222e_accel_channels[] =
  924. BMC150_ACCEL_CHANNELS(8);
  925. static const struct iio_chan_spec bma250e_accel_channels[] =
  926. BMC150_ACCEL_CHANNELS(10);
  927. static const struct iio_chan_spec bmc150_accel_channels[] =
  928. BMC150_ACCEL_CHANNELS(12);
  929. static const struct iio_chan_spec bma280_accel_channels[] =
  930. BMC150_ACCEL_CHANNELS(14);
  931. /*
  932. * The range for the Bosch sensors is typically +-2g/4g/8g/16g, distributed
  933. * over the amount of bits (see above). The scale table can be calculated using
  934. * (range / 2^bits) * g = (range / 2^bits) * 9.80665 m/s^2
  935. * e.g. for +-2g and 12 bits: (4 / 2^12) * 9.80665 m/s^2 = 0.0095768... m/s^2
  936. * Multiply 10^6 and round to get the values listed below.
  937. */
  938. static const struct bmc150_accel_chip_info bmc150_accel_chip_info_tbl[] = {
  939. {
  940. .name = "BMA222",
  941. .chip_id = 0x03,
  942. .channels = bma222e_accel_channels,
  943. .num_channels = ARRAY_SIZE(bma222e_accel_channels),
  944. .scale_table = { {153229, BMC150_ACCEL_DEF_RANGE_2G},
  945. {306458, BMC150_ACCEL_DEF_RANGE_4G},
  946. {612916, BMC150_ACCEL_DEF_RANGE_8G},
  947. {1225831, BMC150_ACCEL_DEF_RANGE_16G} },
  948. },
  949. {
  950. .name = "BMA222E",
  951. .chip_id = 0xF8,
  952. .channels = bma222e_accel_channels,
  953. .num_channels = ARRAY_SIZE(bma222e_accel_channels),
  954. .scale_table = { {153229, BMC150_ACCEL_DEF_RANGE_2G},
  955. {306458, BMC150_ACCEL_DEF_RANGE_4G},
  956. {612916, BMC150_ACCEL_DEF_RANGE_8G},
  957. {1225831, BMC150_ACCEL_DEF_RANGE_16G} },
  958. },
  959. {
  960. .name = "BMA250E",
  961. .chip_id = 0xF9,
  962. .channels = bma250e_accel_channels,
  963. .num_channels = ARRAY_SIZE(bma250e_accel_channels),
  964. .scale_table = { {38307, BMC150_ACCEL_DEF_RANGE_2G},
  965. {76614, BMC150_ACCEL_DEF_RANGE_4G},
  966. {153229, BMC150_ACCEL_DEF_RANGE_8G},
  967. {306458, BMC150_ACCEL_DEF_RANGE_16G} },
  968. },
  969. {
  970. .name = "BMA253/BMA254/BMA255/BMC150/BMC156/BMI055",
  971. .chip_id = 0xFA,
  972. .channels = bmc150_accel_channels,
  973. .num_channels = ARRAY_SIZE(bmc150_accel_channels),
  974. .scale_table = { {9577, BMC150_ACCEL_DEF_RANGE_2G},
  975. {19154, BMC150_ACCEL_DEF_RANGE_4G},
  976. {38307, BMC150_ACCEL_DEF_RANGE_8G},
  977. {76614, BMC150_ACCEL_DEF_RANGE_16G} },
  978. },
  979. {
  980. .name = "BMA280",
  981. .chip_id = 0xFB,
  982. .channels = bma280_accel_channels,
  983. .num_channels = ARRAY_SIZE(bma280_accel_channels),
  984. .scale_table = { {2394, BMC150_ACCEL_DEF_RANGE_2G},
  985. {4788, BMC150_ACCEL_DEF_RANGE_4G},
  986. {9577, BMC150_ACCEL_DEF_RANGE_8G},
  987. {19154, BMC150_ACCEL_DEF_RANGE_16G} },
  988. },
  989. };
  990. static const struct iio_info bmc150_accel_info = {
  991. .attrs = &bmc150_accel_attrs_group,
  992. .read_raw = bmc150_accel_read_raw,
  993. .write_raw = bmc150_accel_write_raw,
  994. .read_event_value = bmc150_accel_read_event,
  995. .write_event_value = bmc150_accel_write_event,
  996. .write_event_config = bmc150_accel_write_event_config,
  997. .read_event_config = bmc150_accel_read_event_config,
  998. };
  999. static const struct iio_info bmc150_accel_info_fifo = {
  1000. .attrs = &bmc150_accel_attrs_group,
  1001. .read_raw = bmc150_accel_read_raw,
  1002. .write_raw = bmc150_accel_write_raw,
  1003. .read_event_value = bmc150_accel_read_event,
  1004. .write_event_value = bmc150_accel_write_event,
  1005. .write_event_config = bmc150_accel_write_event_config,
  1006. .read_event_config = bmc150_accel_read_event_config,
  1007. .validate_trigger = bmc150_accel_validate_trigger,
  1008. .hwfifo_set_watermark = bmc150_accel_set_watermark,
  1009. .hwfifo_flush_to_buffer = bmc150_accel_fifo_flush,
  1010. };
  1011. static const unsigned long bmc150_accel_scan_masks[] = {
  1012. BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z),
  1013. 0};
  1014. static irqreturn_t bmc150_accel_trigger_handler(int irq, void *p)
  1015. {
  1016. struct iio_poll_func *pf = p;
  1017. struct iio_dev *indio_dev = pf->indio_dev;
  1018. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1019. int ret;
  1020. mutex_lock(&data->mutex);
  1021. ret = regmap_bulk_read(data->regmap, BMC150_ACCEL_REG_XOUT_L,
  1022. data->buffer, AXIS_MAX * 2);
  1023. mutex_unlock(&data->mutex);
  1024. if (ret < 0)
  1025. goto err_read;
  1026. iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
  1027. pf->timestamp);
  1028. err_read:
  1029. iio_trigger_notify_done(indio_dev->trig);
  1030. return IRQ_HANDLED;
  1031. }
  1032. static void bmc150_accel_trig_reen(struct iio_trigger *trig)
  1033. {
  1034. struct bmc150_accel_trigger *t = iio_trigger_get_drvdata(trig);
  1035. struct bmc150_accel_data *data = t->data;
  1036. struct device *dev = regmap_get_device(data->regmap);
  1037. int ret;
  1038. /* new data interrupts don't need ack */
  1039. if (t == &t->data->triggers[BMC150_ACCEL_TRIGGER_DATA_READY])
  1040. return;
  1041. mutex_lock(&data->mutex);
  1042. /* clear any latched interrupt */
  1043. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_RST_LATCH,
  1044. BMC150_ACCEL_INT_MODE_LATCH_INT |
  1045. BMC150_ACCEL_INT_MODE_LATCH_RESET);
  1046. mutex_unlock(&data->mutex);
  1047. if (ret < 0)
  1048. dev_err(dev, "Error writing reg_int_rst_latch\n");
  1049. }
  1050. static int bmc150_accel_trigger_set_state(struct iio_trigger *trig,
  1051. bool state)
  1052. {
  1053. struct bmc150_accel_trigger *t = iio_trigger_get_drvdata(trig);
  1054. struct bmc150_accel_data *data = t->data;
  1055. int ret;
  1056. mutex_lock(&data->mutex);
  1057. if (t->enabled == state) {
  1058. mutex_unlock(&data->mutex);
  1059. return 0;
  1060. }
  1061. if (t->setup) {
  1062. ret = t->setup(t, state);
  1063. if (ret < 0) {
  1064. mutex_unlock(&data->mutex);
  1065. return ret;
  1066. }
  1067. }
  1068. ret = bmc150_accel_set_interrupt(data, t->intr, state);
  1069. if (ret < 0) {
  1070. mutex_unlock(&data->mutex);
  1071. return ret;
  1072. }
  1073. t->enabled = state;
  1074. mutex_unlock(&data->mutex);
  1075. return ret;
  1076. }
  1077. static const struct iio_trigger_ops bmc150_accel_trigger_ops = {
  1078. .set_trigger_state = bmc150_accel_trigger_set_state,
  1079. .reenable = bmc150_accel_trig_reen,
  1080. };
  1081. static int bmc150_accel_handle_roc_event(struct iio_dev *indio_dev)
  1082. {
  1083. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1084. struct device *dev = regmap_get_device(data->regmap);
  1085. int dir;
  1086. int ret;
  1087. unsigned int val;
  1088. ret = regmap_read(data->regmap, BMC150_ACCEL_REG_INT_STATUS_2, &val);
  1089. if (ret < 0) {
  1090. dev_err(dev, "Error reading reg_int_status_2\n");
  1091. return ret;
  1092. }
  1093. if (val & BMC150_ACCEL_ANY_MOTION_BIT_SIGN)
  1094. dir = IIO_EV_DIR_FALLING;
  1095. else
  1096. dir = IIO_EV_DIR_RISING;
  1097. if (val & BMC150_ACCEL_ANY_MOTION_BIT_X)
  1098. iio_push_event(indio_dev,
  1099. IIO_MOD_EVENT_CODE(IIO_ACCEL,
  1100. 0,
  1101. IIO_MOD_X,
  1102. IIO_EV_TYPE_ROC,
  1103. dir),
  1104. data->timestamp);
  1105. if (val & BMC150_ACCEL_ANY_MOTION_BIT_Y)
  1106. iio_push_event(indio_dev,
  1107. IIO_MOD_EVENT_CODE(IIO_ACCEL,
  1108. 0,
  1109. IIO_MOD_Y,
  1110. IIO_EV_TYPE_ROC,
  1111. dir),
  1112. data->timestamp);
  1113. if (val & BMC150_ACCEL_ANY_MOTION_BIT_Z)
  1114. iio_push_event(indio_dev,
  1115. IIO_MOD_EVENT_CODE(IIO_ACCEL,
  1116. 0,
  1117. IIO_MOD_Z,
  1118. IIO_EV_TYPE_ROC,
  1119. dir),
  1120. data->timestamp);
  1121. return ret;
  1122. }
  1123. static irqreturn_t bmc150_accel_irq_thread_handler(int irq, void *private)
  1124. {
  1125. struct iio_dev *indio_dev = private;
  1126. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1127. struct device *dev = regmap_get_device(data->regmap);
  1128. bool ack = false;
  1129. int ret;
  1130. mutex_lock(&data->mutex);
  1131. if (data->fifo_mode) {
  1132. ret = __bmc150_accel_fifo_flush(indio_dev,
  1133. BMC150_ACCEL_FIFO_LENGTH, true);
  1134. if (ret > 0)
  1135. ack = true;
  1136. }
  1137. if (data->ev_enable_state) {
  1138. ret = bmc150_accel_handle_roc_event(indio_dev);
  1139. if (ret > 0)
  1140. ack = true;
  1141. }
  1142. if (ack) {
  1143. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_RST_LATCH,
  1144. BMC150_ACCEL_INT_MODE_LATCH_INT |
  1145. BMC150_ACCEL_INT_MODE_LATCH_RESET);
  1146. if (ret)
  1147. dev_err(dev, "Error writing reg_int_rst_latch\n");
  1148. ret = IRQ_HANDLED;
  1149. } else {
  1150. ret = IRQ_NONE;
  1151. }
  1152. mutex_unlock(&data->mutex);
  1153. return ret;
  1154. }
  1155. static irqreturn_t bmc150_accel_irq_handler(int irq, void *private)
  1156. {
  1157. struct iio_dev *indio_dev = private;
  1158. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1159. bool ack = false;
  1160. int i;
  1161. data->old_timestamp = data->timestamp;
  1162. data->timestamp = iio_get_time_ns(indio_dev);
  1163. for (i = 0; i < BMC150_ACCEL_TRIGGERS; i++) {
  1164. if (data->triggers[i].enabled) {
  1165. iio_trigger_poll(data->triggers[i].indio_trig);
  1166. ack = true;
  1167. break;
  1168. }
  1169. }
  1170. if (data->ev_enable_state || data->fifo_mode)
  1171. return IRQ_WAKE_THREAD;
  1172. if (ack)
  1173. return IRQ_HANDLED;
  1174. return IRQ_NONE;
  1175. }
  1176. static const struct {
  1177. int intr;
  1178. const char *name;
  1179. int (*setup)(struct bmc150_accel_trigger *t, bool state);
  1180. } bmc150_accel_triggers[BMC150_ACCEL_TRIGGERS] = {
  1181. {
  1182. .intr = 0,
  1183. .name = "%s-dev%d",
  1184. },
  1185. {
  1186. .intr = 1,
  1187. .name = "%s-any-motion-dev%d",
  1188. .setup = bmc150_accel_any_motion_setup,
  1189. },
  1190. };
  1191. static void bmc150_accel_unregister_triggers(struct bmc150_accel_data *data,
  1192. int from)
  1193. {
  1194. int i;
  1195. for (i = from; i >= 0; i--) {
  1196. if (data->triggers[i].indio_trig) {
  1197. iio_trigger_unregister(data->triggers[i].indio_trig);
  1198. data->triggers[i].indio_trig = NULL;
  1199. }
  1200. }
  1201. }
  1202. static int bmc150_accel_triggers_setup(struct iio_dev *indio_dev,
  1203. struct bmc150_accel_data *data)
  1204. {
  1205. struct device *dev = regmap_get_device(data->regmap);
  1206. int i, ret;
  1207. for (i = 0; i < BMC150_ACCEL_TRIGGERS; i++) {
  1208. struct bmc150_accel_trigger *t = &data->triggers[i];
  1209. t->indio_trig = devm_iio_trigger_alloc(dev,
  1210. bmc150_accel_triggers[i].name,
  1211. indio_dev->name,
  1212. iio_device_id(indio_dev));
  1213. if (!t->indio_trig) {
  1214. ret = -ENOMEM;
  1215. break;
  1216. }
  1217. t->indio_trig->ops = &bmc150_accel_trigger_ops;
  1218. t->intr = bmc150_accel_triggers[i].intr;
  1219. t->data = data;
  1220. t->setup = bmc150_accel_triggers[i].setup;
  1221. iio_trigger_set_drvdata(t->indio_trig, t);
  1222. ret = iio_trigger_register(t->indio_trig);
  1223. if (ret)
  1224. break;
  1225. }
  1226. if (ret)
  1227. bmc150_accel_unregister_triggers(data, i - 1);
  1228. return ret;
  1229. }
  1230. #define BMC150_ACCEL_FIFO_MODE_STREAM 0x80
  1231. #define BMC150_ACCEL_FIFO_MODE_FIFO 0x40
  1232. #define BMC150_ACCEL_FIFO_MODE_BYPASS 0x00
  1233. static int bmc150_accel_fifo_set_mode(struct bmc150_accel_data *data)
  1234. {
  1235. struct device *dev = regmap_get_device(data->regmap);
  1236. u8 reg = BMC150_ACCEL_REG_FIFO_CONFIG1;
  1237. int ret;
  1238. ret = regmap_write(data->regmap, reg, data->fifo_mode);
  1239. if (ret < 0) {
  1240. dev_err(dev, "Error writing reg_fifo_config1\n");
  1241. return ret;
  1242. }
  1243. if (!data->fifo_mode)
  1244. return 0;
  1245. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_FIFO_CONFIG0,
  1246. data->watermark);
  1247. if (ret < 0)
  1248. dev_err(dev, "Error writing reg_fifo_config0\n");
  1249. return ret;
  1250. }
  1251. static int bmc150_accel_buffer_preenable(struct iio_dev *indio_dev)
  1252. {
  1253. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1254. return bmc150_accel_set_power_state(data, true);
  1255. }
  1256. static int bmc150_accel_buffer_postenable(struct iio_dev *indio_dev)
  1257. {
  1258. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1259. int ret = 0;
  1260. if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
  1261. return 0;
  1262. mutex_lock(&data->mutex);
  1263. if (!data->watermark)
  1264. goto out;
  1265. ret = bmc150_accel_set_interrupt(data, BMC150_ACCEL_INT_WATERMARK,
  1266. true);
  1267. if (ret)
  1268. goto out;
  1269. data->fifo_mode = BMC150_ACCEL_FIFO_MODE_FIFO;
  1270. ret = bmc150_accel_fifo_set_mode(data);
  1271. if (ret) {
  1272. data->fifo_mode = 0;
  1273. bmc150_accel_set_interrupt(data, BMC150_ACCEL_INT_WATERMARK,
  1274. false);
  1275. }
  1276. out:
  1277. mutex_unlock(&data->mutex);
  1278. return ret;
  1279. }
  1280. static int bmc150_accel_buffer_predisable(struct iio_dev *indio_dev)
  1281. {
  1282. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1283. if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
  1284. return 0;
  1285. mutex_lock(&data->mutex);
  1286. if (!data->fifo_mode)
  1287. goto out;
  1288. bmc150_accel_set_interrupt(data, BMC150_ACCEL_INT_WATERMARK, false);
  1289. __bmc150_accel_fifo_flush(indio_dev, BMC150_ACCEL_FIFO_LENGTH, false);
  1290. data->fifo_mode = 0;
  1291. bmc150_accel_fifo_set_mode(data);
  1292. out:
  1293. mutex_unlock(&data->mutex);
  1294. return 0;
  1295. }
  1296. static int bmc150_accel_buffer_postdisable(struct iio_dev *indio_dev)
  1297. {
  1298. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1299. return bmc150_accel_set_power_state(data, false);
  1300. }
  1301. static const struct iio_buffer_setup_ops bmc150_accel_buffer_ops = {
  1302. .preenable = bmc150_accel_buffer_preenable,
  1303. .postenable = bmc150_accel_buffer_postenable,
  1304. .predisable = bmc150_accel_buffer_predisable,
  1305. .postdisable = bmc150_accel_buffer_postdisable,
  1306. };
  1307. static int bmc150_accel_chip_init(struct bmc150_accel_data *data)
  1308. {
  1309. struct device *dev = regmap_get_device(data->regmap);
  1310. int ret, i;
  1311. unsigned int val;
  1312. /*
  1313. * Reset chip to get it in a known good state. A delay of 1.8ms after
  1314. * reset is required according to the data sheets of supported chips.
  1315. */
  1316. regmap_write(data->regmap, BMC150_ACCEL_REG_RESET,
  1317. BMC150_ACCEL_RESET_VAL);
  1318. usleep_range(1800, 2500);
  1319. ret = regmap_read(data->regmap, BMC150_ACCEL_REG_CHIP_ID, &val);
  1320. if (ret < 0) {
  1321. dev_err(dev, "Error: Reading chip id\n");
  1322. return ret;
  1323. }
  1324. dev_dbg(dev, "Chip Id %x\n", val);
  1325. for (i = 0; i < ARRAY_SIZE(bmc150_accel_chip_info_tbl); i++) {
  1326. if (bmc150_accel_chip_info_tbl[i].chip_id == val) {
  1327. data->chip_info = &bmc150_accel_chip_info_tbl[i];
  1328. break;
  1329. }
  1330. }
  1331. if (!data->chip_info) {
  1332. dev_err(dev, "Invalid chip %x\n", val);
  1333. return -ENODEV;
  1334. }
  1335. ret = bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_NORMAL, 0);
  1336. if (ret < 0)
  1337. return ret;
  1338. /* Set Bandwidth */
  1339. ret = bmc150_accel_set_bw(data, BMC150_ACCEL_DEF_BW, 0);
  1340. if (ret < 0)
  1341. return ret;
  1342. /* Set Default Range */
  1343. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_PMU_RANGE,
  1344. BMC150_ACCEL_DEF_RANGE_4G);
  1345. if (ret < 0) {
  1346. dev_err(dev, "Error writing reg_pmu_range\n");
  1347. return ret;
  1348. }
  1349. data->range = BMC150_ACCEL_DEF_RANGE_4G;
  1350. /* Set default slope duration and thresholds */
  1351. data->slope_thres = BMC150_ACCEL_DEF_SLOPE_THRESHOLD;
  1352. data->slope_dur = BMC150_ACCEL_DEF_SLOPE_DURATION;
  1353. ret = bmc150_accel_update_slope(data);
  1354. if (ret < 0)
  1355. return ret;
  1356. /* Set default as latched interrupts */
  1357. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_RST_LATCH,
  1358. BMC150_ACCEL_INT_MODE_LATCH_INT |
  1359. BMC150_ACCEL_INT_MODE_LATCH_RESET);
  1360. if (ret < 0) {
  1361. dev_err(dev, "Error writing reg_int_rst_latch\n");
  1362. return ret;
  1363. }
  1364. return 0;
  1365. }
  1366. int bmc150_accel_core_probe(struct device *dev, struct regmap *regmap, int irq,
  1367. enum bmc150_type type, const char *name,
  1368. bool block_supported)
  1369. {
  1370. const struct iio_dev_attr **fifo_attrs;
  1371. struct bmc150_accel_data *data;
  1372. struct iio_dev *indio_dev;
  1373. int ret;
  1374. indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
  1375. if (!indio_dev)
  1376. return -ENOMEM;
  1377. data = iio_priv(indio_dev);
  1378. dev_set_drvdata(dev, indio_dev);
  1379. data->regmap = regmap;
  1380. data->type = type;
  1381. if (!bmc150_apply_acpi_orientation(dev, &data->orientation)) {
  1382. ret = iio_read_mount_matrix(dev, &data->orientation);
  1383. if (ret)
  1384. return ret;
  1385. }
  1386. /*
  1387. * VDD is the analog and digital domain voltage supply
  1388. * VDDIO is the digital I/O voltage supply
  1389. */
  1390. data->regulators[0].supply = "vdd";
  1391. data->regulators[1].supply = "vddio";
  1392. ret = devm_regulator_bulk_get(dev,
  1393. ARRAY_SIZE(data->regulators),
  1394. data->regulators);
  1395. if (ret)
  1396. return dev_err_probe(dev, ret, "failed to get regulators\n");
  1397. ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
  1398. data->regulators);
  1399. if (ret) {
  1400. dev_err(dev, "failed to enable regulators: %d\n", ret);
  1401. return ret;
  1402. }
  1403. /*
  1404. * 2ms or 3ms power-on time according to datasheets, let's better
  1405. * be safe than sorry and set this delay to 5ms.
  1406. */
  1407. msleep(5);
  1408. ret = bmc150_accel_chip_init(data);
  1409. if (ret < 0)
  1410. goto err_disable_regulators;
  1411. mutex_init(&data->mutex);
  1412. indio_dev->channels = data->chip_info->channels;
  1413. indio_dev->num_channels = data->chip_info->num_channels;
  1414. indio_dev->name = name ? name : data->chip_info->name;
  1415. indio_dev->available_scan_masks = bmc150_accel_scan_masks;
  1416. indio_dev->modes = INDIO_DIRECT_MODE;
  1417. indio_dev->info = &bmc150_accel_info;
  1418. if (block_supported) {
  1419. indio_dev->modes |= INDIO_BUFFER_SOFTWARE;
  1420. indio_dev->info = &bmc150_accel_info_fifo;
  1421. fifo_attrs = bmc150_accel_fifo_attributes;
  1422. } else {
  1423. fifo_attrs = NULL;
  1424. }
  1425. ret = iio_triggered_buffer_setup_ext(indio_dev,
  1426. &iio_pollfunc_store_time,
  1427. bmc150_accel_trigger_handler,
  1428. IIO_BUFFER_DIRECTION_IN,
  1429. &bmc150_accel_buffer_ops,
  1430. fifo_attrs);
  1431. if (ret < 0) {
  1432. dev_err(dev, "Failed: iio triggered buffer setup\n");
  1433. goto err_disable_regulators;
  1434. }
  1435. if (irq > 0) {
  1436. data->irq = irq;
  1437. ret = devm_request_threaded_irq(dev, irq,
  1438. bmc150_accel_irq_handler,
  1439. bmc150_accel_irq_thread_handler,
  1440. IRQF_TRIGGER_RISING,
  1441. "bmc150_accel_event",
  1442. indio_dev);
  1443. if (ret)
  1444. goto err_buffer_cleanup;
  1445. /*
  1446. * Set latched mode interrupt. While certain interrupts are
  1447. * non-latched regardless of this settings (e.g. new data) we
  1448. * want to use latch mode when we can to prevent interrupt
  1449. * flooding.
  1450. */
  1451. ret = regmap_write(data->regmap, BMC150_ACCEL_REG_INT_RST_LATCH,
  1452. BMC150_ACCEL_INT_MODE_LATCH_RESET);
  1453. if (ret < 0) {
  1454. dev_err(dev, "Error writing reg_int_rst_latch\n");
  1455. goto err_buffer_cleanup;
  1456. }
  1457. bmc150_accel_interrupts_setup(indio_dev, data, irq);
  1458. ret = bmc150_accel_triggers_setup(indio_dev, data);
  1459. if (ret)
  1460. goto err_buffer_cleanup;
  1461. }
  1462. ret = pm_runtime_set_active(dev);
  1463. if (ret)
  1464. goto err_trigger_unregister;
  1465. pm_runtime_enable(dev);
  1466. pm_runtime_set_autosuspend_delay(dev, BMC150_AUTO_SUSPEND_DELAY_MS);
  1467. pm_runtime_use_autosuspend(dev);
  1468. ret = iio_device_register(indio_dev);
  1469. if (ret < 0) {
  1470. dev_err(dev, "Unable to register iio device\n");
  1471. goto err_pm_cleanup;
  1472. }
  1473. return 0;
  1474. err_pm_cleanup:
  1475. pm_runtime_dont_use_autosuspend(dev);
  1476. pm_runtime_disable(dev);
  1477. err_trigger_unregister:
  1478. bmc150_accel_unregister_triggers(data, BMC150_ACCEL_TRIGGERS - 1);
  1479. err_buffer_cleanup:
  1480. iio_triggered_buffer_cleanup(indio_dev);
  1481. err_disable_regulators:
  1482. regulator_bulk_disable(ARRAY_SIZE(data->regulators),
  1483. data->regulators);
  1484. return ret;
  1485. }
  1486. EXPORT_SYMBOL_NS_GPL(bmc150_accel_core_probe, "IIO_BMC150");
  1487. void bmc150_accel_core_remove(struct device *dev)
  1488. {
  1489. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1490. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1491. iio_device_unregister(indio_dev);
  1492. pm_runtime_disable(dev);
  1493. pm_runtime_set_suspended(dev);
  1494. bmc150_accel_unregister_triggers(data, BMC150_ACCEL_TRIGGERS - 1);
  1495. iio_triggered_buffer_cleanup(indio_dev);
  1496. mutex_lock(&data->mutex);
  1497. bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_DEEP_SUSPEND, 0);
  1498. mutex_unlock(&data->mutex);
  1499. regulator_bulk_disable(ARRAY_SIZE(data->regulators),
  1500. data->regulators);
  1501. }
  1502. EXPORT_SYMBOL_NS_GPL(bmc150_accel_core_remove, "IIO_BMC150");
  1503. #ifdef CONFIG_PM_SLEEP
  1504. static int bmc150_accel_suspend(struct device *dev)
  1505. {
  1506. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1507. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1508. mutex_lock(&data->mutex);
  1509. bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_SUSPEND, 0);
  1510. mutex_unlock(&data->mutex);
  1511. return 0;
  1512. }
  1513. static int bmc150_accel_resume(struct device *dev)
  1514. {
  1515. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1516. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1517. mutex_lock(&data->mutex);
  1518. bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_NORMAL, 0);
  1519. bmc150_accel_fifo_set_mode(data);
  1520. mutex_unlock(&data->mutex);
  1521. if (data->resume_callback)
  1522. data->resume_callback(dev);
  1523. return 0;
  1524. }
  1525. #endif
  1526. #ifdef CONFIG_PM
  1527. static int bmc150_accel_runtime_suspend(struct device *dev)
  1528. {
  1529. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1530. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1531. int ret;
  1532. ret = bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_SUSPEND, 0);
  1533. if (ret < 0)
  1534. return -EAGAIN;
  1535. return 0;
  1536. }
  1537. static int bmc150_accel_runtime_resume(struct device *dev)
  1538. {
  1539. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  1540. struct bmc150_accel_data *data = iio_priv(indio_dev);
  1541. int ret;
  1542. int sleep_val;
  1543. ret = bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_NORMAL, 0);
  1544. if (ret < 0)
  1545. return ret;
  1546. ret = bmc150_accel_fifo_set_mode(data);
  1547. if (ret < 0)
  1548. return ret;
  1549. sleep_val = bmc150_accel_get_startup_times(data);
  1550. if (sleep_val < 20)
  1551. usleep_range(sleep_val * 1000, 20000);
  1552. else
  1553. msleep_interruptible(sleep_val);
  1554. return 0;
  1555. }
  1556. #endif
  1557. const struct dev_pm_ops bmc150_accel_pm_ops = {
  1558. SET_SYSTEM_SLEEP_PM_OPS(bmc150_accel_suspend, bmc150_accel_resume)
  1559. SET_RUNTIME_PM_OPS(bmc150_accel_runtime_suspend,
  1560. bmc150_accel_runtime_resume, NULL)
  1561. };
  1562. EXPORT_SYMBOL_NS_GPL(bmc150_accel_pm_ops, "IIO_BMC150");
  1563. MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
  1564. MODULE_LICENSE("GPL v2");
  1565. MODULE_DESCRIPTION("BMC150 accelerometer driver");