Skip to content

Commit c7ba98f

Browse files
lumagjic23
authored andcommitted
iio: adc: qcom-vadc: move several adc5 functions to common file
ADC-TM5 driver will make use of several functions from ADC5 driver. Move them to qcom-vadc-common driver. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/20201204025509.1075506-4-dmitry.baryshkov@linaro.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 8d502ef commit c7ba98f

3 files changed

Lines changed: 82 additions & 71 deletions

File tree

drivers/iio/adc/qcom-spmi-adc5.c

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,6 @@ struct adc5_chip {
154154
const struct adc5_data *data;
155155
};
156156

157-
static const struct vadc_prescale_ratio adc5_prescale_ratios[] = {
158-
{.num = 1, .den = 1},
159-
{.num = 1, .den = 3},
160-
{.num = 1, .den = 4},
161-
{.num = 1, .den = 6},
162-
{.num = 1, .den = 20},
163-
{.num = 1, .den = 8},
164-
{.num = 10, .den = 81},
165-
{.num = 1, .den = 10},
166-
{.num = 1, .den = 16}
167-
};
168-
169157
static int adc5_read(struct adc5_chip *adc, u16 offset, u8 *data, int len)
170158
{
171159
return regmap_bulk_read(adc->regmap, adc->base + offset, data, len);
@@ -181,55 +169,6 @@ static int adc5_masked_write(struct adc5_chip *adc, u16 offset, u8 mask, u8 val)
181169
return regmap_update_bits(adc->regmap, adc->base + offset, mask, val);
182170
}
183171

