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

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

Merge "leds: leds-qpnp: Added in delay for flash LED operation"

parents 53d70cab 768738ef
Loading
Loading
Loading
Loading
+28 −33
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/workqueue.h>
#include <linux/delay.h>
#include <linux/regulator/consumer.h>
#include <linux/delay.h>

#define WLED_MOD_EN_REG(base, n)	(base + 0x60 + n*0x10)
#define WLED_IDAC_DLY_REG(base, n)	(WLED_MOD_EN_REG(base, n) + 0x01)
@@ -102,6 +103,7 @@
#define FLASH_WATCHDOG_TMR(base)	(base + 0x49)
#define FLASH_FAULT_DETECT(base)	(base + 0x51)
#define FLASH_PERIPHERAL_SUBTYPE(base)	(base + 0x05)
#define FLASH_CURRENT_RAMP(base)	(base + 0x54)

#define FLASH_MAX_LEVEL			0x4F
#define TORCH_MAX_LEVEL			0x0F
@@ -120,6 +122,7 @@
#define FLASH_HW_VREG_OK		0x40
#define FLASH_VREG_MASK			0xC0
#define FLASH_STARTUP_DLY_MASK		0x02
#define FLASH_CURRENT_RAMP_MASK		0xBF

#define FLASH_ENABLE_ALL		0xE0
#define FLASH_ENABLE_MODULE		0x80
@@ -131,6 +134,7 @@
#define FLASH_INIT_MASK			0xE0
#define	FLASH_SELFCHECK_ENABLE		0x80
#define FLASH_WATCHDOG_MASK		0x1F
#define FLASH_RAMP_STEP_27US		0xBF

#define FLASH_STROBE_SW			0xC0
#define FLASH_STROBE_HW			0x04
@@ -150,6 +154,9 @@
#define FLASH_SUBTYPE_DUAL		0x01
#define FLASH_SUBTYPE_SINGLE		0x02

#define FLASH_RAMP_UP_DELAY_US		1000
#define FLASH_RAMP_DN_DELAY_US		2160

#define LED_TRIGGER_DEFAULT		"none"

#define RGB_LED_SRC_SEL(base)		(base + 0x45)
@@ -930,22 +937,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led)
					rc);
					goto error_flash_set;
				}

				/*
				 * Write 0x80 to MODULE_ENABLE before writing
				 * 0xE0 in order to avoid a hardware bug caused
				 * by register value going from 0x00 to 0xE0.
				 */
				rc = qpnp_led_masked_write(led,
					FLASH_ENABLE_CONTROL(led->base),
					FLASH_ENABLE_MODULE_MASK,
					FLASH_ENABLE_MODULE);
				if (rc) {
					dev_err(&led->spmi_dev->dev,
						"Enable reg write failed(%d)\n",
						rc);
					return rc;
				}
			}

			qpnp_led_masked_write(led, FLASH_MAX_CURR(led->base),
@@ -1077,22 +1068,6 @@ static int qpnp_flash_set(struct qpnp_led_data *led)
				goto error_flash_set;
			}

			/*
			 * Write 0x80 to MODULE_ENABLE before writing
			 * 0xE0 in order to avoid a hardware bug caused
			 * by register value going from 0x00 to 0xE0.
			 */
			rc = qpnp_led_masked_write(led,
				FLASH_ENABLE_CONTROL(led->base),
				FLASH_ENABLE_MODULE_MASK,
				FLASH_ENABLE_MODULE);
			if (rc) {
				dev_err(&led->spmi_dev->dev,
					"Enable reg write failed(%d)\n",
					rc);
				goto error_flash_set;
			}

			rc = qpnp_led_masked_write(led,
				led->flash_cfg->current_addr,
				FLASH_CURRENT_MASK,
@@ -1113,6 +1088,11 @@ static int qpnp_flash_set(struct qpnp_led_data *led)
				goto error_flash_set;
			}

			/*
			 * Add 1ms delay for bharger enter stable state
			 */
			usleep(FLASH_RAMP_UP_DELAY_US);

			if (!led->flash_cfg->strobe_type) {
				rc = qpnp_led_masked_write(led,
					FLASH_LED_STROBE_CTRL(led->base),
@@ -1174,6 +1154,12 @@ static int qpnp_flash_set(struct qpnp_led_data *led)
				}
			}
		} else {
			/*
			 * Disable module after ramp down complete for stable
			 * behavior
			 */
			usleep(FLASH_RAMP_DN_DELAY_US);

			rc = qpnp_led_masked_write(led,
				FLASH_ENABLE_CONTROL(led->base),
				led->flash_cfg->enable_module &
@@ -2258,7 +2244,7 @@ static int qpnp_flash_init(struct qpnp_led_data *led)

	/* Disable flash LED module */
	rc = qpnp_led_masked_write(led, FLASH_ENABLE_CONTROL(led->base),
		FLASH_ENABLE_MODULE_MASK, FLASH_DISABLE_ALL);
		FLASH_ENABLE_MASK, FLASH_DISABLE_ALL);
	if (rc) {
		dev_err(&led->spmi_dev->dev,
			"Enable reg write failed(%d)\n", rc);
@@ -2327,6 +2313,15 @@ static int qpnp_flash_init(struct qpnp_led_data *led)
		return rc;
	}

	/* Set current ramp */
	rc = qpnp_led_masked_write(led, FLASH_CURRENT_RAMP(led->base),
		FLASH_CURRENT_RAMP_MASK, FLASH_RAMP_STEP_27US);
	if (rc) {
		dev_err(&led->spmi_dev->dev,
			"Current ramp reg write failed(%d)\n", rc);
		return rc;
	}

	led->flash_cfg->strobe_type = 0;

	/* dump flash registers */