@@ -626,6 +626,7 @@ static const struct iio_chan_spec ad4170_channel_template = {
626
626
.differential = 1 ,
627
627
.info_mask_separate = BIT (IIO_CHAN_INFO_RAW ) |
628
628
BIT (IIO_CHAN_INFO_SCALE ) |
629
+ BIT (IIO_CHAN_INFO_CALIBSCALE ) |
629
630
BIT (IIO_CHAN_INFO_OFFSET ),
630
631
.info_mask_separate_available = BIT (IIO_CHAN_INFO_SCALE ),
631
632
.scan_type = {
@@ -948,6 +949,9 @@ static int ad4170_read_raw(struct iio_dev *indio_dev,
948
949
pga = FIELD_GET (AD4170_AFE_PGA_GAIN_MSK , setup -> afe );
949
950
* val = chan_info -> offset_tbl [pga ];
950
951
return IIO_VAL_INT ;
952
+ case IIO_CHAN_INFO_CALIBSCALE :
953
+ * val = setup -> gain ;
954
+ return IIO_VAL_INT ;
951
955
default :
952
956
return - EINVAL ;
953
957
}
@@ -1062,6 +1066,18 @@ static int ad4170_set_pga(struct ad4170_state *st,
1062
1066
return ad4170_write_channel_setup (st , chan -> address , false);
1063
1067
}
1064
1068
1069
+ static int ad4170_set_calib_gain (struct ad4170_state * st ,
1070
+ struct iio_chan_spec const * chan , int val )
1071
+ {
1072
+ struct ad4170_chan_info * chan_info = & st -> chan_infos [chan -> address ];
1073
+ struct ad4170_setup * setup = & chan_info -> setup ;
1074
+
1075
+ guard (mutex )(& st -> lock );
1076
+ setup -> gain = val ;
1077
+
1078
+ return ad4170_write_channel_setup (st , chan -> address , false);
1079
+ }
1080
+
1065
1081
static int __ad4170_write_raw (struct iio_dev * indio_dev ,
1066
1082
struct iio_chan_spec const * chan , int val ,
1067
1083
int val2 , long info )
@@ -1071,6 +1087,8 @@ static int __ad4170_write_raw(struct iio_dev *indio_dev,
1071
1087
switch (info ) {
1072
1088
case IIO_CHAN_INFO_SCALE :
1073
1089
return ad4170_set_pga (st , chan , val , val2 );
1090
+ case IIO_CHAN_INFO_CALIBSCALE :
1091
+ return ad4170_set_calib_gain (st , chan , val );
1074
1092
default :
1075
1093
return - EINVAL ;
1076
1094
}
@@ -1097,6 +1115,8 @@ static int ad4170_write_raw_get_fmt(struct iio_dev *indio_dev,
1097
1115
switch (info ) {
1098
1116
case IIO_CHAN_INFO_SCALE :
1099
1117
return IIO_VAL_INT_PLUS_NANO ;
1118
+ case IIO_CHAN_INFO_CALIBSCALE :
1119
+ return IIO_VAL_INT ;
1100
1120
default :
1101
1121
return - EINVAL ;
1102
1122
}
0 commit comments