st_magn_buffer.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * STMicroelectronics magnetometers driver
  4. *
  5. * Copyright 2012-2013 STMicroelectronics Inc.
  6. *
  7. * Denis Ciocca <[email protected]>
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/iio/iio.h>
  11. #include <linux/iio/buffer.h>
  12. #include <linux/iio/trigger.h>
  13. #include <linux/iio/triggered_buffer.h>
  14. #include <linux/iio/common/st_sensors.h>
  15. #include "st_magn.h"
  16. int st_magn_trig_set_state(struct iio_trigger *trig, bool state)
  17. {
  18. struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
  19. return st_sensors_set_dataready_irq(indio_dev, state);
  20. }
  21. static int st_magn_buffer_postenable(struct iio_dev *indio_dev)
  22. {
  23. return st_sensors_set_enable(indio_dev, true);
  24. }
  25. static int st_magn_buffer_predisable(struct iio_dev *indio_dev)
  26. {
  27. return st_sensors_set_enable(indio_dev, false);
  28. }
  29. static const struct iio_buffer_setup_ops st_magn_buffer_setup_ops = {
  30. .postenable = &st_magn_buffer_postenable,
  31. .predisable = &st_magn_buffer_predisable,
  32. };
  33. int st_magn_allocate_ring(struct iio_dev *indio_dev)
  34. {
  35. return devm_iio_triggered_buffer_setup(indio_dev->dev.parent, indio_dev,
  36. NULL, &st_sensors_trigger_handler, &st_magn_buffer_setup_ops);
  37. }