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

Commit a502e861 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-flash: change to dynamic LED trigger"

parents 3bc1597a 3b00fbf7
Loading
Loading
Loading
Loading
+144 −118
Original line number Diff line number Diff line
@@ -795,21 +795,8 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led,
				struct flash_node_data *flash_node)
{
	union power_supply_propval psy_prop;
	int rc;
	u8 val, tmp;
	int rc, i;

	rc = spmi_ext_register_readl(led->spmi_dev->ctrl,
				led->spmi_dev->sid,
				FLASH_LED_STROBE_CTRL(led->base),
				&val, 1);
	if (rc) {
		dev_err(&led->spmi_dev->dev,
				"Unable to read module enable reg\n");
		return -EINVAL;
	}

	tmp = ~flash_node->trigger & val;
	if (!tmp) {
	rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_LED_UNLOCK_SECURE(led->base),
			FLASH_SECURE_MASK, FLASH_UNLOCK_SECURE);
@@ -828,6 +815,30 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led,
		return -EINVAL;
	}

	if (led->pdata->hdrm_sns_ch0_en) {
		rc = qpnp_led_masked_write(led->spmi_dev,
				FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
				FLASH_LED_HDRM_SNS_ENABLE_MASK,
				FLASH_LED_HDRM_SNS_DISABLE);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
				"Headroom sense disable failed\n");
			return rc;
		}
	}

	if (led->pdata->hdrm_sns_ch1_en) {
		rc = qpnp_led_masked_write(led->spmi_dev,
				FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
				FLASH_LED_HDRM_SNS_ENABLE_MASK,
				FLASH_LED_HDRM_SNS_DISABLE);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
				"Headroom sense disable failed\n");
			return rc;
		}
	}

	rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_MODULE_ENABLE_CTRL(led->base),
			FLASH_MODULE_ENABLE_MASK,
@@ -883,40 +894,9 @@ static int qpnp_flash_led_module_disable(struct qpnp_flash_led *led,
			return -EINVAL;
		}
	}
	} else {
		rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_MODULE_ENABLE_CTRL(led->base),
			FLASH_MODULE_ENABLE_MASK,
			FLASH_LED_MODULE_CTRL_DEFAULT);
		if (rc) {
			dev_err(&led->spmi_dev->dev, "Module disable failed\n");
			return -EINVAL;
		}
	}

	if (led->pdata->hdrm_sns_ch0_en) {
		rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
			FLASH_LED_HDRM_SNS_ENABLE_MASK,
			FLASH_LED_HDRM_SNS_DISABLE);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
			return rc;
		}
	}

	if (led->pdata->hdrm_sns_ch1_en) {
		rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
			FLASH_LED_HDRM_SNS_ENABLE_MASK,
			FLASH_LED_HDRM_SNS_DISABLE);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
			return rc;
		}
	}
	for (i = 0; i < led->num_leds; i++)
		led->flash_node[i].flash_on = false;

	return 0;
}
@@ -1038,7 +1018,10 @@ static void qpnp_flash_led_work(struct work_struct *work)
		}
		if (led->flash_node[led->num_leds - 1].id ==
							FLASH_LED_SWITCH) {
			if (led->flash_node[2].flash_on) {
			flash_node->trigger = 0;
			if (led->flash_node[2].flash_on)
				flash_node->trigger |= FLASH_LED0_TRIGGER;

			val = (u8)(led->flash_node[2].prgm_current *
						FLASH_TORCH_MAX_LEVEL
					/ led->flash_node[2].max_current);
@@ -1050,9 +1033,10 @@ static void qpnp_flash_led_work(struct work_struct *work)
					"Torch reg write failed\n");
				goto exit_flash_led_work;
			}
			}

			if (led->flash_node[3].flash_on) {
			if (led->flash_node[3].flash_on)
				flash_node->trigger |= FLASH_LED1_TRIGGER;

			val = (u8)(flash_node[3].prgm_current *
						FLASH_TORCH_MAX_LEVEL
					/ led->flash_node[3].max_current);
@@ -1063,8 +1047,6 @@ static void qpnp_flash_led_work(struct work_struct *work)
				dev_err(&led->spmi_dev->dev,
					"Torch reg write failed\n");
				goto exit_flash_led_work;

				}
			}
		} else {
			val = (u8)(flash_node->prgm_current *
@@ -1109,8 +1091,8 @@ static void qpnp_flash_led_work(struct work_struct *work)
			goto exit_flash_led_work;
		}

		if (led->flash_node[2].flash_on) {
		if (led->pdata->hdrm_sns_ch0_en) {
			if (led->flash_node[2].flash_on) {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
@@ -1120,11 +1102,21 @@ static void qpnp_flash_led_work(struct work_struct *work)
					"Headroom sense enable failed\n");
					goto exit_flash_led_work;
				}
			} else {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
					FLASH_LED_HDRM_SNS_DISABLE);
				if (rc) {
					dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
					goto exit_flash_led_work;
				}
			}
		}

		if (led->flash_node[3].flash_on) {
		if (led->pdata->hdrm_sns_ch1_en) {
			if (led->flash_node[3].flash_on) {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
@@ -1134,12 +1126,22 @@ static void qpnp_flash_led_work(struct work_struct *work)
					"Headroom sense enable failed\n");
					goto exit_flash_led_work;
				}
			} else {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
					FLASH_LED_HDRM_SNS_DISABLE);
				if (rc) {
					dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
					goto exit_flash_led_work;
				}
			}
		}

		rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_LED_STROBE_CTRL(led->base),
			flash_node->trigger,
			FLASH_STROBE_MASK,
			flash_node->trigger);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
