iio: adc: Combine read functions for PMIC5 and PMIC7

Add a common function used for read_raw callback for both PMIC5
and PMIC7 ADCs.

Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Jishnu Prakash 2020-06-23 12:59:59 +05:30 committed by Jonathan Cameron
parent 4e130dc7b4
commit 8f52a15aca

View File

@ -449,6 +449,11 @@ unlock:
return ret; return ret;
} }
typedef int (*adc_do_conversion)(struct adc5_chip *adc,
struct adc5_channel_prop *prop,
struct iio_chan_spec const *chan,
u16 *data_volt, u16 *data_cur);
static irqreturn_t adc5_isr(int irq, void *dev_id) static irqreturn_t adc5_isr(int irq, void *dev_id)
{ {
struct adc5_chip *adc = dev_id; struct adc5_chip *adc = dev_id;
@ -487,9 +492,9 @@ static int adc7_of_xlate(struct iio_dev *indio_dev,
return -EINVAL; return -EINVAL;
} }
static int adc5_read_raw(struct iio_dev *indio_dev, static int adc_read_raw_common(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val, int *val2, struct iio_chan_spec const *chan, int *val, int *val2,
long mask) long mask, adc_do_conversion do_conv)
{ {
struct adc5_chip *adc = iio_priv(indio_dev); struct adc5_chip *adc = iio_priv(indio_dev);
struct adc5_channel_prop *prop; struct adc5_channel_prop *prop;
@ -500,8 +505,8 @@ static int adc5_read_raw(struct iio_dev *indio_dev,
switch (mask) { switch (mask) {
case IIO_CHAN_INFO_PROCESSED: case IIO_CHAN_INFO_PROCESSED:
ret = adc5_do_conversion(adc, prop, chan, ret = do_conv(adc, prop, chan,
&adc_code_volt, &adc_code_cur); &adc_code_volt, &adc_code_cur);
if (ret) if (ret)
return ret; return ret;
@ -518,36 +523,20 @@ static int adc5_read_raw(struct iio_dev *indio_dev,
} }
} }
static int adc5_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val, int *val2,
long mask)
{
return adc_read_raw_common(indio_dev, chan, val, val2,
mask, adc5_do_conversion);
}
static int adc7_read_raw(struct iio_dev *indio_dev, static int adc7_read_raw(struct iio_dev *indio_dev,
struct iio_chan_spec const *chan, int *val, int *val2, struct iio_chan_spec const *chan, int *val, int *val2,
long mask) long mask)
{ {
struct adc5_chip *adc = iio_priv(indio_dev); return adc_read_raw_common(indio_dev, chan, val, val2,
struct adc5_channel_prop *prop; mask, adc7_do_conversion);
u16 adc_code_volt, adc_code_cur;
int ret;
prop = &adc->chan_props[chan->address];
switch (mask) {
case IIO_CHAN_INFO_PROCESSED:
ret = adc7_do_conversion(adc, prop, chan,
&adc_code_volt, &adc_code_cur);
if (ret)
return ret;
ret = qcom_adc5_hw_scale(prop->scale_fn_type,
&adc5_prescale_ratios[prop->prescale],
adc->data,
adc_code_volt, val);
if (ret)
return ret;
return IIO_VAL_INT;
default:
return -EINVAL;
}
} }
static const struct iio_info adc5_info = { static const struct iio_info adc5_info = {