diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-iadc.c index 21e35df82193..196525ba0b4b 100644 --- a/drivers/iio/adc/qcom-spmi-iadc.c +++ b/drivers/iio/adc/qcom-spmi-iadc.c @@ -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;