1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * ADXL313 3-Axis Digital Accelerometer
5 * Copyright (c) 2021 Lucas Stankus <lucas.p.stankus@gmail.com>
11 #include <linux/iio/iio.h>
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_ACT_INACT_CTL 0x27
22 #define ADXL313_REG_BW_RATE 0x2C
23 #define ADXL313_REG_POWER_CTL 0x2D
24 #define ADXL313_REG_INT_MAP 0x2F
25 #define ADXL313_REG_DATA_FORMAT 0x31
26 #define ADXL313_REG_DATA_AXIS(index) (0x32 + ((index) * 2))
27 #define ADXL313_REG_FIFO_CTL 0x38
28 #define ADXL313_REG_FIFO_STATUS 0x39
30 #define ADXL313_DEVID0 0xAD
31 #define ADXL313_DEVID0_ADXL312_314 0xE5
32 #define ADXL313_DEVID1 0x1D
33 #define ADXL313_PARTID 0xCB
34 #define ADXL313_SOFT_RESET 0x52
36 #define ADXL313_RATE_MSK GENMASK(3, 0)
37 #define ADXL313_RATE_BASE 6
39 #define ADXL313_POWER_CTL_MSK GENMASK(3, 2)
40 #define ADXL313_MEASUREMENT_MODE BIT(3)
42 #define ADXL313_RANGE_MSK GENMASK(1, 0)
43 #define ADXL313_RANGE_MAX 3
45 #define ADXL313_FULL_RES BIT(3)
46 #define ADXL313_SPI_3WIRE BIT(6)
47 #define ADXL313_I2C_DISABLE BIT(6)
49 extern const struct regmap_access_table adxl312_readable_regs_table
;
50 extern const struct regmap_access_table adxl313_readable_regs_table
;
51 extern const struct regmap_access_table adxl314_readable_regs_table
;
53 extern const struct regmap_access_table adxl312_writable_regs_table
;
54 extern const struct regmap_access_table adxl313_writable_regs_table
;
55 extern const struct regmap_access_table adxl314_writable_regs_table
;
57 enum adxl313_device_type
{
64 struct regmap
*regmap
;
65 const struct adxl313_chip_info
*chip_info
;
66 struct mutex lock
; /* lock to protect transf_buf */
67 __le16 transf_buf
__aligned(IIO_DMA_MINALIGN
);
70 struct adxl313_chip_info
{
72 enum adxl313_device_type type
;
76 int (*check_id
)(struct device
*dev
, struct adxl313_data
*data
);
79 extern const struct adxl313_chip_info adxl31x_chip_info
[];
81 int adxl313_core_probe(struct device
*dev
,
82 struct regmap
*regmap
,
83 const struct adxl313_chip_info
*chip_info
,
84 int (*setup
)(struct device
*, struct regmap
*));
85 #endif /* _ADXL313_H_ */