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

Commit e6574109 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-flash-v2: Add support for configuring hardware mitigation"

parents 911b4fec 889d937b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -50,6 +50,10 @@ Optional properties:
				  Default value is 2.
- qcom,lmh-level		: Optional property to configure flash current preemptive mitigation.
				  Accepted values are 0, 1, and 3. Default value is 0.
- qcom,iled-thrsh-ma		: Optional property to configure the led current threshold at which HW
				  preemptive mitigation is triggered. Unit is mA. Default value is 1000.
				  Accepted values are in the range 0 - 3100, with steps of 100.
				  0 disables autonomous HW mitigation.
- qcom,thermal-derate-en	: Boolean property to enable flash current thermal mitigation.
- qcom,thermal-derate-current	: Array of currrent limits for thermal mitigation. Required if
				  qcom,thermal-derate-en is specified. Unit is mA. Format is
+28 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
#define	FLASH_LED_REG_THERMAL_THRSH3(base)	(base + 0x58)
#define	FLASH_LED_REG_VPH_DROOP_THRESHOLD(base)	(base + 0x61)
#define	FLASH_LED_REG_VPH_DROOP_DEBOUNCE(base)	(base + 0x62)
#define	FLASH_LED_REG_ILED_GRT_THRSH(base)	(base + 0x67)
#define	FLASH_LED_REG_MITIGATION_SEL(base)	(base + 0x6E)
#define	FLASH_LED_REG_MITIGATION_SW(base)	(base + 0x6F)
#define	FLASH_LED_REG_LMH_LEVEL(base)		(base + 0x70)
@@ -63,6 +64,7 @@
#define	FLASH_LED_CURRENT_DERATE_EN_MASK	GENMASK(2, 0)
#define	FLASH_LED_VPH_DROOP_DEBOUNCE_MASK	GENMASK(1, 0)
#define	FLASH_LED_LMH_MITIGATION_SEL_MASK	GENMASK(1, 0)
#define	FLASH_LED_ILED_GRT_THRSH_MASK		GENMASK(5, 0)
#define	FLASH_LED_LMH_LEVEL_MASK		GENMASK(1, 0)
#define	FLASH_LED_VPH_DROOP_HYSTERESIS_MASK	GENMASK(5, 4)
#define	FLASH_LED_VPH_DROOP_THRESHOLD_MASK	GENMASK(2, 0)
@@ -78,6 +80,7 @@
#define	VPH_DROOP_HYST_MV_TO_VAL(val_mv)	(val_mv / 25)
#define	VPH_DROOP_THRESH_MV_TO_VAL(val_mv)	((val_mv / 100) - 25)
#define	VPH_DROOP_THRESH_VAL_TO_UV(val)		((val + 25) * 100000)
#define	MITIGATION_THRSH_MA_TO_VAL(val_ma)	(val_ma / 100)

#define	FLASH_LED_ISC_WARMUP_DELAY_SHIFT	6
#define	FLASH_LED_WARMUP_DELAY_DEFAULT		2
@@ -101,6 +104,8 @@
#define	FLASH_LED_LMH_MITIGATION_DISABLE	0
#define	FLASH_LED_LMH_MITIGATION_SEL_DEFAULT	2
#define	FLASH_LED_LMH_MITIGATION_SEL_MAX	2
#define	FLASH_LED_MITIGATION_THRSH_DEFAULT	0xA
#define	FLASH_LED_MITIGATION_THRSH_MAX		0x1F
#define	FLASH_LED_LMH_OCV_THRESH_DEFAULT_UV	3700000
#define	FLASH_LED_LMH_RBATT_THRESH_DEFAULT_UOHM	400000
#define	FLASH_LED_IRES_BASE			3
@@ -200,6 +205,7 @@ struct flash_led_platform_data {
	u8	vph_droop_debounce;
	u8	lmh_mitigation_sel;
	u8	lmh_level;
	u8	iled_thrsh_val;
	u8	hw_strobe_option;
	bool	hdrm_auto_mode_en;
	bool	thermal_derate_en;
@@ -358,6 +364,13 @@ static int qpnp_flash_led_init_settings(struct qpnp_flash_led *led)
	if (rc < 0)
		return rc;

	rc = qpnp_flash_led_masked_write(led,
			FLASH_LED_REG_ILED_GRT_THRSH(led->base),
			FLASH_LED_ILED_GRT_THRSH_MASK,
			led->pdata->iled_thrsh_val);
	if (rc < 0)
		return rc;

	return 0;
}

@@ -1664,6 +1677,21 @@ static int qpnp_flash_led_parse_common_dt(struct qpnp_flash_led *led,
		return -EINVAL;
	}

	led->pdata->iled_thrsh_val = FLASH_LED_MITIGATION_THRSH_DEFAULT;
	rc = of_property_read_u32(node, "qcom,iled-thrsh-ma", &val);
	if (!rc) {
		led->pdata->iled_thrsh_val = MITIGATION_THRSH_MA_TO_VAL(val);
	} else if (rc != -EINVAL) {
		dev_err(&led->pdev->dev, "Unable to parse iled_thrsh_val, rc=%d\n",
				rc);
		return rc;
	}

	if (led->pdata->iled_thrsh_val > FLASH_LED_MITIGATION_THRSH_MAX) {
		dev_err(&led->pdev->dev, "Invalid iled_thrsh_val specified\n");
		return -EINVAL;
	}

	led->pdata->all_ramp_up_done_irq =
		of_irq_get_byname(node, "all-ramp-up-done-irq");
	if (led->pdata->all_ramp_up_done_irq < 0)