184-
static int adc5_prescaling_from_dt(u32 num, u32 den)
185-
{
186-
unsigned int pre;
187-
188-
for (pre = 0; pre < ARRAY_SIZE(adc5_prescale_ratios); pre++)
189-
if (adc5_prescale_ratios[pre].num == num &&
190-
adc5_prescale_ratios[pre].den == den)
191-
break;
192-
193-
if (pre == ARRAY_SIZE(adc5_prescale_ratios))
194-
return -EINVAL;
195-
196-
return pre;
197-
}
198-
199-
static int adc5_hw_settle_time_from_dt(u32 value,
200-
const unsigned int *hw_settle)
201-
{
202-
unsigned int i;
203-
204-
for (i = 0; i < VADC_HW_SETTLE_SAMPLES_MAX; i++) {
205-
if (value == hw_settle[i])
206-
return i;
207-
}
208-
209-
return -EINVAL;
210-
}
211-
212-
static int adc5_avg_samples_from_dt(u32 value)
213-
{
214-
if (!is_power_of_2(value) || value > ADC5_AVG_SAMPLES_MAX)
215-
return -EINVAL;
216-
217-
return __ffs(value);
218-
}
219-
220-
static int adc5_decimation_from_dt(u32 value,
221-
const unsigned int *decimation)
222-
{
223-
unsigned int i;
224-
225-
for (i = 0; i < ADC5_DECIMATION_SAMPLES_MAX; i++) {
226-
if (value == decimation[i])
227-
return i;
228-
}
229-
230-
return -EINVAL;
231-
}
232-
233172
static int adc5_read_voltage_data(struct adc5_chip *adc, u16 *data)
234173
{
235174
int ret;
@@ -511,7 +450,7 @@ static int adc_read_raw_common(struct iio_dev *indio_dev,
511450
return ret;
512451

513452
ret = qcom_adc5_hw_scale(prop->scale_fn_type,
514-
&adc5_prescale_ratios[prop->prescale],
453+
prop->prescale,
515454
adc->data,
516455
adc_code_volt, val);
517456
if (ret)
@@ -717,7 +656,7 @@ static int adc5_get_dt_channel_data(struct adc5_chip *adc,
717656

718657
ret = of_property_read_u32(node, "qcom,decimation", &value);
719658
if (!ret) {
720-
ret = adc5_decimation_from_dt(value, data->decimation);
659+
ret = qcom_adc5_decimation_from_dt(value, data->decimation);
721660
if (ret < 0) {
722661
dev_err(dev, "%02x invalid decimation %d\n",
723662
chan, value);
@@ -730,7 +669,7 @@ static int adc5_get_dt_channel_data(struct adc5_chip *adc,
730669

731670
ret = of_property_read_u32_array(node, "qcom,pre-scaling", varr, 2);
732671
if (!ret) {
733-
ret = adc5_prescaling_from_dt(varr[0], varr[1]);
672+
ret = qcom_adc5_prescaling_from_dt(varr[0], varr[1]);
734673
if (ret < 0) {
735674
dev_err(dev, "%02x invalid pre-scaling <%d %d>\n",
736675
chan, varr[0], varr[1]);
@@ -759,11 +698,9 @@ static int adc5_get_dt_channel_data(struct adc5_chip *adc,
759698
if ((dig_version[0] >= ADC5_HW_SETTLE_DIFF_MINOR &&
760699
dig_version[1] >= ADC5_HW_SETTLE_DIFF_MAJOR) ||
761700
adc->data->info == &adc7_info)
762-
ret = adc5_hw_settle_time_from_dt(value,
763-
data->hw_settle_2);
701+
ret = qcom_adc5_hw_settle_time_from_dt(value, data->hw_settle_2);
764702
else
765-
ret = adc5_hw_settle_time_from_dt(value,
766-
data->hw_settle_1);
703+
ret = qcom_adc5_hw_settle_time_from_dt(value, data->hw_settle_1);
767704

768705
if (ret < 0) {
769706
dev_err(dev, "%02x invalid hw-settle-time %d us\n",
@@ -777,7 +714,7 @@ static int adc5_get_dt_channel_data(struct adc5_chip *adc,
777714

778715
ret = of_property_read_u32(node, "qcom,avg-samples", &value);
779716
if (!ret) {
780-
ret = adc5_avg_samples_from_dt(value);
717+
ret = qcom_adc5_avg_samples_from_dt(value);
781718
if (ret < 0) {
782719
dev_err(dev, "%02x invalid avg-samples %d\n",
783720
chan, value);

drivers/iio/adc/qcom-vadc-common.c

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,18 @@ static const struct vadc_map_pt adcmap7_100k[] = {
278278
{ 2420, 130048 }
279279
};
280280

281+
static const struct vadc_prescale_ratio adc5_prescale_ratios[] = {
282+
{.num = 1, .den = 1},
283+
{.num = 1, .den = 3},
284+
{.num = 1, .den = 4},
285+
{.num = 1, .den = 6},
286+
{.num = 1, .den = 20},
287+
{.num = 1, .den = 8},
288+
{.num = 10, .den = 81},
289+
{.num = 1, .den = 10},
290+
{.num = 1, .den = 16}
291+
};
292+
281293
static int qcom_vadc_scale_hw_calib_volt(
282294
const struct vadc_prescale_ratio *prescale,
283295
const struct adc5_data *data,
@@ -647,10 +659,12 @@ int qcom_vadc_scale(enum vadc_scale_fn_type scaletype,
647659
EXPORT_SYMBOL(qcom_vadc_scale);
648660

649661
int qcom_adc5_hw_scale(enum vadc_scale_fn_type scaletype,
650-
const struct vadc_prescale_ratio *prescale,
662+
unsigned int prescale_ratio,
651663
const struct adc5_data *data,
652664
u16 adc_code, int *result)
653665
{
666+
const struct vadc_prescale_ratio *prescale = &adc5_prescale_ratios[prescale_ratio];
667+
654668
if (!(scaletype >= SCALE_HW_CALIB_DEFAULT &&
655669
scaletype < SCALE_HW_CALIB_INVALID)) {
656670
pr_err("Invalid scale type %d\n", scaletype);
@@ -662,6 +676,58 @@ int qcom_adc5_hw_scale(enum vadc_scale_fn_type scaletype,
662676
}
663677
EXPORT_SYMBOL(qcom_adc5_hw_scale);
664678

679+
int qcom_adc5_prescaling_from_dt(u32 num, u32 den)
680+
{
681+
unsigned int pre;
682+
683+
for (pre = 0; pre < ARRAY_SIZE(adc5_prescale_ratios); pre++)
684+
if (adc5_prescale_ratios[pre].num == num &&
685+
adc5_prescale_ratios[pre].den == den)
686+
break;
687+
688+
if (pre == ARRAY_SIZE(adc5_prescale_ratios))
689+
return -EINVAL;
690+
691+
return pre;
692+
}
693+
EXPORT_SYMBOL(qcom_adc5_prescaling_from_dt);
694+
695+
int qcom_adc5_hw_settle_time_from_dt(u32 value,
696+
const unsigned int *hw_settle)
697+
{
698+
unsigned int i;
699+
700+
for (i = 0; i < VADC_HW_SETTLE_SAMPLES_MAX; i++) {
701+
if (value == hw_settle[i])
702+
return i;
703+
}
704+
705+
return -EINVAL;
706+
}
707+
EXPORT_SYMBOL(qcom_adc5_hw_settle_time_from_dt);
708+
709+
int qcom_adc5_avg_samples_from_dt(u32 value)
710+
{
711+
if (!is_power_of_2(value) || value > ADC5_AVG_SAMPLES_MAX)
712+
return -EINVAL;
713+
714+
return __ffs(value);
715+
}
716+
EXPORT_SYMBOL(qcom_adc5_avg_samples_from_dt);
717+
718+
int qcom_adc5_decimation_from_dt(u32 value, const unsigned int *decimation)
719+
{
720+
unsigned int i;
721+
722+
for (i = 0; i < ADC5_DECIMATION_SAMPLES_MAX; i++) {
723+
if (value == decimation[i])
724+
return i;
725+
}
726+
727+
return -EINVAL;
728+
}
729+
EXPORT_SYMBOL(qcom_adc5_decimation_from_dt);
730+
665731
int qcom_vadc_decimation_from_dt(u32 value)
666732
{
667733
if (!is_power_of_2(value) || value < VADC_DECIMATION_MIN ||

drivers/iio/adc/qcom-vadc-common.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,18 @@ struct qcom_adc5_scale_type {
168168
};
169169

170170
int qcom_adc5_hw_scale(enum vadc_scale_fn_type scaletype,
171-
const struct vadc_prescale_ratio *prescale,
171+
unsigned int prescale_ratio,
172172
const struct adc5_data *data,
173173
u16 adc_code, int *result_mdec);
174174

175+
int qcom_adc5_prescaling_from_dt(u32 num, u32 den);
176+
177+
int qcom_adc5_hw_settle_time_from_dt(u32 value, const unsigned int *hw_settle);
178+
179+
int qcom_adc5_avg_samples_from_dt(u32 value);
180+
181+
int qcom_adc5_decimation_from_dt(u32 value, const unsigned int *decimation);
182+
175183
int qcom_vadc_decimation_from_dt(u32 value);
176184

177185
#endif /* QCOM_VADC_COMMON_H */

0 commit comments

Comments
 (0)