7575#define T_CONVERT_NS 190 /* conversion time */
7676#define T_CONVERT_0_NS 10 /* 1st conversion start time (oversampling) */
7777#define T_CONVERT_X_NS 500 /* xth conversion start time (oversampling) */
78+ #define T_POWERUP_US 5000 /* Power up */
7879
7980struct ad7380_timing_specs {
8081 const unsigned int t_csh_ns ; /* CS minimum high time */
@@ -86,6 +87,8 @@ struct ad7380_chip_info {
8687 unsigned int num_channels ;
8788 unsigned int num_simult_channels ;
8889 bool has_mux ;
90+ const char * const * supplies ;
91+ unsigned int num_supplies ;
8992 const char * const * vcm_supplies ;
9093 unsigned int num_vcm_supplies ;
9194 const unsigned long * available_scan_masks ;
@@ -243,6 +246,10 @@ DEFINE_AD7380_8_CHANNEL(ad7386_4_channels, 16, 0, u);
243246DEFINE_AD7380_8_CHANNEL (ad7387_4_channels , 14 , 0 , u );
244247DEFINE_AD7380_8_CHANNEL (ad7388_4_channels , 12 , 0 , u );
245248
249+ static const char * const ad7380_supplies [] = {
250+ "vcc" , "vlogic" ,
251+ };
252+
246253static const char * const ad7380_2_channel_vcm_supplies [] = {
247254 "aina" , "ainb" ,
248255};
@@ -338,6 +345,8 @@ static const struct ad7380_chip_info ad7380_chip_info = {
338345 .channels = ad7380_channels ,
339346 .num_channels = ARRAY_SIZE (ad7380_channels ),
340347 .num_simult_channels = 2 ,
348+ .supplies = ad7380_supplies ,
349+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
341350 .available_scan_masks = ad7380_2_channel_scan_masks ,
342351 .timing_specs = & ad7380_timing ,
343352};
@@ -347,6 +356,8 @@ static const struct ad7380_chip_info ad7381_chip_info = {
347356 .channels = ad7381_channels ,
348357 .num_channels = ARRAY_SIZE (ad7381_channels ),
349358 .num_simult_channels = 2 ,
359+ .supplies = ad7380_supplies ,
360+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
350361 .available_scan_masks = ad7380_2_channel_scan_masks ,
351362 .timing_specs = & ad7380_timing ,
352363};
@@ -356,6 +367,8 @@ static const struct ad7380_chip_info ad7383_chip_info = {
356367 .channels = ad7383_channels ,
357368 .num_channels = ARRAY_SIZE (ad7383_channels ),
358369 .num_simult_channels = 2 ,
370+ .supplies = ad7380_supplies ,
371+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
359372 .vcm_supplies = ad7380_2_channel_vcm_supplies ,
360373 .num_vcm_supplies = ARRAY_SIZE (ad7380_2_channel_vcm_supplies ),
361374 .available_scan_masks = ad7380_2_channel_scan_masks ,
@@ -367,6 +380,8 @@ static const struct ad7380_chip_info ad7384_chip_info = {
367380 .channels = ad7384_channels ,
368381 .num_channels = ARRAY_SIZE (ad7384_channels ),
369382 .num_simult_channels = 2 ,
383+ .supplies = ad7380_supplies ,
384+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
370385 .vcm_supplies = ad7380_2_channel_vcm_supplies ,
371386 .num_vcm_supplies = ARRAY_SIZE (ad7380_2_channel_vcm_supplies ),
372387 .available_scan_masks = ad7380_2_channel_scan_masks ,
@@ -378,6 +393,8 @@ static const struct ad7380_chip_info ad7386_chip_info = {
378393 .channels = ad7386_channels ,
379394 .num_channels = ARRAY_SIZE (ad7386_channels ),
380395 .num_simult_channels = 2 ,
396+ .supplies = ad7380_supplies ,
397+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
381398 .has_mux = true,
382399 .available_scan_masks = ad7380_2x2_channel_scan_masks ,
383400 .timing_specs = & ad7380_timing ,
@@ -388,6 +405,8 @@ static const struct ad7380_chip_info ad7387_chip_info = {
388405 .channels = ad7387_channels ,
389406 .num_channels = ARRAY_SIZE (ad7387_channels ),
390407 .num_simult_channels = 2 ,
408+ .supplies = ad7380_supplies ,
409+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
391410 .has_mux = true,
392411 .available_scan_masks = ad7380_2x2_channel_scan_masks ,
393412 .timing_specs = & ad7380_timing ,
@@ -398,6 +417,8 @@ static const struct ad7380_chip_info ad7388_chip_info = {
398417 .channels = ad7388_channels ,
399418 .num_channels = ARRAY_SIZE (ad7388_channels ),
400419 .num_simult_channels = 2 ,
420+ .supplies = ad7380_supplies ,
421+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
401422 .has_mux = true,
402423 .available_scan_masks = ad7380_2x2_channel_scan_masks ,
403424 .timing_specs = & ad7380_timing ,
@@ -408,6 +429,8 @@ static const struct ad7380_chip_info ad7380_4_chip_info = {
408429 .channels = ad7380_4_channels ,
409430 .num_channels = ARRAY_SIZE (ad7380_4_channels ),
410431 .num_simult_channels = 4 ,
432+ .supplies = ad7380_supplies ,
433+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
411434 .available_scan_masks = ad7380_4_channel_scan_masks ,
412435 .timing_specs = & ad7380_4_timing ,
413436};
@@ -417,6 +440,8 @@ static const struct ad7380_chip_info ad7381_4_chip_info = {
417440 .channels = ad7381_4_channels ,
418441 .num_channels = ARRAY_SIZE (ad7381_4_channels ),
419442 .num_simult_channels = 4 ,
443+ .supplies = ad7380_supplies ,
444+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
420445 .available_scan_masks = ad7380_4_channel_scan_masks ,
421446 .timing_specs = & ad7380_4_timing ,
422447};
@@ -426,6 +451,8 @@ static const struct ad7380_chip_info ad7383_4_chip_info = {
426451 .channels = ad7383_4_channels ,
427452 .num_channels = ARRAY_SIZE (ad7383_4_channels ),
428453 .num_simult_channels = 4 ,
454+ .supplies = ad7380_supplies ,
455+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
429456 .vcm_supplies = ad7380_4_channel_vcm_supplies ,
430457 .num_vcm_supplies = ARRAY_SIZE (ad7380_4_channel_vcm_supplies ),
431458 .available_scan_masks = ad7380_4_channel_scan_masks ,
@@ -437,6 +464,8 @@ static const struct ad7380_chip_info ad7384_4_chip_info = {
437464 .channels = ad7384_4_channels ,
438465 .num_channels = ARRAY_SIZE (ad7384_4_channels ),
439466 .num_simult_channels = 4 ,
467+ .supplies = ad7380_supplies ,
468+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
440469 .vcm_supplies = ad7380_4_channel_vcm_supplies ,
441470 .num_vcm_supplies = ARRAY_SIZE (ad7380_4_channel_vcm_supplies ),
442471 .available_scan_masks = ad7380_4_channel_scan_masks ,
@@ -448,6 +477,8 @@ static const struct ad7380_chip_info ad7386_4_chip_info = {
448477 .channels = ad7386_4_channels ,
449478 .num_channels = ARRAY_SIZE (ad7386_4_channels ),
450479 .num_simult_channels = 4 ,
480+ .supplies = ad7380_supplies ,
481+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
451482 .has_mux = true,
452483 .available_scan_masks = ad7380_2x4_channel_scan_masks ,
453484 .timing_specs = & ad7380_4_timing ,
@@ -458,6 +489,8 @@ static const struct ad7380_chip_info ad7387_4_chip_info = {
458489 .channels = ad7387_4_channels ,
459490 .num_channels = ARRAY_SIZE (ad7387_4_channels ),
460491 .num_simult_channels = 4 ,
492+ .supplies = ad7380_supplies ,
493+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
461494 .has_mux = true,
462495 .available_scan_masks = ad7380_2x4_channel_scan_masks ,
463496 .timing_specs = & ad7380_4_timing ,
@@ -468,6 +501,8 @@ static const struct ad7380_chip_info ad7388_4_chip_info = {
468501 .channels = ad7388_4_channels ,
469502 .num_channels = ARRAY_SIZE (ad7388_4_channels ),
470503 .num_simult_channels = 4 ,
504+ .supplies = ad7380_supplies ,
505+ .num_supplies = ARRAY_SIZE (ad7380_supplies ),
471506 .has_mux = true,
472507 .available_scan_masks = ad7380_2x4_channel_scan_masks ,
473508 .timing_specs = & ad7380_4_timing ,
@@ -1004,6 +1039,14 @@ static int ad7380_probe(struct spi_device *spi)
10041039 if (!st -> chip_info )
10051040 return dev_err_probe (& spi -> dev , - EINVAL , "missing match data\n" );
10061041
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+
10071050 /*
10081051 * If there is no REFIO supply, then it means that we are using
10091052 * the internal 2.5V reference, otherwise REFIO is reference voltage.
0 commit comments