x86/boot/64: Move 5-level paging global variable assignments back
[sfrench/cifs-2.6.git] / include / linux / iio / adc / adi-axi-adc.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Analog Devices Generic AXI ADC IP core driver/library
4  * Link: https://wiki.analog.com/resources/fpga/docs/axi_adc_ip
5  *
6  * Copyright 2012-2020 Analog Devices Inc.
7  */
8 #ifndef __ADI_AXI_ADC_H__
9 #define __ADI_AXI_ADC_H__
10
11 struct device;
12 struct iio_chan_spec;
13
14 /**
15  * struct adi_axi_adc_chip_info - Chip specific information
16  * @name                Chip name
17  * @id                  Chip ID (usually product ID)
18  * @channels            Channel specifications of type @struct iio_chan_spec
19  * @num_channels        Number of @channels
20  * @scale_table         Supported scales by the chip; tuples of 2 ints
21  * @num_scales          Number of scales in the table
22  * @max_rate            Maximum sampling rate supported by the device
23  */
24 struct adi_axi_adc_chip_info {
25         const char                      *name;
26         unsigned int                    id;
27
28         const struct iio_chan_spec      *channels;
29         unsigned int                    num_channels;
30
31         const unsigned int              (*scale_table)[2];
32         int                             num_scales;
33
34         unsigned long                   max_rate;
35 };
36
37 /**
38  * struct adi_axi_adc_conv - data of the ADC attached to the AXI ADC
39  * @chip_info           chip info details for the client ADC
40  * @preenable_setup     op to run in the client before enabling the AXI ADC
41  * @reg_access          IIO debugfs_reg_access hook for the client ADC
42  * @read_raw            IIO read_raw hook for the client ADC
43  * @write_raw           IIO write_raw hook for the client ADC
44  * @read_avail          IIO read_avail hook for the client ADC
45  */
46 struct adi_axi_adc_conv {
47         const struct adi_axi_adc_chip_info              *chip_info;
48
49         int (*preenable_setup)(struct adi_axi_adc_conv *conv);
50         int (*reg_access)(struct adi_axi_adc_conv *conv, unsigned int reg,
51                           unsigned int writeval, unsigned int *readval);
52         int (*read_raw)(struct adi_axi_adc_conv *conv,
53                         struct iio_chan_spec const *chan,
54                         int *val, int *val2, long mask);
55         int (*write_raw)(struct adi_axi_adc_conv *conv,
56                          struct iio_chan_spec const *chan,
57                          int val, int val2, long mask);
58         int (*read_avail)(struct adi_axi_adc_conv *conv,
59                           struct iio_chan_spec const *chan,
60                           const int **val, int *type, int *length, long mask);
61 };
62
63 struct adi_axi_adc_conv *devm_adi_axi_adc_conv_register(struct device *dev,
64                                                         size_t sizeof_priv);
65
66 void *adi_axi_adc_conv_priv(struct adi_axi_adc_conv *conv);
67
68 #endif