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

Commit 64d649a5 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "leds: qpnp-wled: add support for configuring sc debounce cycles"

parents b8ca532d 143ff04f
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -48,12 +48,12 @@ Optional properties for WLED:
- qcom,en-ext-pfet-sc-pro : Specify if external pfet short circuit protection is needed
- qcom,en-ext-pfet-sc-pro : Specify if external pfet short circuit protection is needed
- qcom,cons-sync-write-delay-us : Specify in 'us' the duration of delay between two consecutive writes to
- qcom,cons-sync-write-delay-us : Specify in 'us' the duration of delay between two consecutive writes to
				  SYNC register.
				  SYNC register.
- qcom,sc-deb-cycles	: debounce time for short circuit detection


Optional properties if 'qcom,disp-type-amoled' is mentioned in DT:
Optional properties if 'qcom,disp-type-amoled' is mentioned in DT:
- qcom,loop-ea-gm	: control the gm for gm stage in control loop. default is 3.
- qcom,loop-ea-gm	: control the gm for gm stage in control loop. default is 3.
- qcom,loop-comp-res-kohm	: control to select the compensation resistor in kohm. default is 320.
- qcom,loop-comp-res-kohm	: control to select the compensation resistor in kohm. default is 320.
- qcom,vref-psm-mv	: reference psm voltage in mv. default for amoled is 450.
- qcom,vref-psm-mv	: reference psm voltage in mv. default for amoled is 450.
- qcom,sc-deb-cycles	: debounce time for short circuit detection
- qcom,avdd-trim-steps-from-center : The number of steps to trim the OVP threshold voltage. The possible values can be between -7 to 8.
- qcom,avdd-trim-steps-from-center : The number of steps to trim the OVP threshold voltage. The possible values can be between -7 to 8.


Example:
Example:
+49 −33
Original line number Original line Diff line number Diff line
@@ -173,13 +173,14 @@
#define QPNP_WLED_MODULE_EN_SHIFT	7
#define QPNP_WLED_MODULE_EN_SHIFT	7
#define QPNP_WLED_DISP_SEL_MASK		0x7F
#define QPNP_WLED_DISP_SEL_MASK		0x7F
#define QPNP_WLED_DISP_SEL_SHIFT	7
#define QPNP_WLED_DISP_SEL_SHIFT	7
#define QPNP_WLED_EN_SC_MASK		0x7F
#define QPNP_WLED_EN_SC_DEB_CYCLES_MASK	0x79
#define QPNP_WLED_EN_DEB_CYCLES_MASK	0xF9
#define QPNP_WLED_EN_SC_SHIFT		7
#define QPNP_WLED_EN_SC_SHIFT		7
#define QPNP_WLED_SC_PRO_EN_DSCHGR	0x8
#define QPNP_WLED_SC_PRO_EN_DSCHGR	0x8
#define QPNP_WLED_SC_DEB_CYCLES_MIN     2
#define QPNP_WLED_SC_DEB_CYCLES_MIN     2
#define QPNP_WLED_SC_DEB_CYCLES_MAX     16
#define QPNP_WLED_SC_DEB_CYCLES_MAX     16
#define QPNP_WLED_SC_DEB_SUB            2
#define QPNP_WLED_SC_DEB_CYCLES_SUB     2
#define QPNP_WLED_SC_DEB_CYCLES_DFLT_AMOLED 4
#define QPNP_WLED_SC_DEB_CYCLES_DFLT    4
#define QPNP_WLED_EXT_FET_DTEST2	0x09
#define QPNP_WLED_EXT_FET_DTEST2	0x09


#define QPNP_WLED_SEC_ACCESS_REG(b)    (b + 0xD0)
#define QPNP_WLED_SEC_ACCESS_REG(b)    (b + 0xD0)
@@ -905,13 +906,6 @@ static int qpnp_wled_set_disp(struct qpnp_wled *wled, u16 base_addr)
		if (rc)
		if (rc)
			return rc;
			return rc;


		/* Configure the Soft start Ramp delay for AMOLED */
		reg = 0;
		rc = qpnp_wled_write_reg(wled, &reg,
				QPNP_WLED_SOFTSTART_RAMP_DLY(base_addr));
		if (rc)
			return rc;

		/* Configure the CTRL TEST4 register for AMOLED */
		/* Configure the CTRL TEST4 register for AMOLED */
		rc = qpnp_wled_read_reg(wled, &reg,
		rc = qpnp_wled_read_reg(wled, &reg,
				QPNP_WLED_TEST4_REG(wled->ctrl_base));
				QPNP_WLED_TEST4_REG(wled->ctrl_base));
@@ -1032,6 +1026,13 @@ static int qpnp_wled_config(struct qpnp_wled *wled)
			return rc;
			return rc;
	}
	}


	/* Configure the Soft start Ramp delay: for AMOLED - 0,for LCD - 2 */
	reg = (wled->disp_type_amoled) ? 0 : 2;
	rc = qpnp_wled_write_reg(wled, &reg,
			QPNP_WLED_SOFTSTART_RAMP_DLY(wled->ctrl_base));
	if (rc)
		return rc;

	/* Configure the MAX BOOST DUTY register */
	/* Configure the MAX BOOST DUTY register */
	if (wled->boost_duty_ns < QPNP_WLED_BOOST_DUTY_MIN_NS)
	if (wled->boost_duty_ns < QPNP_WLED_BOOST_DUTY_MIN_NS)
		wled->boost_duty_ns = QPNP_WLED_BOOST_DUTY_MIN_NS;
		wled->boost_duty_ns = QPNP_WLED_BOOST_DUTY_MIN_NS;
