File Index
Files and directories
Sign in
FILE

adxl313.h

File preview with syntax highlighting.

linux-6.19.14/drivers/iio/accel/adxl313.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * ADXL313 3-Axis Digital Accelerometer
  4 *
  5 * Copyright (c) 2021 Lucas Stankus <lucas.p.stankus@gmail.com>
  6 */
  7
  8#ifndef _ADXL313_H_
  9#define _ADXL313_H_
 10
 11#include <linux/iio/iio.h>
 12
 13/* ADXL313 register definitions */
 14#define ADXL313_REG_DEVID0		0x00
 15#define ADXL313_REG_DEVID1		0x01
 16#define ADXL313_REG_PARTID		0x02
 17#define ADXL313_REG_XID			0x04
 18#define ADXL313_REG_SOFT_RESET		0x18
 19#define ADXL313_REG_OFS_AXIS(index)	(0x1E + (index))
 20#define ADXL313_REG_THRESH_ACT		0x24
 21#define ADXL313_REG_THRESH_INACT	0x25
 22#define ADXL313_REG_TIME_INACT		0x26
 23#define ADXL313_REG_ACT_INACT_CTL	0x27
 24#define ADXL313_REG_BW_RATE		0x2C
 25#define ADXL313_REG_POWER_CTL		0x2D
 26#define ADXL313_REG_INT_ENABLE		0x2E
 27#define ADXL313_REG_INT_MAP		0x2F
 28#define ADXL313_REG_INT_SOURCE		0x30
 29#define ADXL313_REG_DATA_FORMAT		0x31
 30#define ADXL313_REG_DATA_AXIS(index)	(0x32 + ((index) * 2))
 31#define ADXL313_REG_FIFO_CTL		0x38
 32#define ADXL313_REG_FIFO_STATUS		0x39
 33
 34#define ADXL313_DEVID0			0xAD
 35#define ADXL313_DEVID0_ADXL312_314	0xE5
 36#define ADXL313_DEVID1			0x1D
 37#define ADXL313_PARTID			0xCB
 38#define ADXL313_SOFT_RESET		0x52
 39
 40#define ADXL313_RATE_MSK		GENMASK(3, 0)
 41#define ADXL313_RATE_BASE		6
 42
 43#define ADXL313_POWER_CTL_MSK		BIT(3)
 44#define ADXL313_POWER_CTL_INACT_MSK	GENMASK(5, 4)
 45#define ADXL313_POWER_CTL_LINK		BIT(5)
 46#define ADXL313_POWER_CTL_AUTO_SLEEP	BIT(4)
 47
 48#define ADXL313_RANGE_MSK		GENMASK(1, 0)
 49#define ADXL313_RANGE_MAX		3
 50
 51#define ADXL313_FULL_RES		BIT(3)
 52#define ADXL313_SPI_3WIRE		BIT(6)
 53#define ADXL313_I2C_DISABLE		BIT(6)
 54
 55#define ADXL313_INT_OVERRUN		BIT(0)
 56#define ADXL313_INT_WATERMARK		BIT(1)
 57#define ADXL313_INT_INACTIVITY		BIT(3)
 58#define ADXL313_INT_ACTIVITY		BIT(4)
 59#define ADXL313_INT_DREADY		BIT(7)
 60
 61/* FIFO entries: how many values are stored in the FIFO */
 62#define ADXL313_REG_FIFO_STATUS_ENTRIES_MSK	GENMASK(5, 0)
 63/* FIFO samples: number of samples needed for watermark (FIFO mode) */
 64#define ADXL313_REG_FIFO_CTL_SAMPLES_MSK	GENMASK(4, 0)
 65#define ADXL313_REG_FIFO_CTL_MODE_MSK		GENMASK(7, 6)
 66
 67#define ADXL313_FIFO_BYPASS			0
 68#define ADXL313_FIFO_STREAM			2
 69
 70#define ADXL313_FIFO_SIZE			32
 71
 72#define ADXL313_NUM_AXIS			3
 73
 74extern const struct regmap_access_table adxl312_readable_regs_table;
 75extern const struct regmap_access_table adxl313_readable_regs_table;
 76extern const struct regmap_access_table adxl314_readable_regs_table;
 77
 78extern const struct regmap_access_table adxl312_writable_regs_table;
 79extern const struct regmap_access_table adxl313_writable_regs_table;
 80extern const struct regmap_access_table adxl314_writable_regs_table;
 81
 82bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg);
 83
 84enum adxl313_device_type {
 85	ADXL312,
 86	ADXL313,
 87	ADXL314,
 88};
 89
 90struct adxl313_data {
 91	struct regmap	*regmap;
 92	const struct adxl313_chip_info *chip_info;
 93	struct mutex	lock; /* lock to protect transf_buf */
 94	u8 watermark;
 95	__le16		transf_buf __aligned(IIO_DMA_MINALIGN);
 96	__le16		fifo_buf[ADXL313_NUM_AXIS * ADXL313_FIFO_SIZE + 1];
 97};
 98
 99struct adxl313_chip_info {
100	const char			*name;
101	enum adxl313_device_type	type;
102	int				scale_factor;
103	bool				variable_range;
104	bool				soft_reset;
105	int (*check_id)(struct device *dev, struct adxl313_data *data);
106};
107
108extern const struct adxl313_chip_info adxl31x_chip_info[];
109
110int adxl313_core_probe(struct device *dev,
111		       struct regmap *regmap,
112		       const struct adxl313_chip_info *chip_info,
113		       int (*setup)(struct device *, struct regmap *));
114#endif /* _ADXL313_H_ */
~/ Read-only file preview.