@@ -101,42 +101,10 @@ struct max14001_state {
101
101
int vref_mv ;
102
102
};
103
103
104
- static int max14001_get_vref_mv (struct max14001_state * st )
105
- {
106
- struct device * dev = & st -> spi -> dev ;
107
- int ret = 0 ;
108
-
109
- ret = devm_regulator_get_enable_read_voltage (dev , "vrefin" );
110
- if (ret < 0 ){
111
- st -> vref_mv = 1250000 / 1000 ;
112
- dev_info (& st -> spi -> dev , "%s: vrefin not found. vref_mv %d\n" , __func__ , st -> vref_mv );
113
- } else {
114
- st -> vref_mv = ret / 1000 ;
115
- dev_info (& st -> spi -> dev , "%s: vrefin found. vref_mv %d\n" , __func__ , st -> vref_mv );
116
- }
117
-
118
- return ret ;
119
- }
120
-
121
- static int max14001_init_required_regulators (struct max14001_state * st )
122
- {
123
- struct device * dev = & st -> spi -> dev ;
124
- int ret = 0 ;
125
-
126
- ret = devm_regulator_get_enable (dev , "vdd" );
127
- if (ret )
128
- return dev_err_probe (dev , ret , "Failed to enable specified Vdd supply\n" );
129
-
130
- ret = devm_regulator_get_enable (dev , "vddl" );
131
- if (ret )
132
- return dev_err_probe (dev , ret , "Failed to enable specified Vddl supply\n" );
133
-
134
- return ret ;
135
- }
136
-
137
104
static int max14001_spi_read (struct max14001_state * st , u16 reg , int * val )
138
105
{
139
- u16 tx , rx , reversed ;
106
+ u16 rx , reversed ;
107
+ u16 tx = 0 ;
140
108
int ret ;
141
109
142
110
dev_info (& st -> spi -> dev , "%s: reg: %x, val: %x\n" , __func__ , reg , * val );
@@ -207,6 +175,43 @@ static int max14001_spi_write_single_reg(struct max14001_state *st, u16 reg, u16
207
175
return ret ;
208
176
}
209
177
178
+ static int max14001_set_verification_registers_values (struct max14001_state * st )
179
+ {
180
+ struct device * dev = & st -> spi -> dev ;
181
+ int i , val_read_reg , ret ;
182
+ u16 val_write_reg ;
183
+
184
+ /* Enable register write */
185
+ ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_ENABLE );
186
+ if (ret < 0 )
187
+ goto erro_condition ;
188
+
189
+ for (i = MAX14001_REG_FLTEN ; i <= MAX14001_REG_ENBL ; i ++ ) {
190
+ /* Read register value */
191
+ val_read_reg = 0 ;
192
+ ret = max14001_spi_read (st , i , & val_read_reg );
193
+ if (ret < 0 )
194
+ goto erro_condition ;
195
+
196
+ /* Write verification register value */
197
+ val_write_reg = (u16 )val_read_reg ;
198
+ ret = max14001_spi_write (st , MAX14001_REG_VERIFICATION (i ), val_write_reg );
199
+ if (ret < 0 )
200
+ goto erro_condition ;
201
+ }
202
+
203
+ /* Disable register write */
204
+ ret = max14001_spi_write (st , MAX14001_REG_WEN , MAX14001_REG_WEN_WRITE_DISABLE );
205
+ if (ret < 0 )
206
+ goto erro_condition ;
207
+
208
+ return ret ;
209
+
210
+ erro_condition :
211
+ return dev_err_probe (dev , ret , "Failed to set verification registers\n" );
212
+
213
+ }
214
+
210
215
static int max14001_read_raw (struct iio_dev * indio_dev ,
211
216
struct iio_chan_spec const * chan ,
212
217
int * val , int * val2 , long mask )
@@ -240,22 +245,8 @@ static int max14001_read_raw(struct iio_dev *indio_dev,
240
245
return - EINVAL ;
241
246
}
242
247
243
- /* TODO: Check if this method is nedeed */
244
- static int max14001_write_raw (struct iio_dev * indio_dev ,
245
- struct iio_chan_spec const * chan ,
246
- int val , int val2 , long mask )
247
- {
248
- struct max14001_state * st = iio_priv (indio_dev );
249
-
250
- switch (mask ) {
251
- }
252
-
253
- return - EINVAL ;
254
- }
255
-
256
248
static const struct iio_info max14001_info = {
257
249
.read_raw = max14001_read_raw ,
258
- .write_raw = max14001_write_raw ,
259
250
};
260
251
261
252
static const struct iio_chan_spec max14001_channel_voltage [] = {
@@ -305,6 +296,23 @@ static int max14001_probe(struct spi_device *spi)
305
296
indio_dev -> modes = INDIO_DIRECT_MODE ;
306
297
indio_dev -> info = & max14001_info ;
307
298
299
+ ret = devm_regulator_get_enable (dev , "vdd" );
300
+ if (ret )
301
+ return dev_err_probe (dev , ret , "Failed to enable specified Vdd supply\n" );
302
+
303
+ ret = devm_regulator_get_enable (dev , "vddl" );
304
+ if (ret )
305
+ return dev_err_probe (dev , ret , "Failed to enable specified Vddl supply\n" );
306
+
307
+ ret = devm_regulator_get_enable_read_voltage (dev , "vrefin-supply" );
308
+ if (ret < 0 ) {
309
+ st -> vref_mv = 1250000 / 1000 ;
310
+ dev_info (& st -> spi -> dev , "%s: vrefin not found. vref_mv %d\n" , __func__ , st -> vref_mv );
311
+ } else {
312
+ st -> vref_mv = ret / 1000 ;
313
+ dev_info (& st -> spi -> dev , "%s: vrefin found. vref_mv %d\n" , __func__ , st -> vref_mv );
314
+ }
315
+
308
316
for_each_available_child_of_node_scoped (spi -> dev .of_node , child ) {
309
317
current_channel = of_property_read_bool (child , "current-channel" );
310
318
if (current_channel )
@@ -321,8 +329,10 @@ static int max14001_probe(struct spi_device *spi)
321
329
322
330
dev_info (& st -> spi -> dev , "%s: probe\n" , __func__ );
323
331
324
- max14001_init_required_regulators (st );
325
- max14001_get_vref_mv (st );
332
+ /* Write the appropriate verification registers values to clear the
333
+ * failed memory validation (MV Fault)
334
+ */
335
+ max14001_set_verification_registers_values (st );
326
336
327
337
return devm_iio_device_register (& spi -> dev , indio_dev );
328
338
}
@@ -356,4 +366,3 @@ module_spi_driver(max14001_driver);
356
366
MODULE_AUTHOR (
"Marilene Andrade Garcia <[email protected] >" );
357
367
MODULE_DESCRIPTION ("Analog Devices MAX14001/MAX14002 ADCs driver" );
358
368
MODULE_LICENSE ("GPL v2" );
359
-
0 commit comments