st_lis3dhh.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * STMicroelectronics st_lis3dhh sensor driver
  4. *
  5. * MEMS Software Solutions Team
  6. *
  7. * Copyright 2016 STMicroelectronics Inc.
  8. */
  9. #ifndef ST_LIS3DHH_H
  10. #define ST_LIS3DHH_H
  11. #include <linux/iio/iio.h>
  12. #include "../common/stm_iio_types.h"
  13. #define ST_LIS3DHH_DATA_SIZE 6
  14. #define ST_LIS3DHH_RX_MAX_LENGTH 96
  15. #define ST_LIS3DHH_TX_MAX_LENGTH 8
  16. #define ST_LIS3DHH_ODR 1100
  17. struct st_lis3dhh_transfer_buffer {
  18. u8 rx_buf[ST_LIS3DHH_RX_MAX_LENGTH];
  19. u8 tx_buf[ST_LIS3DHH_TX_MAX_LENGTH] ____cacheline_aligned;
  20. };
  21. struct st_lis3dhh_hw {
  22. struct device *dev;
  23. const char *name;
  24. int irq;
  25. struct mutex fifo_lock;
  26. struct mutex lock;
  27. u8 watermark;
  28. s64 delta_ts;
  29. s64 ts_irq;
  30. s64 ts;
  31. struct iio_dev *iio_dev;
  32. struct st_lis3dhh_transfer_buffer tb;
  33. };
  34. int st_lis3dhh_write_with_mask(struct st_lis3dhh_hw *hw, u8 addr, u8 mask,
  35. u8 val);
  36. int st_lis3dhh_spi_read(struct st_lis3dhh_hw *hw, u8 addr, int len, u8 *data);
  37. int st_lis3dhh_set_enable(struct st_lis3dhh_hw *hw, bool enable);
  38. int st_lis3dhh_fifo_setup(struct st_lis3dhh_hw *hw);
  39. ssize_t st_lis3dhh_flush_hwfifo(struct device *device,
  40. struct device_attribute *attr,
  41. const char *buf, size_t size);
  42. ssize_t st_lis3dhh_get_max_hwfifo_watermark(struct device *dev,
  43. struct device_attribute *attr,
  44. char *buf);
  45. ssize_t st_lis3dhh_get_hwfifo_watermark(struct device *device,
  46. struct device_attribute *attr,
  47. char *buf);
  48. ssize_t st_lis3dhh_set_hwfifo_watermark(struct device *device,
  49. struct device_attribute *attr,
  50. const char *buf, size_t size);
  51. int st_lis3dhh_update_watermark(struct st_lis3dhh_hw *hw, u8 watermark);
  52. #endif /* ST_LIS3DHH_H */