1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright 2021 Google LLC.
5 * Code shared between most Semtech SAR sensor driver.
8 #ifndef IIO_SX_COMMON_H
9 #define IIO_SX_COMMON_H
11 #include <linux/iio/iio.h>
12 #include <linux/iio/types.h>
13 #include <linux/regulator/consumer.h>
14 #include <linux/types.h>
19 struct sx_common_data;
21 #define SX_COMMON_REG_IRQ_SRC 0x00
23 #define SX_COMMON_MAX_NUM_CHANNELS 4
24 static_assert(SX_COMMON_MAX_NUM_CHANNELS < BITS_PER_LONG);
26 struct sx_common_reg_default {
32 * struct sx_common_ops: function pointers needed by common code
34 * List functions needed by common code to gather information or configure
37 * @read_prox_data: Function to read raw proximity data.
38 * @check_whoami: Set device name based on whoami register.
39 * @init_compensation: Function to set initial compensation.
40 * @wait_for_sample: When there are no physical IRQ, function to wait for a
42 * @get_default_reg: Populate the initial value for a given register.
44 struct sx_common_ops {
45 int (*read_prox_data)(struct sx_common_data *data,
46 const struct iio_chan_spec *chan, __be16 *val);
47 int (*check_whoami)(struct device *dev, struct iio_dev *indio_dev);
48 int (*init_compensation)(struct iio_dev *indio_dev);
49 int (*wait_for_sample)(struct sx_common_data *data);
50 const struct sx_common_reg_default *
51 (*get_default_reg)(struct device *dev, int idx,
52 struct sx_common_reg_default *reg_def);
56 * struct sx_common_chip_info: Semtech Sensor private chip information
58 * @reg_stat: Main status register address.
59 * @reg_irq_msk: IRQ mask register address.
60 * @reg_enable_chan: Address to enable/disable channels.
61 * Each phase presented by the sensor is an IIO channel..
62 * @reg_reset: Reset register address.
63 * @mask_enable_chan: Mask over the channels bits in the enable channel
65 * @stat_offset: Offset to check phase status.
66 * @irq_msk_offset: Offset to enable interrupt in the IRQ mask
68 * @num_channels: Number of channels.
69 * @num_default_regs: Number of internal registers that can be configured.
71 * @ops: Private functions pointers.
72 * @iio_channels: Description of exposed iio channels.
73 * @num_iio_channels: Number of iio_channels.
74 * @iio_info: iio_info structure for this driver.
76 struct sx_common_chip_info {
77 unsigned int reg_stat;
78 unsigned int reg_irq_msk;
79 unsigned int reg_enable_chan;
80 unsigned int reg_reset;
82 unsigned int mask_enable_chan;
83 unsigned int stat_offset;
84 unsigned int irq_msk_offset;
85 unsigned int num_channels;
88 struct sx_common_ops ops;
90 const struct iio_chan_spec *iio_channels;
92 struct iio_info iio_info;
96 * struct sx_common_data: Semtech Sensor private data structure.
98 * @chip_info: Structure defining sensor internals.
99 * @mutex: Serialize access to registers and channel configuration.
100 * @completion: completion object to wait for data acquisition.
101 * @client: I2C client structure.
102 * @trig: IIO trigger object.
103 * @regmap: Register map.
104 * @num_default_regs: Number of default registers to set at init.
105 * @supplies: Power supplies object.
106 * @chan_prox_stat: Last reading of the proximity status for each channel.
107 * We only send an event to user space when this changes.
108 * @trigger_enabled: True when the device trigger is enabled.
109 * @buffer: Buffer to store raw samples.
110 * @suspend_ctrl: Remember enabled channels and sample rate during suspend.
111 * @chan_read: Bit field for each raw channel enabled.
112 * @chan_event: Bit field for each event enabled.
114 struct sx_common_data {
115 const struct sx_common_chip_info *chip_info;
118 struct completion completion;
119 struct i2c_client *client;
120 struct iio_trigger *trig;
121 struct regmap *regmap;
123 struct regulator_bulk_data supplies[2];
124 unsigned long chan_prox_stat;
125 bool trigger_enabled;
127 /* Ensure correct alignment of timestamp when present. */
129 __be16 channels[SX_COMMON_MAX_NUM_CHANNELS];
133 unsigned int suspend_ctrl;
134 unsigned long chan_read;
135 unsigned long chan_event;
138 int sx_common_read_proximity(struct sx_common_data *data,
139 const struct iio_chan_spec *chan, int *val);
141 int sx_common_read_event_config(struct iio_dev *indio_dev,
142 const struct iio_chan_spec *chan,
143 enum iio_event_type type,
144 enum iio_event_direction dir);
145 int sx_common_write_event_config(struct iio_dev *indio_dev,
146 const struct iio_chan_spec *chan,
147 enum iio_event_type type,
148 enum iio_event_direction dir, int state);
150 int sx_common_probe(struct i2c_client *client,
151 const struct sx_common_chip_info *chip_info,
152 const struct regmap_config *regmap_config);
154 /* 3 is the number of events defined by a single phase. */
155 extern const struct iio_event_spec sx_common_events[3];
157 #endif /* IIO_SX_COMMON_H */