mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
iio: adc: qcom-spmi-iadc: Remove regmap R/W wrapper functions
This driver doesn't need to add any register base address to any
regmap call anymore since it was migrated to register as a SPMI
subdevice with its own regmap reg_base, which makes the regmap
API to automatically add such base address internally.
Since the iadc_{read,write,read_result}() functions now only do
call regmap_{read,write,bulk_read}() and nothing else, simplify
the driver by removing them and by calling regmap APIs directly.
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
6507e23579
commit
c8f1aa6394
|
|
@ -113,77 +113,59 @@ struct iadc_chip {
|
|||
struct completion complete;
|
||||
};
|
||||
|
||||
static int iadc_read(struct iadc_chip *iadc, u16 offset, u8 *data)
|
||||
{
|
||||
unsigned int val;
|
||||
int ret;
|
||||
|
||||
ret = regmap_read(iadc->regmap, offset, &val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
*data = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iadc_write(struct iadc_chip *iadc, u16 offset, u8 data)
|
||||
{
|
||||
return regmap_write(iadc->regmap, offset, data);
|
||||
}
|
||||
|
||||
static int iadc_reset(struct iadc_chip *iadc)
|
||||
{
|
||||
u8 data;
|
||||
u32 data;
|
||||
int ret;
|
||||
|
||||
ret = iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
|
||||
ret = regmap_write(iadc->regmap, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = iadc_read(iadc, IADC_PERH_RESET_CTL3, &data);
|
||||
ret = regmap_read(iadc->regmap, IADC_PERH_RESET_CTL3, &data);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
|
||||
ret = regmap_write(iadc->regmap, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
data |= IADC_FOLLOW_WARM_RB;
|
||||
|
||||
return iadc_write(iadc, IADC_PERH_RESET_CTL3, data);
|
||||
return regmap_write(iadc->regmap, IADC_PERH_RESET_CTL3, data);
|
||||
}
|
||||
|
||||
static int iadc_set_state(struct iadc_chip *iadc, bool state)
|
||||
{
|
||||
return iadc_write(iadc, IADC_EN_CTL1, state ? IADC_EN_CTL1_SET : 0);
|
||||
return regmap_write(iadc->regmap, IADC_EN_CTL1, state ? IADC_EN_CTL1_SET : 0);
|
||||
}
|
||||
|
||||
static void iadc_status_show(struct iadc_chip *iadc)
|
||||
{
|
||||
u8 mode, sta1, chan, dig, en, req;
|
||||
u32 mode, sta1, chan, dig, en, req;
|
||||
int ret;
|
||||
|
||||
ret = iadc_read(iadc, IADC_MODE_CTL, &mode);
|
||||
ret = regmap_read(iadc->regmap, IADC_MODE_CTL, &mode);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
ret = iadc_read(iadc, IADC_DIG_PARAM, &dig);
|
||||
ret = regmap_read(iadc->regmap, IADC_DIG_PARAM, &dig);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
ret = iadc_read(iadc, IADC_CH_SEL_CTL, &chan);
|
||||
ret = regmap_read(iadc->regmap, IADC_CH_SEL_CTL, &chan);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
ret = iadc_read(iadc, IADC_CONV_REQ, &req);
|
||||
ret = regmap_read(iadc->regmap, IADC_CONV_REQ, &req);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
ret = iadc_read(iadc, IADC_STATUS1, &sta1);
|
||||
ret = regmap_read(iadc->regmap, IADC_STATUS1, &sta1);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
ret = iadc_read(iadc, IADC_EN_CTL1, &en);
|
||||
ret = regmap_read(iadc->regmap, IADC_EN_CTL1, &en);
|
||||
if (ret < 0)
|
||||
return;
|
||||
|
||||
|
|
@ -199,34 +181,34 @@ static int iadc_configure(struct iadc_chip *iadc, int channel)
|
|||
|
||||
/* Mode selection */
|
||||
mode = (IADC_OP_MODE_NORMAL << IADC_OP_MODE_SHIFT) | IADC_TRIM_EN;
|
||||
ret = iadc_write(iadc, IADC_MODE_CTL, mode);
|
||||
ret = regmap_write(iadc->regmap, IADC_MODE_CTL, mode);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Channel selection */
|
||||
ret = iadc_write(iadc, IADC_CH_SEL_CTL, channel);
|
||||
ret = regmap_write(iadc->regmap, IADC_CH_SEL_CTL, channel);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Digital parameter setup */
|
||||
decim = IADC_DEF_DECIMATION << IADC_DIG_DEC_RATIO_SEL_SHIFT;
|
||||
ret = iadc_write(iadc, IADC_DIG_PARAM, decim);
|
||||
ret = regmap_write(iadc->regmap, IADC_DIG_PARAM, decim);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* HW settle time delay */
|
||||
ret = iadc_write(iadc, IADC_HW_SETTLE_DELAY, IADC_DEF_HW_SETTLE_TIME);
|
||||
ret = regmap_write(iadc->regmap, IADC_HW_SETTLE_DELAY, IADC_DEF_HW_SETTLE_TIME);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = iadc_write(iadc, IADC_FAST_AVG_CTL, IADC_DEF_AVG_SAMPLES);
|
||||
ret = regmap_write(iadc->regmap, IADC_FAST_AVG_CTL, IADC_DEF_AVG_SAMPLES);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (IADC_DEF_AVG_SAMPLES)
|
||||
ret = iadc_write(iadc, IADC_FAST_AVG_EN, IADC_FAST_AVG_EN_SET);
|
||||
ret = regmap_write(iadc->regmap, IADC_FAST_AVG_EN, IADC_FAST_AVG_EN_SET);
|
||||
else
|
||||
ret = iadc_write(iadc, IADC_FAST_AVG_EN, 0);
|
||||
ret = regmap_write(iadc->regmap, IADC_FAST_AVG_EN, 0);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
@ -239,19 +221,19 @@ static int iadc_configure(struct iadc_chip *iadc, int channel)
|
|||
return ret;
|
||||
|
||||
/* Request conversion */
|
||||
return iadc_write(iadc, IADC_CONV_REQ, IADC_CONV_REQ_SET);
|
||||
return regmap_write(iadc->regmap, IADC_CONV_REQ, IADC_CONV_REQ_SET);
|
||||
}
|
||||
|
||||
static int iadc_poll_wait_eoc(struct iadc_chip *iadc, unsigned int interval_us)
|
||||
{
|
||||
unsigned int count, retry;
|
||||
u32 sta1;
|
||||
int ret;
|
||||
u8 sta1;
|
||||
|
||||
retry = interval_us / IADC_CONV_TIME_MIN_US;
|
||||
|
||||
for (count = 0; count < retry; count++) {
|
||||
ret = iadc_read(iadc, IADC_STATUS1, &sta1);
|
||||
ret = regmap_read(iadc->regmap, IADC_STATUS1, &sta1);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
@ -267,11 +249,6 @@ static int iadc_poll_wait_eoc(struct iadc_chip *iadc, unsigned int interval_us)
|
|||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
static int iadc_read_result(struct iadc_chip *iadc, u16 *data)
|
||||
{
|
||||
return regmap_bulk_read(iadc->regmap, IADC_DATA, data, 2);
|
||||
}
|
||||
|
||||
static int iadc_do_conversion(struct iadc_chip *iadc, int chan, u16 *data)
|
||||
{
|
||||
unsigned int wait;
|
||||
|
|
@ -296,7 +273,7 @@ static int iadc_do_conversion(struct iadc_chip *iadc, int chan, u16 *data)
|
|||
}
|
||||
|
||||
if (!ret)
|
||||
ret = iadc_read_result(iadc, data);
|
||||
ret = regmap_bulk_read(iadc->regmap, IADC_DATA, data, sizeof(*data));
|
||||
exit:
|
||||
iadc_set_state(iadc, false);
|
||||
if (ret < 0)
|
||||
|
|
@ -392,33 +369,33 @@ static int iadc_update_offset(struct iadc_chip *iadc)
|
|||
|
||||
static int iadc_version_check(struct iadc_chip *iadc)
|
||||
{
|
||||
u8 val;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
ret = iadc_read(iadc, IADC_PERPH_TYPE, &val);
|
||||
ret = regmap_read(iadc->regmap, IADC_PERPH_TYPE, &val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (val < IADC_PERPH_TYPE_ADC) {
|
||||
dev_err(iadc->dev, "%d is not ADC\n", val);
|
||||
dev_err(iadc->dev, "%u is not ADC\n", val);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = iadc_read(iadc, IADC_PERPH_SUBTYPE, &val);
|
||||
ret = regmap_read(iadc->regmap, IADC_PERPH_SUBTYPE, &val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (val < IADC_PERPH_SUBTYPE_IADC) {
|
||||
dev_err(iadc->dev, "%d is not IADC\n", val);
|
||||
dev_err(iadc->dev, "%u is not IADC\n", val);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = iadc_read(iadc, IADC_REVISION2, &val);
|
||||
ret = regmap_read(iadc->regmap, IADC_REVISION2, &val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (val < IADC_REVISION2_SUPPORTED_IADC) {
|
||||
dev_err(iadc->dev, "revision %d not supported\n", val);
|
||||
dev_err(iadc->dev, "revision %u not supported\n", val);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -428,7 +405,7 @@ static int iadc_version_check(struct iadc_chip *iadc)
|
|||
static int iadc_rsense_read(struct iadc_chip *iadc, struct device_node *node)
|
||||
{
|
||||
int ret, sign, int_sense;
|
||||
u8 deviation;
|
||||
u32 deviation;
|
||||
|
||||
ret = of_property_read_u32(node, "qcom,external-resistor-micro-ohms",
|
||||
&iadc->rsense[IADC_EXT_RSENSE]);
|
||||
|
|
@ -440,7 +417,7 @@ static int iadc_rsense_read(struct iadc_chip *iadc, struct device_node *node)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = iadc_read(iadc, IADC_NOMINAL_RSENSE, &deviation);
|
||||
ret = regmap_read(iadc->regmap, IADC_NOMINAL_RSENSE, &deviation);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user