@@ -1198,6 +1200,7 @@ static void qpnp_flash_led_work(struct work_struct *work)

		if (led->flash_node[led->num_leds - 1].id ==
							FLASH_LED_SWITCH) {
			flash_node->trigger = 0;
			if (led->flash_node[0].flash_on &&
					led->flash_node[1].flash_on) {
				if (max_curr_avail_ma <
@@ -1211,23 +1214,28 @@ static void qpnp_flash_led_work(struct work_struct *work)
							* max_curr_avail_ma /
						flash_node->prgm_current;
				}
				flash_node->trigger = FLASH_LED0_TRIGGER |
							FLASH_LED1_TRIGGER;
			} else {
				if (led->flash_node[0].flash_on) {
				if (led->flash_node[0].flash_on)
					flash_node->trigger |=
							FLASH_LED0_TRIGGER;

				led->flash_node[0].prgm_current
					= (max_curr_avail_ma <
					led->flash_node[0].prgm_current)
					? max_curr_avail_ma :
					led->flash_node[0].prgm_current;
				}

				if (led->flash_node[1].flash_on) {
				if (led->flash_node[1].flash_on)
					flash_node->trigger |=
							FLASH_LED1_TRIGGER;
				led->flash_node[1].prgm_current
					= (max_curr_avail_ma <
					led->flash_node[1].prgm_current)
					? max_curr_avail_ma :
					led->flash_node[1].prgm_current;
			}
			}

			val = (u8)(led->flash_node[0].prgm_current *
						FLASH_MAX_LEVEL /
@@ -1322,8 +1330,8 @@ static void qpnp_flash_led_work(struct work_struct *work)
						FLASH_RAMP_UP_DELAY_US_MAX);
		}

		if (led->flash_node[0].flash_on) {
		if (led->pdata->hdrm_sns_ch0_en) {
			if (led->flash_node[0].flash_on) {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
@@ -1333,11 +1341,21 @@ static void qpnp_flash_led_work(struct work_struct *work)
					"Headroom sense enable failed\n");
					goto exit_flash_led_work;
				}
			} else {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL0(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
					FLASH_LED_HDRM_SNS_DISABLE);
				if (rc) {
					dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
					goto exit_flash_led_work;
				}
			}
		}

		if (led->flash_node[1].flash_on) {
		if (led->pdata->hdrm_sns_ch1_en) {
			if (led->flash_node[1].flash_on) {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
@@ -1347,12 +1365,22 @@ static void qpnp_flash_led_work(struct work_struct *work)
					"Headroom sense enable failed\n");
					goto exit_flash_led_work;
				}
			} else {
				rc = qpnp_led_masked_write(led->spmi_dev,
					FLASH_HDRM_SNS_ENABLE_CTRL1(led->base),
					FLASH_LED_HDRM_SNS_ENABLE_MASK,
					FLASH_LED_HDRM_SNS_DISABLE);
				if (rc) {
					dev_err(&led->spmi_dev->dev,
					"Headroom sense disable failed\n");
					goto exit_flash_led_work;
				}
			}
		}

		rc = qpnp_led_masked_write(led->spmi_dev,
			FLASH_LED_STROBE_CTRL(led->base),
			flash_node->trigger,
			FLASH_STROBE_MASK,
			flash_node->trigger);
		if (rc) {
			dev_err(&led->spmi_dev->dev,
@@ -1450,8 +1478,6 @@ static void qpnp_flash_led_brightness_set(struct led_classdev *led_cdev,
				flash_node->prgm_current =
					led->flash_node[0].prgm_current +
					led->flash_node[1].prgm_current;
			flash_node->trigger = FLASH_LED0_TRIGGER |
						 FLASH_LED1_TRIGGER;
			schedule_work(&flash_node->work);
			return;
		}