@@ -956,7 +956,7 @@ static const struct iio_info ad7380_info = {
956
956
.debugfs_reg_access = & ad7380_debugfs_reg_access ,
957
957
};
958
958
959
- static int ad7380_init (struct ad7380_state * st , struct regulator * vref )
959
+ static int ad7380_init (struct ad7380_state * st , bool external_ref_en )
960
960
{
961
961
int ret ;
962
962
@@ -968,13 +968,13 @@ static int ad7380_init(struct ad7380_state *st, struct regulator *vref)
968
968
if (ret < 0 )
969
969
return ret ;
970
970
971
- /* select internal or external reference voltage */
972
- ret = regmap_update_bits ( st -> regmap , AD7380_REG_ADDR_CONFIG1 ,
973
- AD7380_CONFIG1_REFSEL ,
974
- FIELD_PREP ( AD7380_CONFIG1_REFSEL ,
975
- vref ? 1 : 0 ));
976
- if ( ret < 0 )
977
- return ret ;
971
+ if ( external_ref_en ) {
972
+ /* select external reference voltage */
973
+ ret = regmap_set_bits ( st -> regmap , AD7380_REG_ADDR_CONFIG1 ,
974
+ AD7380_CONFIG1_REFSEL );
975
+ if ( ret < 0 )
976
+ return ret ;
977
+ }
978
978
979
979
/* This is the default value after reset. */
980
980
st -> oversampling_ratio = 1 ;
@@ -987,16 +987,11 @@ static int ad7380_init(struct ad7380_state *st, struct regulator *vref)
987
987
FIELD_PREP (AD7380_CONFIG2_SDO , 1 ));
988
988
}
989
989
990
- static void ad7380_regulator_disable (void * p )
991
- {
992
- regulator_disable (p );
993
- }
994
-
995
990
static int ad7380_probe (struct spi_device * spi )
996
991
{
997
992
struct iio_dev * indio_dev ;
998
993
struct ad7380_state * st ;
999
- struct regulator * vref ;
994
+ bool external_ref_en ;
1000
995
int ret , i ;
1001
996
1002
997
indio_dev = devm_iio_device_alloc (& spi -> dev , sizeof (* st ));
@@ -1009,37 +1004,17 @@ static int ad7380_probe(struct spi_device *spi)
1009
1004
if (!st -> chip_info )
1010
1005
return dev_err_probe (& spi -> dev , - EINVAL , "missing match data\n" );
1011
1006
1012
- vref = devm_regulator_get_optional (& spi -> dev , "refio" );
1013
- if (IS_ERR (vref )) {
1014
- if (PTR_ERR (vref ) != - ENODEV )
1015
- return dev_err_probe (& spi -> dev , PTR_ERR (vref ),
1016
- "Failed to get refio regulator\n" );
1017
-
1018
- vref = NULL ;
1019
- }
1020
-
1021
1007
/*
1022
1008
* If there is no REFIO supply, then it means that we are using
1023
1009
* the internal 2.5V reference, otherwise REFIO is reference voltage.
1024
1010
*/
1025
- if ( vref ) {
1026
- ret = regulator_enable ( vref );
1027
- if ( ret )
1028
- return ret ;
1011
+ ret = devm_regulator_get_enable_read_voltage ( & spi -> dev , "refio" );
1012
+ if ( ret < 0 && ret != - ENODEV )
1013
+ return dev_err_probe ( & spi -> dev , ret ,
1014
+ "Failed to get refio regulator\n" ) ;
1029
1015
1030
- ret = devm_add_action_or_reset (& spi -> dev ,
1031
- ad7380_regulator_disable , vref );
1032
- if (ret )
1033
- return ret ;
1034
-
1035
- ret = regulator_get_voltage (vref );
1036
- if (ret < 0 )
1037
- return ret ;
1038
-
1039
- st -> vref_mv = ret / 1000 ;
1040
- } else {
1041
- st -> vref_mv = AD7380_INTERNAL_REF_MV ;
1042
- }
1016
+ external_ref_en = ret != - ENODEV ;
1017
+ st -> vref_mv = external_ref_en ? ret / 1000 : AD7380_INTERNAL_REF_MV ;
1043
1018
1044
1019
if (st -> chip_info -> num_vcm_supplies > ARRAY_SIZE (st -> vcm_mv ))
1045
1020
return dev_err_probe (& spi -> dev , - EINVAL ,
@@ -1050,27 +1025,13 @@ static int ad7380_probe(struct spi_device *spi)
1050
1025
* input pin.
1051
1026
*/
1052
1027
for (i = 0 ; i < st -> chip_info -> num_vcm_supplies ; i ++ ) {
1053
- struct regulator * vcm ;
1054
-
1055
- vcm = devm_regulator_get (& spi -> dev ,
1056
- st -> chip_info -> vcm_supplies [i ]);
1057
- if (IS_ERR (vcm ))
1058
- return dev_err_probe (& spi -> dev , PTR_ERR (vcm ),
1059
- "Failed to get %s regulator\n" ,
1060
- st -> chip_info -> vcm_supplies [i ]);
1028
+ const char * vcm = st -> chip_info -> vcm_supplies [i ];
1061
1029
1062
- ret = regulator_enable (vcm );
1063
- if (ret )
1064
- return ret ;
1065
-
1066
- ret = devm_add_action_or_reset (& spi -> dev ,
1067
- ad7380_regulator_disable , vcm );
1068
- if (ret )
1069
- return ret ;
1070
-
1071
- ret = regulator_get_voltage (vcm );
1030
+ ret = devm_regulator_get_enable_read_voltage (& spi -> dev , vcm );
1072
1031
if (ret < 0 )
1073
- return ret ;
1032
+ return dev_err_probe (& spi -> dev , ret ,
1033
+ "Failed to get %s regulator\n" ,
1034
+ vcm );
1074
1035
1075
1036
st -> vcm_mv [i ] = ret / 1000 ;
1076
1037
}
@@ -1135,7 +1096,7 @@ static int ad7380_probe(struct spi_device *spi)
1135
1096
if (ret )
1136
1097
return ret ;
1137
1098
1138
- ret = ad7380_init (st , vref );
1099
+ ret = ad7380_init (st , external_ref_en );
1139
1100
if (ret )
1140
1101
return ret ;
1141
1102
0 commit comments