Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit add0879f authored by Dipen Parmar's avatar Dipen Parmar
Browse files

hwmon: qpnp-adc: Add check for wrong calib data



Add check when adc calibration data are similar
for both reference channels and return error to
avoid division by zero errors.

Change-Id: Id884eb79f606fb7361fc47a96e7a6f009a113869
Signed-off-by: default avatarDipen Parmar <dipenp@codeaurora.org>
parent bd52ce2e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -528,7 +528,8 @@ int32_t qpnp_adc_scale_pmic_therm(struct qpnp_vadc_chip *vadc,

	if (!chan_properties || !chan_properties->offset_gain_numerator ||
		!chan_properties->offset_gain_denominator || !adc_properties
		|| !adc_chan_result)
		|| !adc_chan_result
		|| !chan_properties->adc_graph[CALIB_ABSOLUTE].dy)
		return -EINVAL;

	pmic_voltage = (adc_code -
+5 −0
Original line number Diff line number Diff line
@@ -1060,6 +1060,11 @@ int32_t qpnp_iadc_read(struct qpnp_iadc_chip *iadc,
	if (qpnp_iadc_is_valid(iadc) < 0)
		return -EPROBE_DEFER;

	if ((iadc->adc->calib.gain_raw - iadc->adc->calib.offset_raw) == 0) {
		pr_err("raw offset errors! run iadc calibration again\n");
		return -EINVAL;
	}

	rc = qpnp_check_pmic_temp(iadc);
	if (rc) {
		pr_err("Error checking pmic therm temp\n");
+16 −1
Original line number Diff line number Diff line
@@ -854,7 +854,14 @@ static int32_t qpnp_vadc_calib_device(struct qpnp_vadc_chip *vadc)
	}

	pr_debug("absolute reference raw: 625mV:0x%x 1.25V:0x%x\n",
				calib_read_1, calib_read_2);
				calib_read_2, calib_read_1);

	if (calib_read_1 == calib_read_2) {
		pr_err("absolute reference raw: 625mV:0x%x 1.25V:0x%x\n",
				calib_read_2, calib_read_1);
		rc = -EINVAL;
		goto calib_fail;
	}

	vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_ABSOLUTE].dy =
					(calib_read_1 - calib_read_2);
@@ -934,6 +941,14 @@ static int32_t qpnp_vadc_calib_device(struct qpnp_vadc_chip *vadc)

	pr_debug("ratiometric reference raw: VDD:0x%x GND:0x%x\n",
				calib_read_1, calib_read_2);

	if (calib_read_1 == calib_read_2) {
		pr_err("ratiometric reference raw: VDD:0x%x GND:0x%x\n",
				calib_read_1, calib_read_2);
		rc = -EINVAL;
		goto calib_fail;
	}

	vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].dy =
					(calib_read_1 - calib_read_2);
	vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].dx =