File Index
Files and directories
Sign in
FILE

ad5446.h

File preview with syntax highlighting.

linux-6.19.14/drivers/iio/dac/ad5446.h C
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _LINUX_AD5446_H
 3#define _LINUX_AD5446_H
 4
 5#include <linux/bits.h>
 6#include <linux/compiler.h>
 7#include <linux/iio/iio.h>
 8#include <linux/mutex.h>
 9#include <linux/types.h>
10
11struct device;
12
13extern const struct iio_chan_spec_ext_info ad5446_ext_info_powerdown[];
14
15#define _AD5446_CHANNEL(bits, storage, _shift, ext) { \
16	.type = IIO_VOLTAGE, \
17	.indexed = 1, \
18	.output = 1, \
19	.channel = 0, \
20	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
21	.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
22	.scan_type = { \
23		.sign = 'u', \
24		.realbits = (bits), \
25		.storagebits = (storage), \
26		.shift = (_shift), \
27		}, \
28	.ext_info = (ext), \
29}
30
31#define AD5446_CHANNEL(bits, storage, shift) \
32	_AD5446_CHANNEL(bits, storage, shift, NULL)
33
34#define AD5446_CHANNEL_POWERDOWN(bits, storage, shift) \
35	_AD5446_CHANNEL(bits, storage, shift, ad5446_ext_info_powerdown)
36
37/**
38 * struct ad5446_state - driver instance specific data
39 * @dev:		this device
40 * @chip_info:		chip model specific constants, available modes etc
41 * @vref_mv:		actual reference voltage used
42 * @cached_val:		store/retrieve values during power down
43 * @pwr_down_mode:	power down mode (1k, 100k or tristate)
44 * @pwr_down:		true if the device is in power down
45 * @lock:		lock to protect the data buffer during write ops
46 */
47struct ad5446_state {
48	struct device *dev;
49	const struct ad5446_chip_info *chip_info;
50	unsigned short vref_mv;
51	unsigned int cached_val;
52	unsigned int pwr_down_mode;
53	unsigned int pwr_down;
54	/* mutex to protect device shared data */
55	struct mutex lock;
56	union {
57		__be16 d16;
58		u8 d24[3];
59	} __aligned(IIO_DMA_MINALIGN);
60};
61
62/**
63 * struct ad5446_chip_info - chip specific information
64 * @channel:		channel spec for the DAC
65 * @int_vref_mv:	AD5620/40/60: the internal reference voltage
66 * @write:		chip specific helper function to write to the register
67 */
68struct ad5446_chip_info {
69	struct iio_chan_spec channel;
70	u16 int_vref_mv;
71	int (*write)(struct ad5446_state *st, unsigned int val);
72};
73
74int ad5446_probe(struct device *dev, const char *name,
75		 const struct ad5446_chip_info *chip_info);
76
77#endif
~/ Read-only file preview.