@@ -464,23 +464,17 @@ static const char * const ad7944_power_supplies[] = {
464464 "avdd" , "dvdd" , "bvdd" , "vio"
465465};
466466
467- static void ad7944_ref_disable (void * ref )
468- {
469- regulator_disable (ref );
470- }
471-
472467static int ad7944_probe (struct spi_device * spi )
473468{
474469 const struct ad7944_chip_info * chip_info ;
475470 struct device * dev = & spi -> dev ;
476471 struct iio_dev * indio_dev ;
477472 struct ad7944_adc * adc ;
478- bool have_refin = false;
479- struct regulator * ref ;
473+ bool have_refin ;
480474 struct iio_chan_spec * chain_chan ;
481475 unsigned long * chain_scan_masks ;
482476 u32 n_chain_dev ;
483- int ret ;
477+ int ret , ref_mv ;
484478
485479 indio_dev = devm_iio_device_alloc (dev , sizeof (* adc ));
486480 if (!indio_dev )
@@ -531,47 +525,23 @@ static int ad7944_probe(struct spi_device *spi)
531525 * - external reference: REF is connected, REFIN is not connected
532526 */
533527
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" );
539531
540- ref = NULL ;
541- }
532+ ref_mv = ret == - ENODEV ? 0 : ret / 1000 ;
542533
543534 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 ;
549539
550- if (have_refin && ref )
540+ if (have_refin && ref_mv )
551541 return dev_err_probe (dev , - EINVAL ,
552542 "cannot have both refin and ref supplies\n" );
553543
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 ;
575545
576546 adc -> cnv = devm_gpiod_get_optional (dev , "cnv" , GPIOD_OUT_LOW );
577547 if (IS_ERR (adc -> cnv ))
0 commit comments