brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · 72f624a Raw
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