iadc              118 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_read(struct iadc_chip *iadc, u16 offset, u8 *data)
iadc              123 drivers/iio/adc/qcom-spmi-iadc.c 	ret = regmap_read(iadc->regmap, iadc->base + offset, &val);
iadc              131 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_write(struct iadc_chip *iadc, u16 offset, u8 data)
iadc              133 drivers/iio/adc/qcom-spmi-iadc.c 	return regmap_write(iadc->regmap, iadc->base + offset, data);
iadc              136 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_reset(struct iadc_chip *iadc)
iadc              141 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
iadc              145 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_PERH_RESET_CTL3, &data);
iadc              149 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA);
iadc              155 drivers/iio/adc/qcom-spmi-iadc.c 	return iadc_write(iadc, IADC_PERH_RESET_CTL3, data);
iadc              158 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_set_state(struct iadc_chip *iadc, bool state)
iadc              160 drivers/iio/adc/qcom-spmi-iadc.c 	return iadc_write(iadc, IADC_EN_CTL1, state ? IADC_EN_CTL1_SET : 0);
iadc              163 drivers/iio/adc/qcom-spmi-iadc.c static void iadc_status_show(struct iadc_chip *iadc)
iadc              168 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_MODE_CTL, &mode);
iadc              172 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_DIG_PARAM, &dig);
iadc              176 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_CH_SEL_CTL, &chan);
iadc              180 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_CONV_REQ, &req);
iadc              184 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_STATUS1, &sta1);
iadc              188 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_EN_CTL1, &en);
iadc              192 drivers/iio/adc/qcom-spmi-iadc.c 	dev_err(iadc->dev,
iadc              197 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_configure(struct iadc_chip *iadc, int channel)
iadc              204 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_MODE_CTL, mode);
iadc              209 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_CH_SEL_CTL, channel);
iadc              215 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_DIG_PARAM, decim);
iadc              220 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_HW_SETTLE_DELAY, IADC_DEF_HW_SETTLE_TIME);
iadc              224 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_write(iadc, IADC_FAST_AVG_CTL, IADC_DEF_AVG_SAMPLES);
iadc              229 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_write(iadc, IADC_FAST_AVG_EN, IADC_FAST_AVG_EN_SET);
iadc              231 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_write(iadc, IADC_FAST_AVG_EN, 0);
iadc              236 drivers/iio/adc/qcom-spmi-iadc.c 	if (!iadc->poll_eoc)
iadc              237 drivers/iio/adc/qcom-spmi-iadc.c 		reinit_completion(&iadc->complete);
iadc              239 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_set_state(iadc, true);
iadc              244 drivers/iio/adc/qcom-spmi-iadc.c 	return iadc_write(iadc, IADC_CONV_REQ, IADC_CONV_REQ_SET);
iadc              247 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_poll_wait_eoc(struct iadc_chip *iadc, unsigned int interval_us)
iadc              256 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_read(iadc, IADC_STATUS1, &sta1);
iadc              267 drivers/iio/adc/qcom-spmi-iadc.c 	iadc_status_show(iadc);
iadc              272 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_read_result(struct iadc_chip *iadc, u16 *data)
iadc              274 drivers/iio/adc/qcom-spmi-iadc.c 	return regmap_bulk_read(iadc->regmap, iadc->base + IADC_DATA, data, 2);
iadc              277 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_do_conversion(struct iadc_chip *iadc, int chan, u16 *data)
iadc              282 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_configure(iadc, chan);
iadc              288 drivers/iio/adc/qcom-spmi-iadc.c 	if (iadc->poll_eoc) {
iadc              289 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_poll_wait_eoc(iadc, wait);
iadc              291 drivers/iio/adc/qcom-spmi-iadc.c 		ret = wait_for_completion_timeout(&iadc->complete,
iadc              297 drivers/iio/adc/qcom-spmi-iadc.c 			ret = iadc_poll_wait_eoc(iadc, IADC_CONV_TIME_MIN_US);
iadc              301 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_read_result(iadc, data);
iadc              303 drivers/iio/adc/qcom-spmi-iadc.c 	iadc_set_state(iadc, false);
iadc              305 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "conversion failed\n");
iadc              314 drivers/iio/adc/qcom-spmi-iadc.c 	struct iadc_chip *iadc = iio_priv(indio_dev);
iadc              321 drivers/iio/adc/qcom-spmi-iadc.c 		mutex_lock(&iadc->lock);
iadc              322 drivers/iio/adc/qcom-spmi-iadc.c 		ret = iadc_do_conversion(iadc, chan->channel, &adc_raw);
iadc              323 drivers/iio/adc/qcom-spmi-iadc.c 		mutex_unlock(&iadc->lock);
iadc              327 drivers/iio/adc/qcom-spmi-iadc.c 		vsense_raw = adc_raw - iadc->offset[chan->channel];
iadc              330 drivers/iio/adc/qcom-spmi-iadc.c 		vsense_uv /= (s32)iadc->gain - iadc->offset[chan->channel];
iadc              332 drivers/iio/adc/qcom-spmi-iadc.c 		isense_ua = vsense_uv / iadc->rsense[chan->channel];
iadc              334 drivers/iio/adc/qcom-spmi-iadc.c 		dev_dbg(iadc->dev, "off %d gain %d adc %d %duV I %duA\n",
iadc              335 drivers/iio/adc/qcom-spmi-iadc.c 			iadc->offset[chan->channel], iadc->gain,
iadc              355 drivers/iio/adc/qcom-spmi-iadc.c 	struct iadc_chip *iadc = dev_id;
iadc              357 drivers/iio/adc/qcom-spmi-iadc.c 	complete(&iadc->complete);
iadc              362 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_update_offset(struct iadc_chip *iadc)
iadc              366 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_do_conversion(iadc, IADC_GAIN_17P857MV, &iadc->gain);
iadc              370 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_do_conversion(iadc, IADC_INT_OFFSET_CSP2_CSN2,
iadc              371 drivers/iio/adc/qcom-spmi-iadc.c 				 &iadc->offset[IADC_INT_RSENSE]);
iadc              375 drivers/iio/adc/qcom-spmi-iadc.c 	if (iadc->gain == iadc->offset[IADC_INT_RSENSE]) {
iadc              376 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "error: internal offset == gain %d\n",
iadc              377 drivers/iio/adc/qcom-spmi-iadc.c 			iadc->gain);
iadc              381 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_do_conversion(iadc, IADC_EXT_OFFSET_CSP_CSN,
iadc              382 drivers/iio/adc/qcom-spmi-iadc.c 				 &iadc->offset[IADC_EXT_RSENSE]);
iadc              386 drivers/iio/adc/qcom-spmi-iadc.c 	if (iadc->gain == iadc->offset[IADC_EXT_RSENSE]) {
iadc              387 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "error: external offset == gain %d\n",
iadc              388 drivers/iio/adc/qcom-spmi-iadc.c 			iadc->gain);
iadc              395 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_version_check(struct iadc_chip *iadc)
iadc              400 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_PERPH_TYPE, &val);
iadc              405 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "%d is not ADC\n", val);
iadc              409 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_PERPH_SUBTYPE, &val);
iadc              414 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "%d is not IADC\n", val);
iadc              418 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_REVISION2, &val);
iadc              423 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "revision %d not supported\n", val);
iadc              430 drivers/iio/adc/qcom-spmi-iadc.c static int iadc_rsense_read(struct iadc_chip *iadc, struct device_node *node)
iadc              436 drivers/iio/adc/qcom-spmi-iadc.c 				   &iadc->rsense[IADC_EXT_RSENSE]);
iadc              438 drivers/iio/adc/qcom-spmi-iadc.c 		iadc->rsense[IADC_EXT_RSENSE] = IADC_INT_RSENSE_IDEAL_VALUE;
iadc              440 drivers/iio/adc/qcom-spmi-iadc.c 	if (!iadc->rsense[IADC_EXT_RSENSE]) {
iadc              441 drivers/iio/adc/qcom-spmi-iadc.c 		dev_err(iadc->dev, "external resistor can't be zero Ohms");
iadc              445 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_read(iadc, IADC_NOMINAL_RSENSE, &deviation);
iadc              462 drivers/iio/adc/qcom-spmi-iadc.c 	iadc->rsense[IADC_INT_RSENSE] = int_sense;
iadc              490 drivers/iio/adc/qcom-spmi-iadc.c 	struct iadc_chip *iadc;
iadc              494 drivers/iio/adc/qcom-spmi-iadc.c 	indio_dev = devm_iio_device_alloc(dev, sizeof(*iadc));
iadc              498 drivers/iio/adc/qcom-spmi-iadc.c 	iadc = iio_priv(indio_dev);
iadc              499 drivers/iio/adc/qcom-spmi-iadc.c 	iadc->dev = dev;
iadc              501 drivers/iio/adc/qcom-spmi-iadc.c 	iadc->regmap = dev_get_regmap(dev->parent, NULL);
iadc              502 drivers/iio/adc/qcom-spmi-iadc.c 	if (!iadc->regmap)
iadc              505 drivers/iio/adc/qcom-spmi-iadc.c 	init_completion(&iadc->complete);
iadc              506 drivers/iio/adc/qcom-spmi-iadc.c 	mutex_init(&iadc->lock);
iadc              512 drivers/iio/adc/qcom-spmi-iadc.c 	iadc->base = res;
iadc              514 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_version_check(iadc);
iadc              518 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_rsense_read(iadc, node);
iadc              522 drivers/iio/adc/qcom-spmi-iadc.c 	dev_dbg(iadc->dev, "sense resistors %d and %d micro Ohm\n",
iadc              523 drivers/iio/adc/qcom-spmi-iadc.c 		iadc->rsense[IADC_INT_RSENSE],
iadc              524 drivers/iio/adc/qcom-spmi-iadc.c 		iadc->rsense[IADC_EXT_RSENSE]);
iadc              531 drivers/iio/adc/qcom-spmi-iadc.c 		iadc->poll_eoc = true;
iadc              533 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_reset(iadc);
iadc              539 drivers/iio/adc/qcom-spmi-iadc.c 	if (!iadc->poll_eoc) {
iadc              541 drivers/iio/adc/qcom-spmi-iadc.c 					"spmi-iadc", iadc);
iadc              547 drivers/iio/adc/qcom-spmi-iadc.c 		device_init_wakeup(iadc->dev, 1);
iadc              550 drivers/iio/adc/qcom-spmi-iadc.c 	ret = iadc_update_offset(iadc);