86 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * ADXL313 3-Axis Digital Accelerometer4 *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 0x0015#define ADXL313_REG_DEVID1 0x0116#define ADXL313_REG_PARTID 0x0217#define ADXL313_REG_XID 0x0418#define ADXL313_REG_SOFT_RESET 0x1819#define ADXL313_REG_OFS_AXIS(index) (0x1E + (index))20#define ADXL313_REG_THRESH_ACT 0x2421#define ADXL313_REG_ACT_INACT_CTL 0x2722#define ADXL313_REG_BW_RATE 0x2C23#define ADXL313_REG_POWER_CTL 0x2D24#define ADXL313_REG_INT_MAP 0x2F25#define ADXL313_REG_DATA_FORMAT 0x3126#define ADXL313_REG_DATA_AXIS(index) (0x32 + ((index) * 2))27#define ADXL313_REG_FIFO_CTL 0x3828#define ADXL313_REG_FIFO_STATUS 0x3929 30#define ADXL313_DEVID0 0xAD31#define ADXL313_DEVID0_ADXL312_314 0xE532#define ADXL313_DEVID1 0x1D33#define ADXL313_PARTID 0xCB34#define ADXL313_SOFT_RESET 0x5235 36#define ADXL313_RATE_MSK GENMASK(3, 0)37#define ADXL313_RATE_BASE 638 39#define ADXL313_POWER_CTL_MSK GENMASK(3, 2)40#define ADXL313_MEASUREMENT_MODE BIT(3)41 42#define ADXL313_RANGE_MSK GENMASK(1, 0)43#define ADXL313_RANGE_MAX 344 45#define ADXL313_FULL_RES BIT(3)46#define ADXL313_SPI_3WIRE BIT(6)47#define ADXL313_I2C_DISABLE BIT(6)48 49extern const struct regmap_access_table adxl312_readable_regs_table;50extern const struct regmap_access_table adxl313_readable_regs_table;51extern const struct regmap_access_table adxl314_readable_regs_table;52 53extern const struct regmap_access_table adxl312_writable_regs_table;54extern const struct regmap_access_table adxl313_writable_regs_table;55extern const struct regmap_access_table adxl314_writable_regs_table;56 57enum adxl313_device_type {58 ADXL312,59 ADXL313,60 ADXL314,61};62 63struct adxl313_data {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);68};69 70struct adxl313_chip_info {71 const char *name;72 enum adxl313_device_type type;73 int scale_factor;74 bool variable_range;75 bool soft_reset;76 int (*check_id)(struct device *dev, struct adxl313_data *data);77};78 79extern const struct adxl313_chip_info adxl31x_chip_info[];80 81int 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_ */86