14
14
#include <linux/spi/spi.h>
15
15
#include <linux/iio/iio.h>
16
16
#include <linux/of.h>
17
+ #include <linux/regulator/consumer.h>
17
18
18
19
/* MAX14001 registers definition */
19
20
#define MAX14001_REG_ADC 0x00
75
76
#define MAX14001_REG_WEN_WRITE_ENABLE 0x294
76
77
#define MAX14001_REG_WEN_WRITE_DISABLE 0x0
77
78
79
+ /* MAX14001 10-bit ADC */
80
+ #define MAX14001_NUMBER_OF_DATA_BITS 10
81
+ #define MAX14001_BIT_DIV (1 << 10)
82
+
78
83
enum max14001_chip_model {
79
84
max14001 ,
80
85
max14002 ,
@@ -97,9 +102,51 @@ static struct max14001_chip_info max14001_chip_info_tbl[] = {
97
102
struct max14001_state {
98
103
struct spi_device * spi ;
99
104
const struct max14001_chip_info * chip_info ;
105
+ int vref_mV ;
100
106
};
101
107
102
- static int max14001_spi_read (struct max14001_state * st , u16 reg , u16 * val )
108
+ static int max14001_get_scale (struct max14001_state * st )
109
+ {
110
+ int scale ;
111
+
112
+ /* scale = range / 2^10 */
113
+ scale = st -> vref_mV / MAX14001_BIT_DIV ;
114
+ return scale ;
115
+ }
116
+ static int max14001_get_vref_mV (struct max14001_state * st )
117
+ {
118
+ struct device * dev = & st -> spi -> dev ;
119
+ int ret = 0 ;
120
+
121
+ ret = devm_regulator_get_enable_read_voltage (dev , "vrefin" );
122
+ if (ret < 0 ){
123
+ st -> vref_mV = 1250000 / 1000 ;
124
+ dev_info (& st -> spi -> dev , "%s: vrefin not found. vref_mV %d\n" , __func__ , st -> vref_mV );
125
+ } else {
126
+ st -> vref_mV = ret / 1000 ;
127
+ dev_info (& st -> spi -> dev , "%s: vrefin found. vref_mV %d\n" , __func__ , st -> vref_mV );
128
+ }
129
+
130
+ return ret ;
131
+ }
132
+
133
+ static int max14001_init_required_regulators (struct max14001_state * st )
134
+ {
135
+ struct device * dev = & st -> spi -> dev ;
136
+ int ret = 0 ;
137
+
138
+ ret = devm_regulator_get_enable (dev , "vdd" );
139
+ if (ret )
140
+ return dev_err_probe (dev , ret , "Failed to enable specified Vdd supply\n" );
141
+
142
+ ret = devm_regulator_get_enable (dev , "vddl" );
143
+ if (ret )
144
+ return dev_err_probe (dev , ret , "Failed to enable specified Vddl supply\n" );
145
+
146
+ return ret ;
147
+ }
148
+
149
+ static int max14001_spi_read (struct max14001_state * st , u16 reg , int * val )
103
150
{
104
151
u16 tx , rx , reversed ;
105
152
int ret ;
@@ -116,7 +163,7 @@ static int max14001_spi_read(struct max14001_state *st, u16 reg, u16 *val)
116
163
117
164
/* TODO: Validate this line in the hw, could be le16_to_cpu */
118
165
reversed = bitrev16 (be16_to_cpu (rx ));
119
- * val = FIELD_GET (MAX14001_MASK_ADDR , reversed );
166
+ * val = FIELD_GET (MAX14001_MASK_DATA , reversed );
120
167
121
168
return ret ;
122
169
}
@@ -154,17 +201,17 @@ static int max14001_spi_write_single_reg(struct max14001_state *st, u16 reg, u16
154
201
{
155
202
int ret ;
156
203
157
- // Enable register write
204
+ /* Enable register write */
158
205
ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_ENABLE );
159
206
if (ret < 0 )
160
207
return ret ;
161
208
162
- // Write data into register
209
+ /* Write data into register */
163
210
ret = max14001_spi_write (st , reg , val );
164
211
if (ret < 0 )
165
212
return ret ;
166
213
167
- // Disable register write
214
+ /* Disable register write */
168
215
ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_DISABLE );
169
216
if (ret < 0 )
170
217
return ret ;
@@ -177,14 +224,30 @@ static int max14001_read_raw(struct iio_dev *indio_dev,
177
224
int * val , int * val2 , long mask )
178
225
{
179
226
struct max14001_state * st = iio_priv (indio_dev );
227
+ int ret ;
180
228
181
229
switch (mask ) {
182
230
case IIO_CHAN_INFO_RAW :
183
- dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_RAW\n" , __func__ );
231
+ ret = max14001_spi_read (st , MAX14001_REG_ADC , val );
232
+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_RAW: channel: %d, val: %d\n" , __func__ , chan -> channel , val );
233
+ if (ret < 0 )
234
+ return ret ;
235
+
184
236
return IIO_VAL_INT ;
185
- case IIO_CHAN_INFO_SCALE :
186
- dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_SCALE\n" , __func__ );
237
+ case IIO_CHAN_INFO_AVERAGE_RAW :
238
+ ret = max14001_spi_read (st , MAX14001_REG_FADC , val );
239
+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_AVERAGE_RAW: channel: %d, val: %d\n" , __func__ , chan -> channel , val );
240
+ if (ret < 0 )
241
+ return ret ;
242
+
187
243
return IIO_VAL_INT ;
244
+ case IIO_CHAN_INFO_SCALE :
245
+ ret = max14001_get_scale (st );
246
+ * val = ret ;
247
+ * val2 = MAX14001_NUMBER_OF_DATA_BITS ;
248
+ dev_info (& st -> spi -> dev , "%s: IIO_CHAN_INFO_SCALE: val: %d, val2: %d\n" , __func__ , val , val2 );
249
+
250
+ return IIO_VAL_FRACTIONAL_LOG2 ;
188
251
}
189
252
190
253
return - EINVAL ;
@@ -254,8 +317,6 @@ static int max14001_probe(struct spi_device *spi)
254
317
indio_dev -> modes = INDIO_DIRECT_MODE ;
255
318
indio_dev -> info = & max14001_info ;
256
319
257
- dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
258
-
259
320
for_each_available_child_of_node_scoped (spi -> dev .of_node , child ) {
260
321
current_channel = of_property_read_bool (child , "current-channel" );
261
322
if (current_channel )
@@ -270,6 +331,11 @@ static int max14001_probe(struct spi_device *spi)
270
331
indio_dev -> num_channels = ARRAY_SIZE (max14001_channel_voltage );
271
332
}
272
333
334
+ dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
335
+
336
+ max14001_init_required_regulators (st );
337
+ max14001_get_vref_mV (st );
338
+
273
339
return devm_iio_device_register (& spi -> dev , indio_dev );
274
340
}
275
341
0 commit comments