bma400_core.c 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Core IIO driver for Bosch BMA400 triaxial acceleration sensor.
  4. *
  5. * Copyright 2019 Dan Robertson <dan@dlrobertson.com>
  6. *
  7. * TODO:
  8. * - Support for power management
  9. * - Support events and interrupts
  10. * - Create channel for step count
  11. * - Create channel for sensor time
  12. */
  13. #include <linux/bitfield.h>
  14. #include <linux/bitops.h>
  15. #include <linux/cleanup.h>
  16. #include <linux/device.h>
  17. #include <linux/kernel.h>
  18. #include <linux/module.h>
  19. #include <linux/mutex.h>
  20. #include <linux/regmap.h>
  21. #include <linux/regulator/consumer.h>
  22. #include <linux/slab.h>
  23. #include <linux/unaligned.h>
  24. #include <linux/iio/iio.h>
  25. #include <linux/iio/buffer.h>
  26. #include <linux/iio/events.h>
  27. #include <linux/iio/sysfs.h>
  28. #include <linux/iio/trigger.h>
  29. #include <linux/iio/trigger_consumer.h>
  30. #include <linux/iio/triggered_buffer.h>
  31. #include "bma400.h"
  32. /*
  33. * The G-range selection may be one of 2g, 4g, 8, or 16g. The scale may
  34. * be selected with the acc_range bits of the ACC_CONFIG1 register.
  35. * NB: This buffer is populated in the device init.
  36. */
  37. static int bma400_scales[8];
  38. /*
  39. * See the ACC_CONFIG1 section of the datasheet.
  40. * NB: This buffer is populated in the device init.
  41. */
  42. static int bma400_sample_freqs[14];
  43. static const int bma400_osr_range[] = { 0, 1, 3 };
  44. static int tap_reset_timeout[BMA400_TAP_TIM_LIST_LEN] = {
  45. 300000,
  46. 400000,
  47. 500000,
  48. 600000
  49. };
  50. static int tap_max2min_time[BMA400_TAP_TIM_LIST_LEN] = {
  51. 30000,
  52. 45000,
  53. 60000,
  54. 90000
  55. };
  56. static int double_tap2_min_delay[BMA400_TAP_TIM_LIST_LEN] = {
  57. 20000,
  58. 40000,
  59. 60000,
  60. 80000
  61. };
  62. /* See the ACC_CONFIG0 section of the datasheet */
  63. enum bma400_power_mode {
  64. POWER_MODE_SLEEP = 0x00,
  65. POWER_MODE_LOW = 0x01,
  66. POWER_MODE_NORMAL = 0x02,
  67. POWER_MODE_INVALID = 0x03,
  68. };
  69. enum bma400_scan {
  70. BMA400_ACCL_X,
  71. BMA400_ACCL_Y,
  72. BMA400_ACCL_Z,
  73. BMA400_TEMP,
  74. };
  75. struct bma400_sample_freq {
  76. int hz;
  77. int uhz;
  78. };
  79. enum bma400_activity {
  80. BMA400_STILL,
  81. BMA400_WALKING,
  82. BMA400_RUNNING,
  83. };
  84. struct bma400_data {
  85. struct device *dev;
  86. struct regmap *regmap;
  87. struct mutex mutex; /* data register lock */
  88. struct iio_mount_matrix orientation;
  89. enum bma400_power_mode power_mode;
  90. struct bma400_sample_freq sample_freq;
  91. int oversampling_ratio;
  92. int scale;
  93. struct iio_trigger *trig;
  94. int steps_enabled;
  95. bool step_event_en;
  96. bool activity_event_en;
  97. unsigned int generic_event_en;
  98. unsigned int tap_event_en_bitmask;
  99. /* Correct time stamp alignment */
  100. struct {
  101. __le16 buff[3];
  102. u8 temperature;
  103. aligned_s64 ts;
  104. } buffer __aligned(IIO_DMA_MINALIGN);
  105. __le16 status;
  106. __be16 duration;
  107. };
  108. struct bma400_genintr_info {
  109. enum bma400_generic_intr genintr;
  110. unsigned int intrmask;
  111. enum iio_event_direction dir;
  112. enum bma400_detect_criterion detect_mode;
  113. };
  114. /* Lookup struct for determining GEN1/GEN2 based on dir */
  115. static const struct bma400_genintr_info bma400_genintrs[] = {
  116. [IIO_EV_DIR_RISING] = {
  117. .genintr = BMA400_GEN1_INTR,
  118. .intrmask = BMA400_INT_CONFIG0_GEN1_MASK,
  119. .dir = IIO_EV_DIR_RISING,
  120. .detect_mode = BMA400_DETECT_ACTIVITY,
  121. },
  122. [IIO_EV_DIR_FALLING] = {
  123. .genintr = BMA400_GEN2_INTR,
  124. .intrmask = BMA400_INT_CONFIG0_GEN2_MASK,
  125. .dir = IIO_EV_DIR_FALLING,
  126. .detect_mode = BMA400_DETECT_INACTIVITY,
  127. }
  128. };
  129. static inline const struct bma400_genintr_info *
  130. get_bma400_genintr_info(enum iio_event_direction dir)
  131. {
  132. switch (dir) {
  133. case IIO_EV_DIR_RISING:
  134. case IIO_EV_DIR_FALLING:
  135. return &bma400_genintrs[dir];
  136. default:
  137. return NULL;
  138. };
  139. }
  140. static bool bma400_is_writable_reg(struct device *dev, unsigned int reg)
  141. {
  142. switch (reg) {
  143. case BMA400_CHIP_ID_REG:
  144. case BMA400_ERR_REG:
  145. case BMA400_STATUS_REG:
  146. case BMA400_ACC_X_LSB_REG:
  147. case BMA400_ACC_X_MSB_REG:
  148. case BMA400_ACC_Y_LSB_REG:
  149. case BMA400_ACC_Y_MSB_REG:
  150. case BMA400_ACC_Z_LSB_REG:
  151. case BMA400_ACC_Z_MSB_REG:
  152. case BMA400_SENSOR_TIME0_REG:
  153. case BMA400_SENSOR_TIME1_REG:
  154. case BMA400_SENSOR_TIME2_REG:
  155. case BMA400_EVENT_REG:
  156. case BMA400_INT_STAT0_REG:
  157. case BMA400_INT_STAT1_REG:
  158. case BMA400_INT_STAT2_REG:
  159. case BMA400_TEMP_DATA_REG:
  160. case BMA400_FIFO_LENGTH0_REG:
  161. case BMA400_FIFO_LENGTH1_REG:
  162. case BMA400_FIFO_DATA_REG:
  163. case BMA400_STEP_CNT0_REG:
  164. case BMA400_STEP_CNT1_REG:
  165. case BMA400_STEP_CNT3_REG:
  166. case BMA400_STEP_STAT_REG:
  167. return false;
  168. default:
  169. return true;
  170. }
  171. }
  172. static bool bma400_is_volatile_reg(struct device *dev, unsigned int reg)
  173. {
  174. switch (reg) {
  175. case BMA400_ERR_REG:
  176. case BMA400_STATUS_REG:
  177. case BMA400_ACC_X_LSB_REG:
  178. case BMA400_ACC_X_MSB_REG:
  179. case BMA400_ACC_Y_LSB_REG:
  180. case BMA400_ACC_Y_MSB_REG:
  181. case BMA400_ACC_Z_LSB_REG:
  182. case BMA400_ACC_Z_MSB_REG:
  183. case BMA400_SENSOR_TIME0_REG:
  184. case BMA400_SENSOR_TIME1_REG:
  185. case BMA400_SENSOR_TIME2_REG:
  186. case BMA400_EVENT_REG:
  187. case BMA400_INT_STAT0_REG:
  188. case BMA400_INT_STAT1_REG:
  189. case BMA400_INT_STAT2_REG:
  190. case BMA400_TEMP_DATA_REG:
  191. case BMA400_FIFO_LENGTH0_REG:
  192. case BMA400_FIFO_LENGTH1_REG:
  193. case BMA400_FIFO_DATA_REG:
  194. case BMA400_STEP_CNT0_REG:
  195. case BMA400_STEP_CNT1_REG:
  196. case BMA400_STEP_CNT3_REG:
  197. case BMA400_STEP_STAT_REG:
  198. return true;
  199. default:
  200. return false;
  201. }
  202. }
  203. const struct regmap_config bma400_regmap_config = {
  204. .reg_bits = 8,
  205. .val_bits = 8,
  206. .max_register = BMA400_CMD_REG,
  207. .cache_type = REGCACHE_MAPLE,
  208. .writeable_reg = bma400_is_writable_reg,
  209. .volatile_reg = bma400_is_volatile_reg,
  210. };
  211. EXPORT_SYMBOL_NS(bma400_regmap_config, "IIO_BMA400");
  212. static const struct iio_mount_matrix *
  213. bma400_accel_get_mount_matrix(const struct iio_dev *indio_dev,
  214. const struct iio_chan_spec *chan)
  215. {
  216. struct bma400_data *data = iio_priv(indio_dev);
  217. return &data->orientation;
  218. }
  219. static const struct iio_chan_spec_ext_info bma400_ext_info[] = {
  220. IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma400_accel_get_mount_matrix),
  221. { }
  222. };
  223. static const struct iio_event_spec bma400_step_detect_event = {
  224. .type = IIO_EV_TYPE_CHANGE,
  225. .dir = IIO_EV_DIR_NONE,
  226. .mask_separate = BIT(IIO_EV_INFO_ENABLE),
  227. };
  228. static const struct iio_event_spec bma400_activity_event = {
  229. .type = IIO_EV_TYPE_CHANGE,
  230. .dir = IIO_EV_DIR_NONE,
  231. .mask_shared_by_type = BIT(IIO_EV_INFO_ENABLE),
  232. };
  233. static const struct iio_event_spec bma400_accel_event[] = {
  234. {
  235. .type = IIO_EV_TYPE_MAG,
  236. .dir = IIO_EV_DIR_FALLING,
  237. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
  238. BIT(IIO_EV_INFO_PERIOD) |
  239. BIT(IIO_EV_INFO_HYSTERESIS) |
  240. BIT(IIO_EV_INFO_ENABLE),
  241. },
  242. {
  243. .type = IIO_EV_TYPE_MAG,
  244. .dir = IIO_EV_DIR_RISING,
  245. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
  246. BIT(IIO_EV_INFO_PERIOD) |
  247. BIT(IIO_EV_INFO_HYSTERESIS) |
  248. BIT(IIO_EV_INFO_ENABLE),
  249. },
  250. {
  251. .type = IIO_EV_TYPE_GESTURE,
  252. .dir = IIO_EV_DIR_SINGLETAP,
  253. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
  254. BIT(IIO_EV_INFO_ENABLE) |
  255. BIT(IIO_EV_INFO_RESET_TIMEOUT),
  256. },
  257. {
  258. .type = IIO_EV_TYPE_GESTURE,
  259. .dir = IIO_EV_DIR_DOUBLETAP,
  260. .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
  261. BIT(IIO_EV_INFO_ENABLE) |
  262. BIT(IIO_EV_INFO_RESET_TIMEOUT) |
  263. BIT(IIO_EV_INFO_TAP2_MIN_DELAY),
  264. },
  265. };
  266. static int usec_to_tapreg_raw(int usec, const int *time_list)
  267. {
  268. int index;
  269. for (index = 0; index < BMA400_TAP_TIM_LIST_LEN; index++) {
  270. if (usec == time_list[index])
  271. return index;
  272. }
  273. return -EINVAL;
  274. }
  275. static ssize_t in_accel_gesture_tap_maxtomin_time_show(struct device *dev,
  276. struct device_attribute *attr,
  277. char *buf)
  278. {
  279. struct iio_dev *indio_dev = dev_to_iio_dev(dev);
  280. struct bma400_data *data = iio_priv(indio_dev);
  281. int ret, reg_val, raw, vals[2];
  282. ret = regmap_read(data->regmap, BMA400_TAP_CONFIG1_REG, &reg_val);
  283. if (ret)
  284. return ret;
  285. raw = FIELD_GET(BMA400_TAP_CONFIG1_TICSTH_MASK, reg_val);
  286. vals[0] = 0;
  287. vals[1] = tap_max2min_time[raw];
  288. return iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, 2, vals);
  289. }
  290. static ssize_t in_accel_gesture_tap_maxtomin_time_store(struct device *dev,
  291. struct device_attribute *attr,
  292. const char *buf, size_t len)
  293. {
  294. struct iio_dev *indio_dev = dev_to_iio_dev(dev);
  295. struct bma400_data *data = iio_priv(indio_dev);
  296. int ret, val_int, val_fract, raw;
  297. ret = iio_str_to_fixpoint(buf, 100000, &val_int, &val_fract);
  298. if (ret)
  299. return ret;
  300. raw = usec_to_tapreg_raw(val_fract, tap_max2min_time);
  301. if (raw < 0)
  302. return -EINVAL;
  303. ret = regmap_update_bits(data->regmap, BMA400_TAP_CONFIG1_REG,
  304. BMA400_TAP_CONFIG1_TICSTH_MASK,
  305. FIELD_PREP(BMA400_TAP_CONFIG1_TICSTH_MASK, raw));
  306. if (ret)
  307. return ret;
  308. return len;
  309. }
  310. static IIO_DEVICE_ATTR_RW(in_accel_gesture_tap_maxtomin_time, 0);
  311. /*
  312. * Tap interrupts works with 200 Hz input data rate and the time based tap
  313. * controls are in the terms of data samples so the below calculation is
  314. * used to convert the configuration values into seconds.
  315. * e.g.:
  316. * 60 data samples * 0.005 ms = 0.3 seconds.
  317. * 80 data samples * 0.005 ms = 0.4 seconds.
  318. */
  319. /* quiet configuration values in seconds */
  320. static IIO_CONST_ATTR(in_accel_gesture_tap_reset_timeout_available,
  321. "0.3 0.4 0.5 0.6");
  322. /* tics_th configuration values in seconds */
  323. static IIO_CONST_ATTR(in_accel_gesture_tap_maxtomin_time_available,
  324. "0.03 0.045 0.06 0.09");
  325. /* quiet_dt configuration values in seconds */
  326. static IIO_CONST_ATTR(in_accel_gesture_doubletap_tap2_min_delay_available,
  327. "0.02 0.04 0.06 0.08");
  328. /* List of sensitivity values available to configure tap interrupts */
  329. static IIO_CONST_ATTR(in_accel_gesture_tap_value_available, "0 1 2 3 4 5 6 7");
  330. static struct attribute *bma400_event_attributes[] = {
  331. &iio_const_attr_in_accel_gesture_tap_value_available.dev_attr.attr,
  332. &iio_const_attr_in_accel_gesture_tap_reset_timeout_available.dev_attr.attr,
  333. &iio_const_attr_in_accel_gesture_tap_maxtomin_time_available.dev_attr.attr,
  334. &iio_const_attr_in_accel_gesture_doubletap_tap2_min_delay_available.dev_attr.attr,
  335. &iio_dev_attr_in_accel_gesture_tap_maxtomin_time.dev_attr.attr,
  336. NULL
  337. };
  338. static const struct attribute_group bma400_event_attribute_group = {
  339. .attrs = bma400_event_attributes,
  340. };
  341. #define BMA400_ACC_CHANNEL(_index, _axis) { \
  342. .type = IIO_ACCEL, \
  343. .modified = 1, \
  344. .channel2 = IIO_MOD_##_axis, \
  345. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  346. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
  347. BIT(IIO_CHAN_INFO_SCALE) | \
  348. BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
  349. .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
  350. BIT(IIO_CHAN_INFO_SCALE) | \
  351. BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
  352. .ext_info = bma400_ext_info, \
  353. .scan_index = _index, \
  354. .scan_type = { \
  355. .sign = 's', \
  356. .realbits = 12, \
  357. .storagebits = 16, \
  358. .endianness = IIO_LE, \
  359. }, \
  360. .event_spec = bma400_accel_event, \
  361. .num_event_specs = ARRAY_SIZE(bma400_accel_event) \
  362. }
  363. #define BMA400_ACTIVITY_CHANNEL(_chan2) { \
  364. .type = IIO_ACTIVITY, \
  365. .modified = 1, \
  366. .channel2 = _chan2, \
  367. .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), \
  368. .scan_index = -1, /* No buffer support */ \
  369. .event_spec = &bma400_activity_event, \
  370. .num_event_specs = 1, \
  371. }
  372. static const struct iio_chan_spec bma400_channels[] = {
  373. BMA400_ACC_CHANNEL(0, X),
  374. BMA400_ACC_CHANNEL(1, Y),
  375. BMA400_ACC_CHANNEL(2, Z),
  376. {
  377. .type = IIO_TEMP,
  378. .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
  379. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ),
  380. .scan_index = 3,
  381. .scan_type = {
  382. .sign = 's',
  383. .realbits = 8,
  384. .storagebits = 8,
  385. .endianness = IIO_LE,
  386. },
  387. },
  388. {
  389. .type = IIO_STEPS,
  390. .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
  391. BIT(IIO_CHAN_INFO_ENABLE),
  392. .scan_index = -1, /* No buffer support */
  393. .event_spec = &bma400_step_detect_event,
  394. .num_event_specs = 1,
  395. },
  396. BMA400_ACTIVITY_CHANNEL(IIO_MOD_STILL),
  397. BMA400_ACTIVITY_CHANNEL(IIO_MOD_WALKING),
  398. BMA400_ACTIVITY_CHANNEL(IIO_MOD_RUNNING),
  399. IIO_CHAN_SOFT_TIMESTAMP(4),
  400. };
  401. static int bma400_get_temp_reg(struct bma400_data *data, int *val, int *val2)
  402. {
  403. unsigned int raw_temp;
  404. int host_temp;
  405. int ret;
  406. if (data->power_mode == POWER_MODE_SLEEP)
  407. return -EBUSY;
  408. ret = regmap_read(data->regmap, BMA400_TEMP_DATA_REG, &raw_temp);
  409. if (ret)
  410. return ret;
  411. host_temp = sign_extend32(raw_temp, 7);
  412. /*
  413. * The formula for the TEMP_DATA register in the datasheet
  414. * is: x * 0.5 + 23
  415. */
  416. *val = (host_temp >> 1) + 23;
  417. *val2 = (host_temp & 0x1) * 500000;
  418. return IIO_VAL_INT_PLUS_MICRO;
  419. }
  420. static int bma400_get_accel_reg(struct bma400_data *data,
  421. const struct iio_chan_spec *chan,
  422. int *val)
  423. {
  424. __le16 raw_accel;
  425. int lsb_reg;
  426. int ret;
  427. if (data->power_mode == POWER_MODE_SLEEP)
  428. return -EBUSY;
  429. switch (chan->channel2) {
  430. case IIO_MOD_X:
  431. lsb_reg = BMA400_ACC_X_LSB_REG;
  432. break;
  433. case IIO_MOD_Y:
  434. lsb_reg = BMA400_ACC_Y_LSB_REG;
  435. break;
  436. case IIO_MOD_Z:
  437. lsb_reg = BMA400_ACC_Z_LSB_REG;
  438. break;
  439. default:
  440. dev_err(data->dev, "invalid axis channel modifier\n");
  441. return -EINVAL;
  442. }
  443. /* bulk read two registers, with the base being the LSB register */
  444. ret = regmap_bulk_read(data->regmap, lsb_reg, &raw_accel,
  445. sizeof(raw_accel));
  446. if (ret)
  447. return ret;
  448. *val = sign_extend32(le16_to_cpu(raw_accel), 11);
  449. return IIO_VAL_INT;
  450. }
  451. static void bma400_output_data_rate_from_raw(int raw, unsigned int *val,
  452. unsigned int *val2)
  453. {
  454. *val = BMA400_ACC_CONFIG1_ODR_MAX_HZ >> (BMA400_ACC_CONFIG1_ODR_MAX_RAW - raw);
  455. if (raw > BMA400_ACC_CONFIG1_ODR_MIN_RAW)
  456. *val2 = 0;
  457. else
  458. *val2 = 500000;
  459. }
  460. static int bma400_get_accel_output_data_rate(struct bma400_data *data)
  461. {
  462. unsigned int val;
  463. unsigned int odr;
  464. int ret;
  465. switch (data->power_mode) {
  466. case POWER_MODE_LOW:
  467. /*
  468. * Runs at a fixed rate in low-power mode. See section 4.3
  469. * in the datasheet.
  470. */
  471. bma400_output_data_rate_from_raw(BMA400_ACC_CONFIG1_ODR_LP_RAW,
  472. &data->sample_freq.hz,
  473. &data->sample_freq.uhz);
  474. return 0;
  475. case POWER_MODE_NORMAL:
  476. /*
  477. * In normal mode the ODR can be found in the ACC_CONFIG1
  478. * register.
  479. */
  480. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG, &val);
  481. if (ret)
  482. goto error;
  483. odr = val & BMA400_ACC_CONFIG1_ODR_MASK;
  484. if (odr < BMA400_ACC_CONFIG1_ODR_MIN_RAW ||
  485. odr > BMA400_ACC_CONFIG1_ODR_MAX_RAW) {
  486. ret = -EINVAL;
  487. goto error;
  488. }
  489. bma400_output_data_rate_from_raw(odr, &data->sample_freq.hz,
  490. &data->sample_freq.uhz);
  491. return 0;
  492. case POWER_MODE_SLEEP:
  493. data->sample_freq.hz = 0;
  494. data->sample_freq.uhz = 0;
  495. return 0;
  496. default:
  497. ret = 0;
  498. goto error;
  499. }
  500. error:
  501. data->sample_freq.hz = -1;
  502. data->sample_freq.uhz = -1;
  503. return ret;
  504. }
  505. static int bma400_set_accel_output_data_rate(struct bma400_data *data,
  506. int hz, int uhz)
  507. {
  508. unsigned int idx;
  509. unsigned int odr;
  510. unsigned int val;
  511. int ret;
  512. if (hz >= BMA400_ACC_CONFIG1_ODR_MIN_WHOLE_HZ) {
  513. if (uhz || hz > BMA400_ACC_CONFIG1_ODR_MAX_HZ)
  514. return -EINVAL;
  515. /* Note this works because MIN_WHOLE_HZ is odd */
  516. idx = __ffs(hz);
  517. if (hz >> idx != BMA400_ACC_CONFIG1_ODR_MIN_WHOLE_HZ)
  518. return -EINVAL;
  519. idx += BMA400_ACC_CONFIG1_ODR_MIN_RAW + 1;
  520. } else if (hz == BMA400_ACC_CONFIG1_ODR_MIN_HZ && uhz == 500000) {
  521. idx = BMA400_ACC_CONFIG1_ODR_MIN_RAW;
  522. } else {
  523. return -EINVAL;
  524. }
  525. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG, &val);
  526. if (ret)
  527. return ret;
  528. /* preserve the range and normal mode osr */
  529. odr = (~BMA400_ACC_CONFIG1_ODR_MASK & val) | idx;
  530. ret = regmap_write(data->regmap, BMA400_ACC_CONFIG1_REG, odr);
  531. if (ret)
  532. return ret;
  533. bma400_output_data_rate_from_raw(idx, &data->sample_freq.hz,
  534. &data->sample_freq.uhz);
  535. return 0;
  536. }
  537. static int bma400_get_accel_oversampling_ratio(struct bma400_data *data)
  538. {
  539. unsigned int val;
  540. unsigned int osr;
  541. int ret;
  542. /*
  543. * The oversampling ratio is stored in a different register
  544. * based on the power-mode. In normal mode the OSR is stored
  545. * in ACC_CONFIG1. In low-power mode it is stored in
  546. * ACC_CONFIG0.
  547. */
  548. switch (data->power_mode) {
  549. case POWER_MODE_LOW:
  550. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG0_REG, &val);
  551. if (ret) {
  552. data->oversampling_ratio = -1;
  553. return ret;
  554. }
  555. osr = FIELD_GET(BMA400_ACC_CONFIG0_LP_OSR_MASK, val);
  556. data->oversampling_ratio = osr;
  557. return 0;
  558. case POWER_MODE_NORMAL:
  559. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG, &val);
  560. if (ret) {
  561. data->oversampling_ratio = -1;
  562. return ret;
  563. }
  564. osr = FIELD_GET(BMA400_ACC_CONFIG1_NP_OSR_MASK, val);
  565. data->oversampling_ratio = osr;
  566. return 0;
  567. case POWER_MODE_SLEEP:
  568. data->oversampling_ratio = 0;
  569. return 0;
  570. default:
  571. data->oversampling_ratio = -1;
  572. return -EINVAL;
  573. }
  574. }
  575. static int bma400_set_accel_oversampling_ratio(struct bma400_data *data,
  576. int val)
  577. {
  578. unsigned int acc_config;
  579. int ret;
  580. if (val & ~BMA400_TWO_BITS_MASK)
  581. return -EINVAL;
  582. /*
  583. * The oversampling ratio is stored in a different register
  584. * based on the power-mode.
  585. */
  586. switch (data->power_mode) {
  587. case POWER_MODE_LOW:
  588. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG0_REG,
  589. &acc_config);
  590. if (ret)
  591. return ret;
  592. ret = regmap_write(data->regmap, BMA400_ACC_CONFIG0_REG,
  593. (acc_config & ~BMA400_ACC_CONFIG0_LP_OSR_MASK) |
  594. FIELD_PREP(BMA400_ACC_CONFIG0_LP_OSR_MASK, val));
  595. if (ret) {
  596. dev_err(data->dev, "Failed to write out OSR\n");
  597. return ret;
  598. }
  599. data->oversampling_ratio = val;
  600. return 0;
  601. case POWER_MODE_NORMAL:
  602. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG,
  603. &acc_config);
  604. if (ret)
  605. return ret;
  606. ret = regmap_write(data->regmap, BMA400_ACC_CONFIG1_REG,
  607. (acc_config & ~BMA400_ACC_CONFIG1_NP_OSR_MASK) |
  608. FIELD_PREP(BMA400_ACC_CONFIG1_NP_OSR_MASK, val));
  609. if (ret) {
  610. dev_err(data->dev, "Failed to write out OSR\n");
  611. return ret;
  612. }
  613. data->oversampling_ratio = val;
  614. return 0;
  615. default:
  616. return -EINVAL;
  617. }
  618. return ret;
  619. }
  620. static int bma400_accel_scale_to_raw(struct bma400_data *data,
  621. unsigned int val)
  622. {
  623. int raw;
  624. if (val == 0)
  625. return -EINVAL;
  626. /* Note this works because BMA400_SCALE_MIN is odd */
  627. raw = __ffs(val);
  628. if (val >> raw != BMA400_ACC_SCALE_MIN)
  629. return -EINVAL;
  630. return raw;
  631. }
  632. static int bma400_get_accel_scale(struct bma400_data *data)
  633. {
  634. unsigned int raw_scale;
  635. unsigned int val;
  636. int ret;
  637. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG, &val);
  638. if (ret)
  639. return ret;
  640. raw_scale = FIELD_GET(BMA400_ACC_CONFIG1_ACC_RANGE_MASK, val);
  641. if (raw_scale > BMA400_TWO_BITS_MASK)
  642. return -EINVAL;
  643. data->scale = BMA400_ACC_SCALE_MIN << raw_scale;
  644. return 0;
  645. }
  646. static int bma400_set_accel_scale(struct bma400_data *data, unsigned int val)
  647. {
  648. unsigned int acc_config;
  649. int raw;
  650. int ret;
  651. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG1_REG, &acc_config);
  652. if (ret)
  653. return ret;
  654. raw = bma400_accel_scale_to_raw(data, val);
  655. if (raw < 0)
  656. return raw;
  657. ret = regmap_write(data->regmap, BMA400_ACC_CONFIG1_REG,
  658. (acc_config & ~BMA400_ACC_CONFIG1_ACC_RANGE_MASK) |
  659. FIELD_PREP(BMA400_ACC_CONFIG1_ACC_RANGE_MASK, raw));
  660. if (ret)
  661. return ret;
  662. data->scale = val;
  663. return 0;
  664. }
  665. static int bma400_get_power_mode(struct bma400_data *data)
  666. {
  667. unsigned int val;
  668. int ret;
  669. ret = regmap_read(data->regmap, BMA400_STATUS_REG, &val);
  670. if (ret) {
  671. dev_err(data->dev, "Failed to read status register\n");
  672. return ret;
  673. }
  674. data->power_mode = (val >> 1) & BMA400_TWO_BITS_MASK;
  675. return 0;
  676. }
  677. static int bma400_set_power_mode(struct bma400_data *data,
  678. enum bma400_power_mode mode)
  679. {
  680. unsigned int val;
  681. int ret;
  682. ret = regmap_read(data->regmap, BMA400_ACC_CONFIG0_REG, &val);
  683. if (ret)
  684. return ret;
  685. if (data->power_mode == mode)
  686. return 0;
  687. if (mode == POWER_MODE_INVALID)
  688. return -EINVAL;
  689. /* Preserve the low-power oversample ratio etc */
  690. ret = regmap_write(data->regmap, BMA400_ACC_CONFIG0_REG,
  691. mode | (val & ~BMA400_TWO_BITS_MASK));
  692. if (ret) {
  693. dev_err(data->dev, "Failed to write to power-mode\n");
  694. return ret;
  695. }
  696. data->power_mode = mode;
  697. /*
  698. * Update our cached osr and odr based on the new
  699. * power-mode.
  700. */
  701. bma400_get_accel_output_data_rate(data);
  702. bma400_get_accel_oversampling_ratio(data);
  703. return 0;
  704. }
  705. static int bma400_enable_steps(struct bma400_data *data, int val)
  706. {
  707. int ret;
  708. if (data->steps_enabled == val)
  709. return 0;
  710. ret = regmap_update_bits(data->regmap, BMA400_INT_CONFIG1_REG,
  711. BMA400_INT_CONFIG1_STEP_INT_MASK,
  712. FIELD_PREP(BMA400_INT_CONFIG1_STEP_INT_MASK, val ? 1 : 0));
  713. if (ret)
  714. return ret;
  715. data->steps_enabled = val;
  716. return ret;
  717. }
  718. static int bma400_get_steps_reg(struct bma400_data *data, int *val)
  719. {
  720. int ret;
  721. u8 *steps_raw __free(kfree) = kmalloc(BMA400_STEP_RAW_LEN, GFP_KERNEL);
  722. if (!steps_raw)
  723. return -ENOMEM;
  724. ret = regmap_bulk_read(data->regmap, BMA400_STEP_CNT0_REG,
  725. steps_raw, BMA400_STEP_RAW_LEN);
  726. if (ret)
  727. return ret;
  728. *val = get_unaligned_le24(steps_raw);
  729. return IIO_VAL_INT;
  730. }
  731. static void bma400_init_tables(void)
  732. {
  733. int raw;
  734. int i;
  735. for (i = 0; i + 1 < ARRAY_SIZE(bma400_sample_freqs); i += 2) {
  736. raw = (i / 2) + 5;
  737. bma400_output_data_rate_from_raw(raw, &bma400_sample_freqs[i],
  738. &bma400_sample_freqs[i + 1]);
  739. }
  740. for (i = 0; i + 1 < ARRAY_SIZE(bma400_scales); i += 2) {
  741. raw = i / 2;
  742. bma400_scales[i] = 0;
  743. bma400_scales[i + 1] = BMA400_ACC_SCALE_MIN << raw;
  744. }
  745. }
  746. static void bma400_power_disable(void *data_ptr)
  747. {
  748. struct bma400_data *data = data_ptr;
  749. int ret;
  750. mutex_lock(&data->mutex);
  751. ret = bma400_set_power_mode(data, POWER_MODE_SLEEP);
  752. mutex_unlock(&data->mutex);
  753. if (ret)
  754. dev_warn(data->dev, "Failed to put device into sleep mode (%pe)\n",
  755. ERR_PTR(ret));
  756. }
  757. static enum iio_modifier bma400_act_to_mod(enum bma400_activity activity)
  758. {
  759. switch (activity) {
  760. case BMA400_STILL:
  761. return IIO_MOD_STILL;
  762. case BMA400_WALKING:
  763. return IIO_MOD_WALKING;
  764. case BMA400_RUNNING:
  765. return IIO_MOD_RUNNING;
  766. default:
  767. return IIO_NO_MOD;
  768. }
  769. }
  770. static int bma400_init(struct bma400_data *data)
  771. {
  772. static const char * const regulator_names[] = { "vdd", "vddio" };
  773. unsigned int val;
  774. int ret;
  775. ret = devm_regulator_bulk_get_enable(data->dev,
  776. ARRAY_SIZE(regulator_names),
  777. regulator_names);
  778. if (ret)
  779. return dev_err_probe(data->dev, ret, "Failed to get regulators\n");
  780. /* Try to read chip_id register. It must return 0x90. */
  781. ret = regmap_read(data->regmap, BMA400_CHIP_ID_REG, &val);
  782. if (ret) {
  783. dev_err(data->dev, "Failed to read chip id register\n");
  784. return ret;
  785. }
  786. if (val != BMA400_ID_REG_VAL) {
  787. dev_err(data->dev, "Chip ID mismatch\n");
  788. return -ENODEV;
  789. }
  790. ret = bma400_get_power_mode(data);
  791. if (ret) {
  792. dev_err(data->dev, "Failed to get the initial power-mode\n");
  793. return ret;
  794. }
  795. if (data->power_mode != POWER_MODE_NORMAL) {
  796. ret = bma400_set_power_mode(data, POWER_MODE_NORMAL);
  797. if (ret) {
  798. dev_err(data->dev, "Failed to wake up the device\n");
  799. return ret;
  800. }
  801. /*
  802. * TODO: The datasheet waits 1500us here in the example, but
  803. * lists 2/ODR as the wakeup time.
  804. */
  805. usleep_range(1500, 2000);
  806. }
  807. ret = devm_add_action_or_reset(data->dev, bma400_power_disable, data);
  808. if (ret)
  809. return ret;
  810. bma400_init_tables();
  811. ret = bma400_get_accel_output_data_rate(data);
  812. if (ret)
  813. return ret;
  814. ret = bma400_get_accel_oversampling_ratio(data);
  815. if (ret)
  816. return ret;
  817. ret = bma400_get_accel_scale(data);
  818. if (ret)
  819. return ret;
  820. /* Configure INT1 pin to open drain */
  821. ret = regmap_write(data->regmap, BMA400_INT_IO_CTRL_REG, 0x06);
  822. if (ret)
  823. return ret;
  824. /*
  825. * Once the interrupt engine is supported we might use the
  826. * data_src_reg, but for now ensure this is set to the
  827. * variable ODR filter selectable by the sample frequency
  828. * channel.
  829. */
  830. return regmap_write(data->regmap, BMA400_ACC_CONFIG2_REG, 0x00);
  831. }
  832. static int bma400_read_raw(struct iio_dev *indio_dev,
  833. struct iio_chan_spec const *chan, int *val,
  834. int *val2, long mask)
  835. {
  836. struct bma400_data *data = iio_priv(indio_dev);
  837. unsigned int activity;
  838. int ret;
  839. switch (mask) {
  840. case IIO_CHAN_INFO_PROCESSED:
  841. switch (chan->type) {
  842. case IIO_TEMP:
  843. mutex_lock(&data->mutex);
  844. ret = bma400_get_temp_reg(data, val, val2);
  845. mutex_unlock(&data->mutex);
  846. return ret;
  847. case IIO_STEPS:
  848. return bma400_get_steps_reg(data, val);
  849. case IIO_ACTIVITY:
  850. ret = regmap_read(data->regmap, BMA400_STEP_STAT_REG,
  851. &activity);
  852. if (ret)
  853. return ret;
  854. /*
  855. * The device does not support confidence value levels,
  856. * so we will always have 100% for current activity and
  857. * 0% for the others.
  858. */
  859. if (chan->channel2 == bma400_act_to_mod(activity))
  860. *val = 100;
  861. else
  862. *val = 0;
  863. return IIO_VAL_INT;
  864. default:
  865. return -EINVAL;
  866. }
  867. case IIO_CHAN_INFO_RAW:
  868. mutex_lock(&data->mutex);
  869. ret = bma400_get_accel_reg(data, chan, val);
  870. mutex_unlock(&data->mutex);
  871. return ret;
  872. case IIO_CHAN_INFO_SAMP_FREQ:
  873. switch (chan->type) {
  874. case IIO_ACCEL:
  875. if (data->sample_freq.hz < 0)
  876. return -EINVAL;
  877. *val = data->sample_freq.hz;
  878. *val2 = data->sample_freq.uhz;
  879. return IIO_VAL_INT_PLUS_MICRO;
  880. case IIO_TEMP:
  881. /*
  882. * Runs at a fixed sampling frequency. See Section 4.4
  883. * of the datasheet.
  884. */
  885. *val = 6;
  886. *val2 = 250000;
  887. return IIO_VAL_INT_PLUS_MICRO;
  888. default:
  889. return -EINVAL;
  890. }
  891. case IIO_CHAN_INFO_SCALE:
  892. *val = 0;
  893. *val2 = data->scale;
  894. return IIO_VAL_INT_PLUS_MICRO;
  895. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  896. /*
  897. * TODO: We could avoid this logic and returning -EINVAL here if
  898. * we set both the low-power and normal mode OSR registers when
  899. * we configure the device.
  900. */
  901. if (data->oversampling_ratio < 0)
  902. return -EINVAL;
  903. *val = data->oversampling_ratio;
  904. return IIO_VAL_INT;
  905. case IIO_CHAN_INFO_ENABLE:
  906. *val = data->steps_enabled;
  907. return IIO_VAL_INT;
  908. default:
  909. return -EINVAL;
  910. }
  911. }
  912. static int bma400_read_avail(struct iio_dev *indio_dev,
  913. struct iio_chan_spec const *chan,
  914. const int **vals, int *type, int *length,
  915. long mask)
  916. {
  917. switch (mask) {
  918. case IIO_CHAN_INFO_SCALE:
  919. *type = IIO_VAL_INT_PLUS_MICRO;
  920. *vals = bma400_scales;
  921. *length = ARRAY_SIZE(bma400_scales);
  922. return IIO_AVAIL_LIST;
  923. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  924. *type = IIO_VAL_INT;
  925. *vals = bma400_osr_range;
  926. *length = ARRAY_SIZE(bma400_osr_range);
  927. return IIO_AVAIL_RANGE;
  928. case IIO_CHAN_INFO_SAMP_FREQ:
  929. *type = IIO_VAL_INT_PLUS_MICRO;
  930. *vals = bma400_sample_freqs;
  931. *length = ARRAY_SIZE(bma400_sample_freqs);
  932. return IIO_AVAIL_LIST;
  933. default:
  934. return -EINVAL;
  935. }
  936. }
  937. static int bma400_write_raw(struct iio_dev *indio_dev,
  938. struct iio_chan_spec const *chan, int val, int val2,
  939. long mask)
  940. {
  941. struct bma400_data *data = iio_priv(indio_dev);
  942. int ret;
  943. switch (mask) {
  944. case IIO_CHAN_INFO_SAMP_FREQ:
  945. /*
  946. * The sample frequency is readonly for the temperature
  947. * register and a fixed value in low-power mode.
  948. */
  949. if (chan->type != IIO_ACCEL)
  950. return -EINVAL;
  951. mutex_lock(&data->mutex);
  952. ret = bma400_set_accel_output_data_rate(data, val, val2);
  953. mutex_unlock(&data->mutex);
  954. return ret;
  955. case IIO_CHAN_INFO_SCALE:
  956. if (val != 0 ||
  957. val2 < BMA400_ACC_SCALE_MIN || val2 > BMA400_ACC_SCALE_MAX)
  958. return -EINVAL;
  959. mutex_lock(&data->mutex);
  960. ret = bma400_set_accel_scale(data, val2);
  961. mutex_unlock(&data->mutex);
  962. return ret;
  963. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  964. mutex_lock(&data->mutex);
  965. ret = bma400_set_accel_oversampling_ratio(data, val);
  966. mutex_unlock(&data->mutex);
  967. return ret;
  968. case IIO_CHAN_INFO_ENABLE:
  969. mutex_lock(&data->mutex);
  970. ret = bma400_enable_steps(data, val);
  971. mutex_unlock(&data->mutex);
  972. return ret;
  973. default:
  974. return -EINVAL;
  975. }
  976. }
  977. static int bma400_write_raw_get_fmt(struct iio_dev *indio_dev,
  978. struct iio_chan_spec const *chan,
  979. long mask)
  980. {
  981. switch (mask) {
  982. case IIO_CHAN_INFO_SAMP_FREQ:
  983. return IIO_VAL_INT_PLUS_MICRO;
  984. case IIO_CHAN_INFO_SCALE:
  985. return IIO_VAL_INT_PLUS_MICRO;
  986. case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
  987. return IIO_VAL_INT;
  988. case IIO_CHAN_INFO_ENABLE:
  989. return IIO_VAL_INT;
  990. default:
  991. return -EINVAL;
  992. }
  993. }
  994. static int bma400_read_event_config(struct iio_dev *indio_dev,
  995. const struct iio_chan_spec *chan,
  996. enum iio_event_type type,
  997. enum iio_event_direction dir)
  998. {
  999. struct bma400_data *data = iio_priv(indio_dev);
  1000. switch (chan->type) {
  1001. case IIO_ACCEL:
  1002. switch (dir) {
  1003. case IIO_EV_DIR_RISING:
  1004. return FIELD_GET(BMA400_INT_CONFIG0_GEN1_MASK,
  1005. data->generic_event_en);
  1006. case IIO_EV_DIR_FALLING:
  1007. return FIELD_GET(BMA400_INT_CONFIG0_GEN2_MASK,
  1008. data->generic_event_en);
  1009. case IIO_EV_DIR_SINGLETAP:
  1010. return FIELD_GET(BMA400_INT_CONFIG1_S_TAP_MASK,
  1011. data->tap_event_en_bitmask);
  1012. case IIO_EV_DIR_DOUBLETAP:
  1013. return FIELD_GET(BMA400_INT_CONFIG1_D_TAP_MASK,
  1014. data->tap_event_en_bitmask);
  1015. default:
  1016. return -EINVAL;
  1017. }
  1018. case IIO_STEPS:
  1019. return data->step_event_en;
  1020. case IIO_ACTIVITY:
  1021. return data->activity_event_en;
  1022. default:
  1023. return -EINVAL;
  1024. }
  1025. }
  1026. static int bma400_steps_event_enable(struct bma400_data *data, int state)
  1027. {
  1028. int ret;
  1029. ret = bma400_enable_steps(data, 1);
  1030. if (ret)
  1031. return ret;
  1032. ret = regmap_update_bits(data->regmap, BMA400_INT12_MAP_REG,
  1033. BMA400_INT_CONFIG1_STEP_INT_MASK,
  1034. FIELD_PREP(BMA400_INT_CONFIG1_STEP_INT_MASK,
  1035. state));
  1036. if (ret)
  1037. return ret;
  1038. data->step_event_en = state;
  1039. return 0;
  1040. }
  1041. static int bma400_generic_event_en(struct bma400_data *data,
  1042. enum iio_event_direction dir,
  1043. int state)
  1044. {
  1045. int ret;
  1046. unsigned int intrmask, regval;
  1047. enum bma400_generic_intr genintr;
  1048. enum bma400_detect_criterion detect_criterion;
  1049. const struct bma400_genintr_info *bma400_genintr;
  1050. bma400_genintr = get_bma400_genintr_info(dir);
  1051. if (!bma400_genintr)
  1052. return -EINVAL;
  1053. genintr = bma400_genintr->genintr;
  1054. detect_criterion = bma400_genintr->detect_mode;
  1055. intrmask = bma400_genintr->intrmask;
  1056. /*
  1057. * Enabling all axis for interrupt evaluation
  1058. * Acc_filt2 is recommended as data source in datasheet (Section 4.7)
  1059. */
  1060. ret = regmap_write(data->regmap, BMA400_GENINT_CONFIG_REG(genintr, 0),
  1061. BMA400_GENINT_CONFIG0_X_EN_MASK |
  1062. BMA400_GENINT_CONFIG0_Y_EN_MASK |
  1063. BMA400_GENINT_CONFIG0_Z_EN_MASK|
  1064. FIELD_PREP(BMA400_GENINT_CONFIG0_DATA_SRC_MASK, ACCEL_FILT2)|
  1065. FIELD_PREP(BMA400_GENINT_CONFIG0_REF_UPD_MODE_MASK,
  1066. BMA400_REF_EVERYTIME_UPDT_MODE));
  1067. if (ret)
  1068. return ret;
  1069. /* OR combination of all axis for interrupt evaluation */
  1070. regval = FIELD_PREP(BMA400_GENINT_CONFIG1_AXES_COMB_MASK, BMA400_EVAL_X_OR_Y_OR_Z) |
  1071. FIELD_PREP(BMA400_GENINT_CONFIG1_DETCT_CRIT_MASK, detect_criterion);
  1072. ret = regmap_write(data->regmap, BMA400_GENINT_CONFIG_REG(genintr, 1), regval);
  1073. if (ret)
  1074. return ret;
  1075. /*
  1076. * Initial value to avoid interrupts while enabling
  1077. * Value is in units of 8mg/lsb, i.e. effective val is val * 8mg/lsb
  1078. */
  1079. ret = regmap_write(data->regmap, BMA400_GENINT_CONFIG_REG(genintr, 2), 0x0A);
  1080. if (ret)
  1081. return ret;
  1082. /* Initial duration value to avoid interrupts while enabling*/
  1083. ret = regmap_write(data->regmap, BMA400_GENINT_CONFIG_REG(genintr, 4), 0x0F);
  1084. if (ret)
  1085. return ret;
  1086. regval = state ? intrmask : 0;
  1087. ret = regmap_update_bits(data->regmap, BMA400_INT1_MAP_REG, intrmask, regval);
  1088. if (ret)
  1089. return ret;
  1090. ret = regmap_update_bits(data->regmap, BMA400_INT_CONFIG0_REG, intrmask, regval);
  1091. if (ret)
  1092. return ret;
  1093. set_mask_bits(&data->generic_event_en, intrmask, regval);
  1094. return 0;
  1095. }
  1096. static int bma400_tap_event_en(struct bma400_data *data,
  1097. enum iio_event_direction dir, int state)
  1098. {
  1099. unsigned int mask;
  1100. unsigned int field_value = 0;
  1101. int ret;
  1102. /*
  1103. * Tap interrupts can be configured only in normal mode.
  1104. * See table in section 4.3 "Power modes - performance modes" of
  1105. * datasheet v1.2.
  1106. */
  1107. if (data->power_mode != POWER_MODE_NORMAL)
  1108. return -EINVAL;
  1109. /*
  1110. * Tap interrupts are operating with a data rate of 200Hz.
  1111. * See section 4.7 "Tap sensing interrupt" in datasheet v1.2.
  1112. */
  1113. if (data->sample_freq.hz != 200 && state) {
  1114. dev_err(data->dev, "Invalid data rate for tap interrupts.\n");
  1115. return -EINVAL;
  1116. }
  1117. ret = regmap_update_bits(data->regmap, BMA400_INT12_MAP_REG,
  1118. BMA400_INT_CONFIG1_S_TAP_MASK,
  1119. FIELD_PREP(BMA400_INT_CONFIG1_S_TAP_MASK, state));
  1120. if (ret)
  1121. return ret;
  1122. switch (dir) {
  1123. case IIO_EV_DIR_SINGLETAP:
  1124. mask = BMA400_INT_CONFIG1_S_TAP_MASK;
  1125. set_mask_bits(&field_value, BMA400_INT_CONFIG1_S_TAP_MASK,
  1126. FIELD_PREP(BMA400_INT_CONFIG1_S_TAP_MASK, state));
  1127. break;
  1128. case IIO_EV_DIR_DOUBLETAP:
  1129. mask = BMA400_INT_CONFIG1_D_TAP_MASK;
  1130. set_mask_bits(&field_value, BMA400_INT_CONFIG1_D_TAP_MASK,
  1131. FIELD_PREP(BMA400_INT_CONFIG1_D_TAP_MASK, state));
  1132. break;
  1133. default:
  1134. return -EINVAL;
  1135. }
  1136. ret = regmap_update_bits(data->regmap, BMA400_INT_CONFIG1_REG, mask,
  1137. field_value);
  1138. if (ret)
  1139. return ret;
  1140. set_mask_bits(&data->tap_event_en_bitmask, mask, field_value);
  1141. return 0;
  1142. }
  1143. static int bma400_disable_adv_interrupt(struct bma400_data *data)
  1144. {
  1145. int ret;
  1146. ret = regmap_write(data->regmap, BMA400_INT_CONFIG0_REG, 0);
  1147. if (ret)
  1148. return ret;
  1149. ret = regmap_write(data->regmap, BMA400_INT_CONFIG1_REG, 0);
  1150. if (ret)
  1151. return ret;
  1152. data->tap_event_en_bitmask = 0;
  1153. data->generic_event_en = 0;
  1154. data->step_event_en = false;
  1155. data->activity_event_en = false;
  1156. return 0;
  1157. }
  1158. static int bma400_write_event_config(struct iio_dev *indio_dev,
  1159. const struct iio_chan_spec *chan,
  1160. enum iio_event_type type,
  1161. enum iio_event_direction dir, bool state)
  1162. {
  1163. struct bma400_data *data = iio_priv(indio_dev);
  1164. int ret;
  1165. switch (chan->type) {
  1166. case IIO_ACCEL:
  1167. switch (type) {
  1168. case IIO_EV_TYPE_MAG:
  1169. mutex_lock(&data->mutex);
  1170. ret = bma400_generic_event_en(data, dir, state);
  1171. mutex_unlock(&data->mutex);
  1172. return ret;
  1173. case IIO_EV_TYPE_GESTURE:
  1174. mutex_lock(&data->mutex);
  1175. ret = bma400_tap_event_en(data, dir, state);
  1176. mutex_unlock(&data->mutex);
  1177. return ret;
  1178. default:
  1179. return -EINVAL;
  1180. }
  1181. case IIO_STEPS:
  1182. mutex_lock(&data->mutex);
  1183. ret = bma400_steps_event_enable(data, state);
  1184. mutex_unlock(&data->mutex);
  1185. return ret;
  1186. case IIO_ACTIVITY:
  1187. mutex_lock(&data->mutex);
  1188. if (!data->step_event_en) {
  1189. ret = bma400_steps_event_enable(data, true);
  1190. if (ret) {
  1191. mutex_unlock(&data->mutex);
  1192. return ret;
  1193. }
  1194. }
  1195. data->activity_event_en = state;
  1196. mutex_unlock(&data->mutex);
  1197. return 0;
  1198. default:
  1199. return -EINVAL;
  1200. }
  1201. }
  1202. static int bma400_read_event_value(struct iio_dev *indio_dev,
  1203. const struct iio_chan_spec *chan,
  1204. enum iio_event_type type,
  1205. enum iio_event_direction dir,
  1206. enum iio_event_info info,
  1207. int *val, int *val2)
  1208. {
  1209. struct bma400_data *data = iio_priv(indio_dev);
  1210. int ret, reg_val, raw;
  1211. enum bma400_generic_intr genintr;
  1212. const struct bma400_genintr_info *bma400_genintr;
  1213. if (chan->type != IIO_ACCEL)
  1214. return -EINVAL;
  1215. switch (type) {
  1216. case IIO_EV_TYPE_MAG:
  1217. bma400_genintr = get_bma400_genintr_info(dir);
  1218. if (!bma400_genintr)
  1219. return -EINVAL;
  1220. genintr = bma400_genintr->genintr;
  1221. *val2 = 0;
  1222. switch (info) {
  1223. case IIO_EV_INFO_VALUE:
  1224. ret = regmap_read(data->regmap,
  1225. BMA400_GENINT_CONFIG_REG(genintr, 2),
  1226. val);
  1227. if (ret)
  1228. return ret;
  1229. return IIO_VAL_INT;
  1230. case IIO_EV_INFO_PERIOD:
  1231. mutex_lock(&data->mutex);
  1232. ret = regmap_bulk_read(data->regmap,
  1233. BMA400_GENINT_CONFIG_REG(genintr, 3),
  1234. &data->duration,
  1235. sizeof(data->duration));
  1236. if (ret) {
  1237. mutex_unlock(&data->mutex);
  1238. return ret;
  1239. }
  1240. *val = be16_to_cpu(data->duration);
  1241. mutex_unlock(&data->mutex);
  1242. return IIO_VAL_INT;
  1243. case IIO_EV_INFO_HYSTERESIS:
  1244. ret = regmap_read(data->regmap,
  1245. BMA400_GENINT_CONFIG_REG(genintr, 0),
  1246. val);
  1247. if (ret)
  1248. return ret;
  1249. *val = FIELD_GET(BMA400_GENINT_CONFIG0_HYST_MASK, *val);
  1250. return IIO_VAL_INT;
  1251. default:
  1252. return -EINVAL;
  1253. }
  1254. case IIO_EV_TYPE_GESTURE:
  1255. switch (info) {
  1256. case IIO_EV_INFO_VALUE:
  1257. ret = regmap_read(data->regmap, BMA400_TAP_CONFIG_REG,
  1258. &reg_val);
  1259. if (ret)
  1260. return ret;
  1261. *val = FIELD_GET(BMA400_TAP_CONFIG_SEN_MASK, reg_val);
  1262. return IIO_VAL_INT;
  1263. case IIO_EV_INFO_RESET_TIMEOUT:
  1264. ret = regmap_read(data->regmap, BMA400_TAP_CONFIG1_REG,
  1265. &reg_val);
  1266. if (ret)
  1267. return ret;
  1268. raw = FIELD_GET(BMA400_TAP_CONFIG1_QUIET_MASK, reg_val);
  1269. *val = 0;
  1270. *val2 = tap_reset_timeout[raw];
  1271. return IIO_VAL_INT_PLUS_MICRO;
  1272. case IIO_EV_INFO_TAP2_MIN_DELAY:
  1273. ret = regmap_read(data->regmap, BMA400_TAP_CONFIG1_REG,
  1274. &reg_val);
  1275. if (ret)
  1276. return ret;
  1277. raw = FIELD_GET(BMA400_TAP_CONFIG1_QUIETDT_MASK, reg_val);
  1278. *val = 0;
  1279. *val2 = double_tap2_min_delay[raw];
  1280. return IIO_VAL_INT_PLUS_MICRO;
  1281. default:
  1282. return -EINVAL;
  1283. }
  1284. default:
  1285. return -EINVAL;
  1286. }
  1287. }
  1288. static int bma400_write_event_value(struct iio_dev *indio_dev,
  1289. const struct iio_chan_spec *chan,
  1290. enum iio_event_type type,
  1291. enum iio_event_direction dir,
  1292. enum iio_event_info info,
  1293. int val, int val2)
  1294. {
  1295. struct bma400_data *data = iio_priv(indio_dev);
  1296. int ret, raw;
  1297. enum bma400_generic_intr genintr;
  1298. const struct bma400_genintr_info *bma400_genintr;
  1299. if (chan->type != IIO_ACCEL)
  1300. return -EINVAL;
  1301. switch (type) {
  1302. case IIO_EV_TYPE_MAG:
  1303. bma400_genintr = get_bma400_genintr_info(dir);
  1304. if (!bma400_genintr)
  1305. return -EINVAL;
  1306. genintr = bma400_genintr->genintr;
  1307. switch (info) {
  1308. case IIO_EV_INFO_VALUE:
  1309. if (val < 1 || val > 255)
  1310. return -EINVAL;
  1311. return regmap_write(data->regmap,
  1312. BMA400_GENINT_CONFIG_REG(genintr, 2),
  1313. val);
  1314. case IIO_EV_INFO_PERIOD:
  1315. if (val < 1 || val > 65535)
  1316. return -EINVAL;
  1317. mutex_lock(&data->mutex);
  1318. put_unaligned_be16(val, &data->duration);
  1319. ret = regmap_bulk_write(data->regmap,
  1320. BMA400_GENINT_CONFIG_REG(genintr, 3),
  1321. &data->duration,
  1322. sizeof(data->duration));
  1323. mutex_unlock(&data->mutex);
  1324. return ret;
  1325. case IIO_EV_INFO_HYSTERESIS:
  1326. if (val < 0 || val > 3)
  1327. return -EINVAL;
  1328. return regmap_update_bits(data->regmap,
  1329. BMA400_GENINT_CONFIG_REG(genintr, 0),
  1330. BMA400_GENINT_CONFIG0_HYST_MASK,
  1331. FIELD_PREP(BMA400_GENINT_CONFIG0_HYST_MASK,
  1332. val));
  1333. default:
  1334. return -EINVAL;
  1335. }
  1336. case IIO_EV_TYPE_GESTURE:
  1337. switch (info) {
  1338. case IIO_EV_INFO_VALUE:
  1339. if (val < 0 || val > 7)
  1340. return -EINVAL;
  1341. return regmap_update_bits(data->regmap,
  1342. BMA400_TAP_CONFIG_REG,
  1343. BMA400_TAP_CONFIG_SEN_MASK,
  1344. FIELD_PREP(BMA400_TAP_CONFIG_SEN_MASK,
  1345. val));
  1346. case IIO_EV_INFO_RESET_TIMEOUT:
  1347. raw = usec_to_tapreg_raw(val2, tap_reset_timeout);
  1348. if (raw < 0)
  1349. return -EINVAL;
  1350. return regmap_update_bits(data->regmap,
  1351. BMA400_TAP_CONFIG1_REG,
  1352. BMA400_TAP_CONFIG1_QUIET_MASK,
  1353. FIELD_PREP(BMA400_TAP_CONFIG1_QUIET_MASK,
  1354. raw));
  1355. case IIO_EV_INFO_TAP2_MIN_DELAY:
  1356. raw = usec_to_tapreg_raw(val2, double_tap2_min_delay);
  1357. if (raw < 0)
  1358. return -EINVAL;
  1359. return regmap_update_bits(data->regmap,
  1360. BMA400_TAP_CONFIG1_REG,
  1361. BMA400_TAP_CONFIG1_QUIETDT_MASK,
  1362. FIELD_PREP(BMA400_TAP_CONFIG1_QUIETDT_MASK,
  1363. raw));
  1364. default:
  1365. return -EINVAL;
  1366. }
  1367. default:
  1368. return -EINVAL;
  1369. }
  1370. }
  1371. static int bma400_data_rdy_trigger_set_state(struct iio_trigger *trig,
  1372. bool state)
  1373. {
  1374. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  1375. struct bma400_data *data = iio_priv(indio_dev);
  1376. int ret;
  1377. ret = regmap_update_bits(data->regmap, BMA400_INT_CONFIG0_REG,
  1378. BMA400_INT_CONFIG0_DRDY_MASK,
  1379. FIELD_PREP(BMA400_INT_CONFIG0_DRDY_MASK, state));
  1380. if (ret)
  1381. return ret;
  1382. return regmap_update_bits(data->regmap, BMA400_INT1_MAP_REG,
  1383. BMA400_INT_CONFIG0_DRDY_MASK,
  1384. FIELD_PREP(BMA400_INT_CONFIG0_DRDY_MASK, state));
  1385. }
  1386. static const unsigned long bma400_avail_scan_masks[] = {
  1387. BIT(BMA400_ACCL_X) | BIT(BMA400_ACCL_Y) | BIT(BMA400_ACCL_Z),
  1388. BIT(BMA400_ACCL_X) | BIT(BMA400_ACCL_Y) | BIT(BMA400_ACCL_Z)
  1389. | BIT(BMA400_TEMP),
  1390. 0
  1391. };
  1392. static const struct iio_info bma400_info = {
  1393. .read_raw = bma400_read_raw,
  1394. .read_avail = bma400_read_avail,
  1395. .write_raw = bma400_write_raw,
  1396. .write_raw_get_fmt = bma400_write_raw_get_fmt,
  1397. .read_event_config = bma400_read_event_config,
  1398. .write_event_config = bma400_write_event_config,
  1399. .write_event_value = bma400_write_event_value,
  1400. .read_event_value = bma400_read_event_value,
  1401. .event_attrs = &bma400_event_attribute_group,
  1402. };
  1403. static const struct iio_trigger_ops bma400_trigger_ops = {
  1404. .set_trigger_state = &bma400_data_rdy_trigger_set_state,
  1405. .validate_device = &iio_trigger_validate_own_device,
  1406. };
  1407. static irqreturn_t bma400_trigger_handler(int irq, void *p)
  1408. {
  1409. struct iio_poll_func *pf = p;
  1410. struct iio_dev *indio_dev = pf->indio_dev;
  1411. struct bma400_data *data = iio_priv(indio_dev);
  1412. int ret, temp;
  1413. /* Lock to protect the data->buffer */
  1414. mutex_lock(&data->mutex);
  1415. /* bulk read six registers, with the base being the LSB register */
  1416. ret = regmap_bulk_read(data->regmap, BMA400_ACC_X_LSB_REG,
  1417. &data->buffer.buff, sizeof(data->buffer.buff));
  1418. if (ret)
  1419. goto unlock_err;
  1420. if (test_bit(BMA400_TEMP, indio_dev->active_scan_mask)) {
  1421. ret = regmap_read(data->regmap, BMA400_TEMP_DATA_REG, &temp);
  1422. if (ret)
  1423. goto unlock_err;
  1424. data->buffer.temperature = temp;
  1425. }
  1426. iio_push_to_buffers_with_ts(indio_dev, &data->buffer,
  1427. sizeof(data->buffer),
  1428. iio_get_time_ns(indio_dev));
  1429. mutex_unlock(&data->mutex);
  1430. iio_trigger_notify_done(indio_dev->trig);
  1431. return IRQ_HANDLED;
  1432. unlock_err:
  1433. mutex_unlock(&data->mutex);
  1434. return IRQ_NONE;
  1435. }
  1436. static irqreturn_t bma400_interrupt(int irq, void *private)
  1437. {
  1438. struct iio_dev *indio_dev = private;
  1439. struct bma400_data *data = iio_priv(indio_dev);
  1440. s64 timestamp = iio_get_time_ns(indio_dev);
  1441. unsigned int act, ev_dir = IIO_EV_DIR_NONE;
  1442. int ret;
  1443. /* Lock to protect the data->status */
  1444. mutex_lock(&data->mutex);
  1445. ret = regmap_bulk_read(data->regmap, BMA400_INT_STAT0_REG,
  1446. &data->status,
  1447. sizeof(data->status));
  1448. /*
  1449. * if none of the bit is set in the status register then it is
  1450. * spurious interrupt.
  1451. */
  1452. if (ret || !data->status)
  1453. goto unlock_err;
  1454. /*
  1455. * Disable all advance interrupts if interrupt engine overrun occurs.
  1456. * See section 4.7 "Interrupt engine overrun" in datasheet v1.2.
  1457. */
  1458. if (FIELD_GET(BMA400_INT_STAT_ENG_OVRRUN_MASK, le16_to_cpu(data->status))) {
  1459. bma400_disable_adv_interrupt(data);
  1460. dev_err(data->dev, "Interrupt engine overrun\n");
  1461. goto unlock_err;
  1462. }
  1463. if (FIELD_GET(BMA400_INT_STAT1_S_TAP_MASK, le16_to_cpu(data->status)))
  1464. iio_push_event(indio_dev,
  1465. IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
  1466. IIO_MOD_X_OR_Y_OR_Z,
  1467. IIO_EV_TYPE_GESTURE,
  1468. IIO_EV_DIR_SINGLETAP),
  1469. timestamp);
  1470. if (FIELD_GET(BMA400_INT_STAT1_D_TAP_MASK, le16_to_cpu(data->status)))
  1471. iio_push_event(indio_dev,
  1472. IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
  1473. IIO_MOD_X_OR_Y_OR_Z,
  1474. IIO_EV_TYPE_GESTURE,
  1475. IIO_EV_DIR_DOUBLETAP),
  1476. timestamp);
  1477. if (FIELD_GET(BMA400_INT_STAT0_GEN1_MASK, le16_to_cpu(data->status)))
  1478. ev_dir = IIO_EV_DIR_RISING;
  1479. if (FIELD_GET(BMA400_INT_STAT0_GEN2_MASK, le16_to_cpu(data->status)))
  1480. ev_dir = IIO_EV_DIR_FALLING;
  1481. if (ev_dir != IIO_EV_DIR_NONE) {
  1482. iio_push_event(indio_dev,
  1483. IIO_MOD_EVENT_CODE(IIO_ACCEL, 0,
  1484. IIO_MOD_X_OR_Y_OR_Z,
  1485. IIO_EV_TYPE_MAG, ev_dir),
  1486. timestamp);
  1487. }
  1488. if (FIELD_GET(BMA400_INT_STAT1_STEP_INT_MASK, le16_to_cpu(data->status))) {
  1489. iio_push_event(indio_dev,
  1490. IIO_MOD_EVENT_CODE(IIO_STEPS, 0, IIO_NO_MOD,
  1491. IIO_EV_TYPE_CHANGE,
  1492. IIO_EV_DIR_NONE),
  1493. timestamp);
  1494. if (data->activity_event_en) {
  1495. ret = regmap_read(data->regmap, BMA400_STEP_STAT_REG,
  1496. &act);
  1497. if (ret)
  1498. goto unlock_err;
  1499. iio_push_event(indio_dev,
  1500. IIO_MOD_EVENT_CODE(IIO_ACTIVITY, 0,
  1501. bma400_act_to_mod(act),
  1502. IIO_EV_TYPE_CHANGE,
  1503. IIO_EV_DIR_NONE),
  1504. timestamp);
  1505. }
  1506. }
  1507. if (FIELD_GET(BMA400_INT_STAT0_DRDY_MASK, le16_to_cpu(data->status))) {
  1508. mutex_unlock(&data->mutex);
  1509. iio_trigger_poll_nested(data->trig);
  1510. return IRQ_HANDLED;
  1511. }
  1512. mutex_unlock(&data->mutex);
  1513. return IRQ_HANDLED;
  1514. unlock_err:
  1515. mutex_unlock(&data->mutex);
  1516. return IRQ_NONE;
  1517. }
  1518. int bma400_probe(struct device *dev, struct regmap *regmap, int irq,
  1519. const char *name)
  1520. {
  1521. struct iio_dev *indio_dev;
  1522. struct bma400_data *data;
  1523. int ret;
  1524. indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
  1525. if (!indio_dev)
  1526. return -ENOMEM;
  1527. data = iio_priv(indio_dev);
  1528. data->regmap = regmap;
  1529. data->dev = dev;
  1530. ret = bma400_init(data);
  1531. if (ret)
  1532. return ret;
  1533. ret = iio_read_mount_matrix(dev, &data->orientation);
  1534. if (ret)
  1535. return ret;
  1536. mutex_init(&data->mutex);
  1537. indio_dev->name = name;
  1538. indio_dev->info = &bma400_info;
  1539. indio_dev->channels = bma400_channels;
  1540. indio_dev->num_channels = ARRAY_SIZE(bma400_channels);
  1541. indio_dev->available_scan_masks = bma400_avail_scan_masks;
  1542. indio_dev->modes = INDIO_DIRECT_MODE;
  1543. if (irq > 0) {
  1544. data->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
  1545. indio_dev->name,
  1546. iio_device_id(indio_dev));
  1547. if (!data->trig)
  1548. return -ENOMEM;
  1549. data->trig->ops = &bma400_trigger_ops;
  1550. iio_trigger_set_drvdata(data->trig, indio_dev);
  1551. ret = devm_iio_trigger_register(data->dev, data->trig);
  1552. if (ret)
  1553. return dev_err_probe(data->dev, ret,
  1554. "iio trigger register fail\n");
  1555. indio_dev->trig = iio_trigger_get(data->trig);
  1556. ret = devm_request_threaded_irq(dev, irq, NULL,
  1557. &bma400_interrupt,
  1558. IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  1559. indio_dev->name, indio_dev);
  1560. if (ret)
  1561. return dev_err_probe(data->dev, ret,
  1562. "request irq %d failed\n", irq);
  1563. }
  1564. ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
  1565. &bma400_trigger_handler, NULL);
  1566. if (ret)
  1567. return dev_err_probe(data->dev, ret,
  1568. "iio triggered buffer setup failed\n");
  1569. return devm_iio_device_register(dev, indio_dev);
  1570. }
  1571. EXPORT_SYMBOL_NS(bma400_probe, "IIO_BMA400");
  1572. MODULE_AUTHOR("Dan Robertson <dan@dlrobertson.com>");
  1573. MODULE_AUTHOR("Jagath Jog J <jagathjog1996@gmail.com>");
  1574. MODULE_DESCRIPTION("Bosch BMA400 triaxial acceleration sensor core");
  1575. MODULE_LICENSE("GPL");