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

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

Merge "Revert "input: misc: speed up suspend and resume for QTC800S panel""

parents b3b87949 4987db29
Loading
Loading
Loading
Loading
+48 −112
Original line number Diff line number Diff line
@@ -98,10 +98,9 @@ static struct hbtp_data *hbtp;
static struct kobject *sensor_kobject;

#if defined(CONFIG_FB)
static int hbtp_fb_early_suspend(struct hbtp_data *ts);
static int hbtp_fb_suspend(struct hbtp_data *ts);
static int hbtp_fb_early_resume(struct hbtp_data *ts);
static int hbtp_fb_revert_resume(struct hbtp_data *ts);
static int hbtp_fb_resume(struct hbtp_data *ts);
#endif

#if defined(CONFIG_FB)
@@ -146,7 +145,6 @@ static int fb_notifier_callback(struct notifier_block *self,
					lcd_state <= FB_BLANK_NORMAL) {
				pr_debug("%s: receives EARLY_BLANK:POWERDOWN\n",
					__func__);
				hbtp_fb_early_suspend(hbtp_data);
			} else {
				pr_debug("%s: receives EARLY_BLANK:%d in %d state\n",
					__func__, blank, lcd_state);
@@ -155,12 +153,10 @@ static int fb_notifier_callback(struct notifier_block *self,
			if (blank <= FB_BLANK_NORMAL) {
				pr_debug("%s: receives R_EARLY_BALNK:UNBLANK\n",
					__func__);
				hbtp_fb_early_suspend(hbtp_data);
				hbtp_fb_suspend(hbtp_data);
			} else if (blank == FB_BLANK_POWERDOWN) {
				pr_debug("%s: receives R_EARLY_BALNK:POWERDOWN\n",
					__func__);
				hbtp_fb_revert_resume(hbtp_data);
			} else {
				pr_debug("%s: receives R_EARLY_BALNK:%d in %d state\n",
					__func__, blank, lcd_state);
@@ -179,6 +175,7 @@ static int fb_notifier_callback(struct notifier_block *self,
		} else if (blank <= FB_BLANK_NORMAL &&
				lcd_state == FB_BLANK_POWERDOWN) {
			pr_debug("%s: receives BLANK:UNBLANK\n", __func__);
			hbtp_fb_resume(hbtp_data);
		} else {
			pr_debug("%s: receives BLANK:%d in %d state\n",
				__func__, blank, lcd_state);
@@ -1195,43 +1192,6 @@ error:
	return rc;
}

static int hbtp_fb_early_suspend(struct hbtp_data *ts)
{
	int rc = 0;
	char *envp[2] = {HBTP_EVENT_TYPE_DISPLAY, NULL};

	mutex_lock(&hbtp->mutex);
	if (ts->pdev && (!ts->power_sync_enabled)) {
		pr_debug("%s: power_sync is not enabled\n", __func__);

		if (ts->input_dev) {
			kobject_uevent_env(&ts->input_dev->dev.kobj,
					KOBJ_OFFLINE, envp);

			if (ts->power_sig_enabled) {
				pr_debug("%s: power_sig is enabled, wait for signal\n",
						__func__);
				mutex_unlock(&hbtp->mutex);
				rc = wait_for_completion_interruptible(
						&hbtp->power_suspend_sig);
				if (rc != 0) {
					pr_err("%s: wait for early suspend is interrupted\n",
							__func__);
				}
				mutex_lock(&hbtp->mutex);
				pr_debug("%s: Wait is done for early suspend\n",
						__func__);
			} else {
				pr_debug("%s: power_sig is NOT enabled",
						__func__);
			}
		}
	}

	mutex_unlock(&hbtp->mutex);
	return rc;
}

static int hbtp_fb_suspend(struct hbtp_data *ts)
{
	int rc;
@@ -1257,6 +1217,7 @@ static int hbtp_fb_suspend(struct hbtp_data *ts)
			goto err_power_disable;
		}
		ts->power_suspended = true;
	}

	if (ts->input_dev) {
		kobject_uevent_env(&ts->input_dev->dev.kobj,
@@ -1273,12 +1234,9 @@ static int hbtp_fb_suspend(struct hbtp_data *ts)
					__func__);
			}
			mutex_lock(&hbtp->mutex);
				pr_debug("%s: Wait is done for suspend\n",
						__func__);
			pr_debug("%s: Wait is done for suspend\n", __func__);
		} else {
				pr_debug("%s: power_sig is NOT enabled",
						__func__);
			}
			pr_debug("%s: power_sig is NOT enabled", __func__);
		}
	}

@@ -1320,16 +1278,7 @@ static int hbtp_fb_early_resume(struct hbtp_data *ts)
			goto err_pin_enable;
		}

		if (ts->fb_resume_seq_delay) {
			usleep_range(ts->fb_resume_seq_delay,
					ts->fb_resume_seq_delay +
					HBTP_HOLD_DURATION_US);
			pr_debug("%s: fb_resume_seq_delay = %u\n",
					__func__, ts->fb_resume_seq_delay);
		}

		ts->power_suspended = false;
	}

		if (ts->input_dev) {

@@ -1352,8 +1301,16 @@ static int hbtp_fb_early_resume(struct hbtp_data *ts)
				pr_debug("%s: power_sig is NOT enabled\n",
					__func__);
			}
	}

			if (ts->fb_resume_seq_delay) {
				usleep_range(ts->fb_resume_seq_delay,
					ts->fb_resume_seq_delay +
					HBTP_HOLD_DURATION_US);
				pr_err("%s: fb_resume_seq_delay = %u\n",
					__func__, ts->fb_resume_seq_delay);
			}
		}
	}
	mutex_unlock(&hbtp->mutex);
	return 0;

@@ -1364,41 +1321,20 @@ err_power_on:
	return rc;
}

static int hbtp_fb_revert_resume(struct hbtp_data *ts)
static int hbtp_fb_resume(struct hbtp_data *ts)
{
	char *envp[2] = {HBTP_EVENT_TYPE_DISPLAY, NULL};
	int rc = 0;

	mutex_lock(&hbtp->mutex);

	pr_debug("%s: hbtp_fb_revert_resume\n", __func__);

	if (ts->pdev && (!ts->power_sync_enabled)) {
		pr_debug("%s: power_sync is not enabled\n", __func__);

	if (!ts->power_sync_enabled) {
		pr_debug("%s: power_sync is disabled, send uevent\n", __func__);
		if (ts->input_dev) {
			kobject_uevent_env(&ts->input_dev->dev.kobj,
				KOBJ_ONLINE, envp);

			if (ts->power_sig_enabled) {
				pr_debug("%s: power_sig is enabled, wait for signal\n",
						__func__);
				mutex_unlock(&hbtp->mutex);
				rc = wait_for_completion_interruptible(
						&hbtp->power_resume_sig);
				if (rc != 0) {
					pr_warn("%s: wait for revert resume is interrupted\n",
							__func__);
				}
				pr_debug("%s: wait is done\n", __func__);
			} else {
				pr_debug("%s: power_sig is NOT enabled\n",
						__func__);
			}
		}
	}

	return rc;
	mutex_unlock(&hbtp->mutex);
	return 0;
}

static int hbtp_pdev_probe(struct platform_device *pdev)