@@ -464,23 +464,17 @@ static const char * const ad7944_power_supplies[] = {
464
464
"avdd" , "dvdd" , "bvdd" , "vio"
465
465
};
466
466
467
- static void ad7944_ref_disable (void * ref )
468
- {
469
- regulator_disable (ref );
470
- }
471
-
472
467
static int ad7944_probe (struct spi_device * spi )
473
468
{
474
469
const struct ad7944_chip_info * chip_info ;
475
470
struct device * dev = & spi -> dev ;
476
471
struct iio_dev * indio_dev ;
477
472
struct ad7944_adc * adc ;
478
- bool have_refin = false;
479
- struct regulator * ref ;
473
+ bool have_refin ;
480
474
struct iio_chan_spec * chain_chan ;
481
475
unsigned long * chain_scan_masks ;
482
476
u32 n_chain_dev ;
483
- int ret ;
477
+ int ret , ref_mv ;
484
478
485
479
indio_dev = devm_iio_device_alloc (dev , sizeof (* adc ));
486
480
if (!indio_dev )
@@ -531,47 +525,23 @@ static int ad7944_probe(struct spi_device *spi)
531
525
* - external reference: REF is connected, REFIN is not connected
532
526
*/
533
527
534
- ref = devm_regulator_get_optional (dev , "ref" );
535
- if (IS_ERR (ref )) {
536
- if (PTR_ERR (ref ) != - ENODEV )
537
- return dev_err_probe (dev , PTR_ERR (ref ),
538
- "failed to get REF supply\n" );
528
+ ret = devm_regulator_get_enable_read_voltage (dev , "ref" );
529
+ if (ret < 0 && ret != - ENODEV )
530
+ return dev_err_probe (dev , ret , "failed to get REF voltage\n" );
539
531
540
- ref = NULL ;
541
- }
532
+ ref_mv = ret == - ENODEV ? 0 : ret / 1000 ;
542
533
543
534
ret = devm_regulator_get_enable_optional (dev , "refin" );
544
- if (ret == 0 )
545
- have_refin = true;
546
- else if (ret != - ENODEV )
547
- return dev_err_probe (dev , ret ,
548
- "failed to get and enable REFIN supply\n" );
535
+ if (ret < 0 && ret != - ENODEV )
536
+ return dev_err_probe (dev , ret , "failed to get REFIN voltage\n" );
537
+
538
+ have_refin = ret != - ENODEV ;
549
539
550
- if (have_refin && ref )
540
+ if (have_refin && ref_mv )
551
541
return dev_err_probe (dev , - EINVAL ,
552
542
"cannot have both refin and ref supplies\n" );
553
543
554
- if (ref ) {
555
- ret = regulator_enable (ref );
556
- if (ret )
557
- return dev_err_probe (dev , ret ,
558
- "failed to enable REF supply\n" );
559
-
560
- ret = devm_add_action_or_reset (dev , ad7944_ref_disable , ref );
561
- if (ret )
562
- return ret ;
563
-
564
- ret = regulator_get_voltage (ref );
565
- if (ret < 0 )
566
- return dev_err_probe (dev , ret ,
567
- "failed to get REF voltage\n" );
568
-
569
- /* external reference */
570
- adc -> ref_mv = ret / 1000 ;
571
- } else {
572
- /* internal reference */
573
- adc -> ref_mv = AD7944_INTERNAL_REF_MV ;
574
- }
544
+ adc -> ref_mv = ref_mv ?: AD7944_INTERNAL_REF_MV ;
575
545
576
546
adc -> cnv = devm_gpiod_get_optional (dev , "cnv" , GPIOD_OUT_LOW );
577
547
if (IS_ERR (adc -> cnv ))
0 commit comments