af8133j.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * af8133j.c - Voltafield AF8133J magnetometer driver
  4. *
  5. * Copyright 2021 Icenowy Zheng <icenowy@aosc.io>
  6. * Copyright 2024 Ondřej Jirman <megi@xff.cz>
  7. */
  8. #include <linux/delay.h>
  9. #include <linux/gpio/consumer.h>
  10. #include <linux/i2c.h>
  11. #include <linux/module.h>
  12. #include <linux/pm_runtime.h>
  13. #include <linux/regmap.h>
  14. #include <linux/regulator/consumer.h>
  15. #include <linux/iio/iio.h>
  16. #include <linux/iio/trigger_consumer.h>
  17. #include <linux/iio/triggered_buffer.h>
  18. #define AF8133J_REG_OUT 0x03
  19. #define AF8133J_REG_PCODE 0x00
  20. #define AF8133J_REG_PCODE_VAL 0x5e
  21. #define AF8133J_REG_STATUS 0x02
  22. #define AF8133J_REG_STATUS_ACQ BIT(0)
  23. #define AF8133J_REG_STATE 0x0a
  24. #define AF8133J_REG_STATE_STBY 0x00
  25. #define AF8133J_REG_STATE_WORK 0x01
  26. #define AF8133J_REG_RANGE 0x0b
  27. #define AF8133J_REG_RANGE_22G 0x12
  28. #define AF8133J_REG_RANGE_12G 0x34
  29. #define AF8133J_REG_SWR 0x11
  30. #define AF8133J_REG_SWR_PERFORM 0x81
  31. static const char * const af8133j_supply_names[] = {
  32. "avdd",
  33. "dvdd",
  34. };
  35. struct af8133j_data {
  36. struct i2c_client *client;
  37. struct regmap *regmap;
  38. /*
  39. * Protect device internal state between starting a measurement
  40. * and reading the result.
  41. */
  42. struct mutex mutex;
  43. struct iio_mount_matrix orientation;
  44. struct gpio_desc *reset_gpiod;
  45. struct regulator_bulk_data supplies[ARRAY_SIZE(af8133j_supply_names)];
  46. u8 range;
  47. };
  48. enum af8133j_axis {
  49. AXIS_X = 0,
  50. AXIS_Y,
  51. AXIS_Z,
  52. };
  53. static struct iio_mount_matrix *
  54. af8133j_get_mount_matrix(struct iio_dev *indio_dev,
  55. const struct iio_chan_spec *chan)
  56. {
  57. struct af8133j_data *data = iio_priv(indio_dev);
  58. return &data->orientation;
  59. }
  60. static const struct iio_chan_spec_ext_info af8133j_ext_info[] = {
  61. IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, af8133j_get_mount_matrix),
  62. { }
  63. };
  64. #define AF8133J_CHANNEL(_si, _axis) { \
  65. .type = IIO_MAGN, \
  66. .modified = 1, \
  67. .channel2 = IIO_MOD_ ## _axis, \
  68. .address = AXIS_ ## _axis, \
  69. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  70. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
  71. .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SCALE), \
  72. .ext_info = af8133j_ext_info, \
  73. .scan_index = _si, \
  74. .scan_type = { \
  75. .sign = 's', \
  76. .realbits = 16, \
  77. .storagebits = 16, \
  78. .endianness = IIO_LE, \
  79. }, \
  80. }
  81. static const struct iio_chan_spec af8133j_channels[] = {
  82. AF8133J_CHANNEL(0, X),
  83. AF8133J_CHANNEL(1, Y),
  84. AF8133J_CHANNEL(2, Z),
  85. IIO_CHAN_SOFT_TIMESTAMP(3),
  86. };
  87. static int af8133j_product_check(struct af8133j_data *data)
  88. {
  89. struct device *dev = &data->client->dev;
  90. unsigned int val;
  91. int ret;
  92. ret = regmap_read(data->regmap, AF8133J_REG_PCODE, &val);
  93. if (ret) {
  94. dev_err(dev, "Error reading product code (%d)\n", ret);
  95. return ret;
  96. }
  97. if (val != AF8133J_REG_PCODE_VAL) {
  98. dev_warn(dev, "Invalid product code (0x%02x)\n", val);
  99. return 0; /* Allow unknown ID so fallback compatibles work */
  100. }
  101. return 0;
  102. }
  103. static int af8133j_reset(struct af8133j_data *data)
  104. {
  105. struct device *dev = &data->client->dev;
  106. int ret;
  107. if (data->reset_gpiod) {
  108. /* If we have GPIO reset line, use it */
  109. gpiod_set_value_cansleep(data->reset_gpiod, 1);
  110. udelay(10);
  111. gpiod_set_value_cansleep(data->reset_gpiod, 0);
  112. } else {
  113. /* Otherwise use software reset */
  114. ret = regmap_write(data->regmap, AF8133J_REG_SWR,
  115. AF8133J_REG_SWR_PERFORM);
  116. if (ret) {
  117. dev_err(dev, "Failed to reset the chip\n");
  118. return ret;
  119. }
  120. }
  121. /* Wait for reset to finish */
  122. usleep_range(1000, 1100);
  123. /* Restore range setting */
  124. if (data->range == AF8133J_REG_RANGE_22G) {
  125. ret = regmap_write(data->regmap, AF8133J_REG_RANGE, data->range);
  126. if (ret)
  127. return ret;
  128. }
  129. return 0;
  130. }
  131. static void af8133j_power_down(struct af8133j_data *data)
  132. {
  133. gpiod_set_value_cansleep(data->reset_gpiod, 1);
  134. regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies);
  135. }
  136. static int af8133j_power_up(struct af8133j_data *data)
  137. {
  138. struct device *dev = &data->client->dev;
  139. int ret;
  140. ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies);
  141. if (ret) {
  142. dev_err(dev, "Could not enable regulators\n");
  143. return ret;
  144. }
  145. gpiod_set_value_cansleep(data->reset_gpiod, 0);
  146. /* Wait for power on reset */
  147. usleep_range(15000, 16000);
  148. ret = af8133j_reset(data);
  149. if (ret) {
  150. af8133j_power_down(data);
  151. return ret;
  152. }
  153. return 0;
  154. }
  155. static int af8133j_take_measurement(struct af8133j_data *data)
  156. {
  157. unsigned int val;
  158. int ret;
  159. ret = regmap_write(data->regmap,
  160. AF8133J_REG_STATE, AF8133J_REG_STATE_WORK);
  161. if (ret)
  162. return ret;
  163. /* The datasheet says "Mesaure Time <1.5ms" */
  164. ret = regmap_read_poll_timeout(data->regmap, AF8133J_REG_STATUS, val,
  165. val & AF8133J_REG_STATUS_ACQ,
  166. 500, 1500);
  167. if (ret)
  168. return ret;
  169. ret = regmap_write(data->regmap,
  170. AF8133J_REG_STATE, AF8133J_REG_STATE_STBY);
  171. if (ret)
  172. return ret;
  173. return 0;
  174. }
  175. static int af8133j_read_measurement(struct af8133j_data *data, __le16 buf[3])
  176. {
  177. struct device *dev = &data->client->dev;
  178. int ret;
  179. ret = pm_runtime_resume_and_get(dev);
  180. if (ret) {
  181. /*
  182. * Ignore EACCES because that happens when RPM is disabled
  183. * during system sleep, while userspace leave eg. hrtimer
  184. * trigger attached and IIO core keeps trying to do measurements.
  185. */
  186. if (ret != -EACCES)
  187. dev_err(dev, "Failed to power on (%d)\n", ret);
  188. return ret;
  189. }
  190. scoped_guard(mutex, &data->mutex) {
  191. ret = af8133j_take_measurement(data);
  192. if (ret)
  193. goto out_rpm_put;
  194. ret = regmap_bulk_read(data->regmap, AF8133J_REG_OUT,
  195. buf, sizeof(__le16) * 3);
  196. }
  197. out_rpm_put:
  198. pm_runtime_mark_last_busy(dev);
  199. pm_runtime_put_autosuspend(dev);
  200. return ret;
  201. }
  202. static const int af8133j_scales[][2] = {
  203. [0] = { 0, 366210 }, /* 12 gauss */
  204. [1] = { 0, 671386 }, /* 22 gauss */
  205. };
  206. static int af8133j_read_raw(struct iio_dev *indio_dev,
  207. struct iio_chan_spec const *chan, int *val,
  208. int *val2, long mask)
  209. {
  210. struct af8133j_data *data = iio_priv(indio_dev);
  211. __le16 buf[3];
  212. int ret;
  213. switch (mask) {
  214. case IIO_CHAN_INFO_RAW:
  215. ret = af8133j_read_measurement(data, buf);
  216. if (ret)
  217. return ret;
  218. *val = sign_extend32(le16_to_cpu(buf[chan->address]),
  219. chan->scan_type.realbits - 1);
  220. return IIO_VAL_INT;
  221. case IIO_CHAN_INFO_SCALE:
  222. *val = 0;
  223. if (data->range == AF8133J_REG_RANGE_12G)
  224. *val2 = af8133j_scales[0][1];
  225. else
  226. *val2 = af8133j_scales[1][1];
  227. return IIO_VAL_INT_PLUS_NANO;
  228. default:
  229. return -EINVAL;
  230. }
  231. }
  232. static int af8133j_read_avail(struct iio_dev *indio_dev,
  233. struct iio_chan_spec const *chan,
  234. const int **vals, int *type, int *length,
  235. long mask)
  236. {
  237. switch (mask) {
  238. case IIO_CHAN_INFO_SCALE:
  239. *vals = (const int *)af8133j_scales;
  240. *length = ARRAY_SIZE(af8133j_scales) * 2;
  241. *type = IIO_VAL_INT_PLUS_NANO;
  242. return IIO_AVAIL_LIST;
  243. default:
  244. return -EINVAL;
  245. }
  246. }
  247. static int af8133j_set_scale(struct af8133j_data *data,
  248. unsigned int val, unsigned int val2)
  249. {
  250. struct device *dev = &data->client->dev;
  251. u8 range;
  252. int ret = 0;
  253. if (af8133j_scales[0][0] == val && af8133j_scales[0][1] == val2)
  254. range = AF8133J_REG_RANGE_12G;
  255. else if (af8133j_scales[1][0] == val && af8133j_scales[1][1] == val2)
  256. range = AF8133J_REG_RANGE_22G;
  257. else
  258. return -EINVAL;
  259. pm_runtime_disable(dev);
  260. /*
  261. * When suspended, just store the new range to data->range to be
  262. * applied later during power up.
  263. */
  264. if (!pm_runtime_status_suspended(dev)) {
  265. scoped_guard(mutex, &data->mutex)
  266. ret = regmap_write(data->regmap,
  267. AF8133J_REG_RANGE, range);
  268. }
  269. pm_runtime_enable(dev);
  270. data->range = range;
  271. return ret;
  272. }
  273. static int af8133j_write_raw(struct iio_dev *indio_dev,
  274. struct iio_chan_spec const *chan,
  275. int val, int val2, long mask)
  276. {
  277. struct af8133j_data *data = iio_priv(indio_dev);
  278. switch (mask) {
  279. case IIO_CHAN_INFO_SCALE:
  280. return af8133j_set_scale(data, val, val2);
  281. default:
  282. return -EINVAL;
  283. }
  284. }
  285. static int af8133j_write_raw_get_fmt(struct iio_dev *indio_dev,
  286. struct iio_chan_spec const *chan,
  287. long mask)
  288. {
  289. return IIO_VAL_INT_PLUS_NANO;
  290. }
  291. static const struct iio_info af8133j_info = {
  292. .read_raw = af8133j_read_raw,
  293. .read_avail = af8133j_read_avail,
  294. .write_raw = af8133j_write_raw,
  295. .write_raw_get_fmt = af8133j_write_raw_get_fmt,
  296. };
  297. static irqreturn_t af8133j_trigger_handler(int irq, void *p)
  298. {
  299. struct iio_poll_func *pf = p;
  300. struct iio_dev *indio_dev = pf->indio_dev;
  301. struct af8133j_data *data = iio_priv(indio_dev);
  302. s64 timestamp = iio_get_time_ns(indio_dev);
  303. struct {
  304. __le16 values[3];
  305. s64 timestamp __aligned(8);
  306. } sample;
  307. int ret;
  308. memset(&sample, 0, sizeof(sample));
  309. ret = af8133j_read_measurement(data, sample.values);
  310. if (ret)
  311. goto out_done;
  312. iio_push_to_buffers_with_timestamp(indio_dev, &sample, timestamp);
  313. out_done:
  314. iio_trigger_notify_done(indio_dev->trig);
  315. return IRQ_HANDLED;
  316. }
  317. static const struct regmap_config af8133j_regmap_config = {
  318. .name = "af8133j_regmap",
  319. .reg_bits = 8,
  320. .val_bits = 8,
  321. .max_register = AF8133J_REG_SWR,
  322. .cache_type = REGCACHE_NONE,
  323. };
  324. static void af8133j_power_down_action(void *ptr)
  325. {
  326. struct af8133j_data *data = ptr;
  327. if (!pm_runtime_status_suspended(&data->client->dev))
  328. af8133j_power_down(data);
  329. }
  330. static int af8133j_probe(struct i2c_client *client)
  331. {
  332. struct device *dev = &client->dev;
  333. struct af8133j_data *data;
  334. struct iio_dev *indio_dev;
  335. struct regmap *regmap;
  336. int ret, i;
  337. indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
  338. if (!indio_dev)
  339. return -ENOMEM;
  340. regmap = devm_regmap_init_i2c(client, &af8133j_regmap_config);
  341. if (IS_ERR(regmap))
  342. return dev_err_probe(dev, PTR_ERR(regmap),
  343. "regmap initialization failed\n");
  344. data = iio_priv(indio_dev);
  345. i2c_set_clientdata(client, indio_dev);
  346. data->client = client;
  347. data->regmap = regmap;
  348. data->range = AF8133J_REG_RANGE_12G;
  349. mutex_init(&data->mutex);
  350. data->reset_gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
  351. if (IS_ERR(data->reset_gpiod))
  352. return dev_err_probe(dev, PTR_ERR(data->reset_gpiod),
  353. "Failed to get reset gpio\n");
  354. for (i = 0; i < ARRAY_SIZE(af8133j_supply_names); i++)
  355. data->supplies[i].supply = af8133j_supply_names[i];
  356. ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->supplies),
  357. data->supplies);
  358. if (ret)
  359. return ret;
  360. ret = iio_read_mount_matrix(dev, &data->orientation);
  361. if (ret)
  362. return dev_err_probe(dev, ret, "Failed to read mount matrix\n");
  363. ret = af8133j_power_up(data);
  364. if (ret)
  365. return ret;
  366. pm_runtime_set_active(dev);
  367. ret = devm_add_action_or_reset(dev, af8133j_power_down_action, data);
  368. if (ret)
  369. return ret;
  370. ret = af8133j_product_check(data);
  371. if (ret)
  372. return ret;
  373. pm_runtime_get_noresume(dev);
  374. pm_runtime_use_autosuspend(dev);
  375. pm_runtime_set_autosuspend_delay(dev, 500);
  376. ret = devm_pm_runtime_enable(dev);
  377. if (ret)
  378. return ret;
  379. pm_runtime_put_autosuspend(dev);
  380. indio_dev->info = &af8133j_info;
  381. indio_dev->name = "af8133j";
  382. indio_dev->channels = af8133j_channels;
  383. indio_dev->num_channels = ARRAY_SIZE(af8133j_channels);
  384. indio_dev->modes = INDIO_DIRECT_MODE;
  385. ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
  386. &af8133j_trigger_handler, NULL);
  387. if (ret)
  388. return dev_err_probe(&client->dev, ret,
  389. "Failed to setup iio triggered buffer\n");
  390. ret = devm_iio_device_register(dev, indio_dev);
  391. if (ret)
  392. return dev_err_probe(dev, ret, "Failed to register iio device");
  393. return 0;
  394. }
  395. static int af8133j_runtime_suspend(struct device *dev)
  396. {
  397. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  398. struct af8133j_data *data = iio_priv(indio_dev);
  399. af8133j_power_down(data);
  400. return 0;
  401. }
  402. static int af8133j_runtime_resume(struct device *dev)
  403. {
  404. struct iio_dev *indio_dev = dev_get_drvdata(dev);
  405. struct af8133j_data *data = iio_priv(indio_dev);
  406. return af8133j_power_up(data);
  407. }
  408. static const struct dev_pm_ops af8133j_pm_ops = {
  409. SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
  410. RUNTIME_PM_OPS(af8133j_runtime_suspend, af8133j_runtime_resume, NULL)
  411. };
  412. static const struct of_device_id af8133j_of_match[] = {
  413. { .compatible = "voltafield,af8133j", },
  414. { }
  415. };
  416. MODULE_DEVICE_TABLE(of, af8133j_of_match);
  417. static const struct i2c_device_id af8133j_id[] = {
  418. { "af8133j" },
  419. { }
  420. };
  421. MODULE_DEVICE_TABLE(i2c, af8133j_id);
  422. static struct i2c_driver af8133j_driver = {
  423. .driver = {
  424. .name = "af8133j",
  425. .of_match_table = af8133j_of_match,
  426. .pm = pm_ptr(&af8133j_pm_ops),
  427. },
  428. .probe = af8133j_probe,
  429. .id_table = af8133j_id,
  430. };
  431. module_i2c_driver(af8133j_driver);
  432. MODULE_AUTHOR("Icenowy Zheng <icenowy@aosc.io>");
  433. MODULE_AUTHOR("Ondřej Jirman <megi@xff.cz>");
  434. MODULE_DESCRIPTION("Voltafield AF8133J magnetic sensor driver");
  435. MODULE_LICENSE("GPL");