75
75
#define T_CONVERT_NS 190 /* conversion time */
76
76
#define T_CONVERT_0_NS 10 /* 1st conversion start time (oversampling) */
77
77
#define T_CONVERT_X_NS 500 /* xth conversion start time (oversampling) */
78
+ #define T_POWERUP_US 5000 /* Power up */
78
79
79
80
struct ad7380_timing_specs {
80
81
const unsigned int t_csh_ns ; /* CS minimum high time */
@@ -86,6 +87,8 @@ struct ad7380_chip_info {
86
87
unsigned int num_channels ;
87
88
unsigned int num_simult_channels ;
88
89
bool has_mux ;
90
+ const char * const * supplies ;
91
+ unsigned int num_supplies ;
89
92
const char * const * vcm_supplies ;
90
93
unsigned int num_vcm_supplies ;
91
94
const unsigned long * available_scan_masks ;
@@ -243,6 +246,10 @@ DEFINE_AD7380_8_CHANNEL(ad7386_4_channels, 16, 0, u);
243
246
DEFINE_AD7380_8_CHANNEL (ad7387_4_channels , 14 , 0 , u );
244
247
DEFINE_AD7380_8_CHANNEL (ad7388_4_channels , 12 , 0 , u );
245
248
249
+ static const char * const ad7380_supplies [] = {
250
+ "vcc" , "vlogic" ,
251
+ };
252
+
246
253
static const char * const ad7380_2_channel_vcm_supplies [] = {
247
254
"aina" , "ainb" ,
248
255
};
@@ -338,6 +345,8 @@ static const struct ad7380_chip_info ad7380_chip_info = {
338
345
.channels = ad7380_channels ,
339
346
.num_channels = ARRAY_SIZE (ad7380_channels ),
340
347
.num_simult_channels = 2 ,
348
+ .supplies = ad7380_supplies ,
349
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
341
350
.available_scan_masks = ad7380_2_channel_scan_masks ,
342
351
.timing_specs = & ad7380_timing ,
343
352
};
@@ -347,6 +356,8 @@ static const struct ad7380_chip_info ad7381_chip_info = {
347
356
.channels = ad7381_channels ,
348
357
.num_channels = ARRAY_SIZE (ad7381_channels ),
349
358
.num_simult_channels = 2 ,
359
+ .supplies = ad7380_supplies ,
360
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
350
361
.available_scan_masks = ad7380_2_channel_scan_masks ,
351
362
.timing_specs = & ad7380_timing ,
352
363
};
@@ -356,6 +367,8 @@ static const struct ad7380_chip_info ad7383_chip_info = {
356
367
.channels = ad7383_channels ,
357
368
.num_channels = ARRAY_SIZE (ad7383_channels ),
358
369
.num_simult_channels = 2 ,
370
+ .supplies = ad7380_supplies ,
371
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
359
372
.vcm_supplies = ad7380_2_channel_vcm_supplies ,
360
373
.num_vcm_supplies = ARRAY_SIZE (ad7380_2_channel_vcm_supplies ),
361
374
.available_scan_masks = ad7380_2_channel_scan_masks ,
@@ -367,6 +380,8 @@ static const struct ad7380_chip_info ad7384_chip_info = {
367
380
.channels = ad7384_channels ,
368
381
.num_channels = ARRAY_SIZE (ad7384_channels ),
369
382
.num_simult_channels = 2 ,
383
+ .supplies = ad7380_supplies ,
384
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
370
385
.vcm_supplies = ad7380_2_channel_vcm_supplies ,
371
386
.num_vcm_supplies = ARRAY_SIZE (ad7380_2_channel_vcm_supplies ),
372
387
.available_scan_masks = ad7380_2_channel_scan_masks ,
@@ -378,6 +393,8 @@ static const struct ad7380_chip_info ad7386_chip_info = {
378
393
.channels = ad7386_channels ,
379
394
.num_channels = ARRAY_SIZE (ad7386_channels ),
380
395
.num_simult_channels = 2 ,
396
+ .supplies = ad7380_supplies ,
397
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
381
398
.has_mux = true,
382
399
.available_scan_masks = ad7380_2x2_channel_scan_masks ,
383
400
.timing_specs = & ad7380_timing ,
@@ -388,6 +405,8 @@ static const struct ad7380_chip_info ad7387_chip_info = {
388
405
.channels = ad7387_channels ,
389
406
.num_channels = ARRAY_SIZE (ad7387_channels ),
390
407
.num_simult_channels = 2 ,
408
+ .supplies = ad7380_supplies ,
409
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
391
410
.has_mux = true,
392
411
.available_scan_masks = ad7380_2x2_channel_scan_masks ,
393
412
.timing_specs = & ad7380_timing ,
@@ -398,6 +417,8 @@ static const struct ad7380_chip_info ad7388_chip_info = {
398
417
.channels = ad7388_channels ,
399
418
.num_channels = ARRAY_SIZE (ad7388_channels ),
400
419
.num_simult_channels = 2 ,
420
+ .supplies = ad7380_supplies ,
421
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
401
422
.has_mux = true,
402
423
.available_scan_masks = ad7380_2x2_channel_scan_masks ,
403
424
.timing_specs = & ad7380_timing ,
@@ -408,6 +429,8 @@ static const struct ad7380_chip_info ad7380_4_chip_info = {
408
429
.channels = ad7380_4_channels ,
409
430
.num_channels = ARRAY_SIZE (ad7380_4_channels ),
410
431
.num_simult_channels = 4 ,
432
+ .supplies = ad7380_supplies ,
433
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
411
434
.available_scan_masks = ad7380_4_channel_scan_masks ,
412
435
.timing_specs = & ad7380_4_timing ,
413
436
};
@@ -417,6 +440,8 @@ static const struct ad7380_chip_info ad7381_4_chip_info = {
417
440
.channels = ad7381_4_channels ,
418
441
.num_channels = ARRAY_SIZE (ad7381_4_channels ),
419
442
.num_simult_channels = 4 ,
443
+ .supplies = ad7380_supplies ,
444
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
420
445
.available_scan_masks = ad7380_4_channel_scan_masks ,
421
446
.timing_specs = & ad7380_4_timing ,
422
447
};
@@ -426,6 +451,8 @@ static const struct ad7380_chip_info ad7383_4_chip_info = {
426
451
.channels = ad7383_4_channels ,
427
452
.num_channels = ARRAY_SIZE (ad7383_4_channels ),
428
453
.num_simult_channels = 4 ,
454
+ .supplies = ad7380_supplies ,
455
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
429
456
.vcm_supplies = ad7380_4_channel_vcm_supplies ,
430
457
.num_vcm_supplies = ARRAY_SIZE (ad7380_4_channel_vcm_supplies ),
431
458
.available_scan_masks = ad7380_4_channel_scan_masks ,
@@ -437,6 +464,8 @@ static const struct ad7380_chip_info ad7384_4_chip_info = {
437
464
.channels = ad7384_4_channels ,
438
465
.num_channels = ARRAY_SIZE (ad7384_4_channels ),
439
466
.num_simult_channels = 4 ,
467
+ .supplies = ad7380_supplies ,
468
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
440
469
.vcm_supplies = ad7380_4_channel_vcm_supplies ,
441
470
.num_vcm_supplies = ARRAY_SIZE (ad7380_4_channel_vcm_supplies ),
442
471
.available_scan_masks = ad7380_4_channel_scan_masks ,
@@ -448,6 +477,8 @@ static const struct ad7380_chip_info ad7386_4_chip_info = {
448
477
.channels = ad7386_4_channels ,
449
478
.num_channels = ARRAY_SIZE (ad7386_4_channels ),
450
479
.num_simult_channels = 4 ,
480
+ .supplies = ad7380_supplies ,
481
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
451
482
.has_mux = true,
452
483
.available_scan_masks = ad7380_2x4_channel_scan_masks ,
453
484
.timing_specs = & ad7380_4_timing ,
@@ -458,6 +489,8 @@ static const struct ad7380_chip_info ad7387_4_chip_info = {
458
489
.channels = ad7387_4_channels ,
459
490
.num_channels = ARRAY_SIZE (ad7387_4_channels ),
460
491
.num_simult_channels = 4 ,
492
+ .supplies = ad7380_supplies ,
493
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
461
494
.has_mux = true,
462
495
.available_scan_masks = ad7380_2x4_channel_scan_masks ,
463
496
.timing_specs = & ad7380_4_timing ,
@@ -468,6 +501,8 @@ static const struct ad7380_chip_info ad7388_4_chip_info = {
468
501
.channels = ad7388_4_channels ,
469
502
.num_channels = ARRAY_SIZE (ad7388_4_channels ),
470
503
.num_simult_channels = 4 ,
504
+ .supplies = ad7380_supplies ,
505
+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
471
506
.has_mux = true,
472
507
.available_scan_masks = ad7380_2x4_channel_scan_masks ,
473
508
.timing_specs = & ad7380_4_timing ,
@@ -1004,6 +1039,14 @@ static int ad7380_probe(struct spi_device *spi)
1004
1039
if (!st -> chip_info )
1005
1040
return dev_err_probe (& spi -> dev , - EINVAL , "missing match data\n" );
1006
1041
1042
+ ret = devm_regulator_bulk_get_enable (& spi -> dev , st -> chip_info -> num_supplies ,
1043
+ st -> chip_info -> supplies );
1044
+
1045
+ if (ret )
1046
+ return dev_err_probe (& spi -> dev , ret ,
1047
+ "Failed to enable power supplies\n" );
1048
+ fsleep (T_POWERUP_US );
1049
+
1007
1050
/*
1008
1051
* If there is no REFIO supply, then it means that we are using
1009
1052
* the internal 2.5V reference, otherwise REFIO is reference voltage.
0 commit comments