@@ -1329,21 +1330,18 @@ static int qpnp_wled_config(struct qpnp_wled *wled)
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
		if (rc < 0)
		if (rc < 0)
			return rc;
			return rc;
		reg &= QPNP_WLED_EN_SC_MASK;
		reg &= QPNP_WLED_EN_SC_DEB_CYCLES_MASK;
		reg |= 1 << QPNP_WLED_EN_SC_SHIFT;
		reg |= 1 << QPNP_WLED_EN_SC_SHIFT;


		if (wled->disp_type_amoled) {
		if (wled->sc_deb_cycles < QPNP_WLED_SC_DEB_CYCLES_MIN)
		if (wled->sc_deb_cycles < QPNP_WLED_SC_DEB_CYCLES_MIN)
				wled->sc_deb_cycles =
			wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_MIN;
						 QPNP_WLED_SC_DEB_CYCLES_MIN;
		else if (wled->sc_deb_cycles > QPNP_WLED_SC_DEB_CYCLES_MAX)
			else if (wled->sc_deb_cycles >
			wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_MAX;
						 QPNP_WLED_SC_DEB_CYCLES_MAX)
		temp = fls(wled->sc_deb_cycles) - QPNP_WLED_SC_DEB_CYCLES_SUB;
				wled->sc_deb_cycles =
		reg |= (temp << 1);
						 QPNP_WLED_SC_DEB_CYCLES_MAX;


			temp = fls(wled->sc_deb_cycles) - QPNP_WLED_SC_DEB_SUB;
		if (wled->disp_type_amoled)
			reg |= ((temp << 1) | QPNP_WLED_SC_PRO_EN_DSCHGR);
			reg |= QPNP_WLED_SC_PRO_EN_DSCHGR;
		}


		rc = qpnp_wled_write_reg(wled, &reg,
		rc = qpnp_wled_write_reg(wled, &reg,
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
@@ -1361,6 +1359,24 @@ static int qpnp_wled_config(struct qpnp_wled *wled)
			if (rc)
			if (rc)
				return rc;
				return rc;
		}
		}
	} else {
		rc = qpnp_wled_read_reg(wled, &reg,
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
		if (rc < 0)
			return rc;
		reg &= QPNP_WLED_EN_DEB_CYCLES_MASK;

		if (wled->sc_deb_cycles < QPNP_WLED_SC_DEB_CYCLES_MIN)
			wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_MIN;
		else if (wled->sc_deb_cycles > QPNP_WLED_SC_DEB_CYCLES_MAX)
			wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_MAX;
		temp = fls(wled->sc_deb_cycles) - QPNP_WLED_SC_DEB_CYCLES_SUB;
		reg |= (temp << 1);

		rc = qpnp_wled_write_reg(wled, &reg,
				QPNP_WLED_SC_PRO_REG(wled->ctrl_base));
		if (rc)
			return rc;
	}
	}


	return 0;
	return 0;
@@ -1426,26 +1442,26 @@ static int qpnp_wled_parse_dt(struct qpnp_wled *wled)
			return rc;
			return rc;
		}
		}


		wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_DFLT_AMOLED;
		wled->avdd_trim_steps_from_center = 0;
		rc = of_property_read_u32(spmi->dev.of_node,
		rc = of_property_read_u32(spmi->dev.of_node,
				"qcom,sc-deb-cycles", &temp_val);
				"qcom,avdd-trim-steps-from-center", &temp_val);
		if (!rc) {
		if (!rc) {
			wled->sc_deb_cycles = temp_val;
			wled->avdd_trim_steps_from_center = temp_val;
		} else if (rc != -EINVAL) {
		} else if (rc != -EINVAL) {
			dev_err(&spmi->dev, "Unable to read sc debounce cycles\n");
			dev_err(&spmi->dev, "Unable to read avdd trim steps from center value\n");
			return rc;
			return rc;
		}
		}
	}


		wled->avdd_trim_steps_from_center = 0;
	wled->sc_deb_cycles = QPNP_WLED_SC_DEB_CYCLES_DFLT;
	rc = of_property_read_u32(spmi->dev.of_node,
	rc = of_property_read_u32(spmi->dev.of_node,
				"qcom,avdd-trim-steps-from-center", &temp_val);
			"qcom,sc-deb-cycles", &temp_val);
	if (!rc) {
	if (!rc) {
			wled->avdd_trim_steps_from_center = temp_val;
		wled->sc_deb_cycles = temp_val;
	} else if (rc != -EINVAL) {
	} else if (rc != -EINVAL) {
			dev_err(&spmi->dev, "Unable to read avdd trim steps from center value\n");
		dev_err(&spmi->dev, "Unable to read sc debounce cycles\n");
		return rc;
		return rc;
	}
	}
	}


	wled->fdbk_op = QPNP_WLED_FDBK_AUTO;
	wled->fdbk_op = QPNP_WLED_FDBK_AUTO;
	rc = of_property_read_string(spmi->dev.of_node,
	rc = of_property_read_string(spmi->dev.of_node,