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

Commit 03cb3314 authored by Sandeep Panda's avatar Sandeep Panda
Browse files

drm/msm/dsi-staging: fix spurious irq status for TE signal



Currently in dsi driver relies on vsync gpio irq to periodically
check if panel is sending TE signal properly or not. But due to
lazy disabling of edge triggered irqs sometimes when driver enables
back the irq line, it might end up getting a previously pending
irq, which will give false indication of panel sending TE even if
at present panel has stopped sending TE signal. So do not perform
lazy disabling of TE irq.

Change-Id: Iabd9d76aad7d50003cd8af7810794b2e8ecbbbc2
Signed-off-by: default avatarSandeep Panda <spanda@codeaurora.org>
parent abe1cb8f
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -416,6 +416,7 @@ static void dsi_display_register_te_irq(struct dsi_display *display)
	int rc = 0;
	struct platform_device *pdev;
	struct device *dev;
	unsigned int te_irq;

	pdev = display->pdev;
	if (!pdev) {
@@ -435,16 +436,21 @@ static void dsi_display_register_te_irq(struct dsi_display *display)
	}

	init_completion(&display->esd_te_gate);
	te_irq = gpio_to_irq(display->disp_te_gpio);

	rc = devm_request_irq(dev, gpio_to_irq(display->disp_te_gpio),
			dsi_display_panel_te_irq_handler, IRQF_TRIGGER_FALLING,
	/* Avoid deferred spurious irqs with disable_irq() */
	irq_set_status_flags(te_irq, IRQ_DISABLE_UNLAZY);

	rc = devm_request_irq(dev, te_irq, dsi_display_panel_te_irq_handler,
			      IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
			      "TE_GPIO", display);
	if (rc) {
		pr_err("TE request_irq failed for ESD rc:%d\n", rc);
		irq_clear_status_flags(te_irq, IRQ_DISABLE_UNLAZY);
		goto error;
	}

	disable_irq(gpio_to_irq(display->disp_te_gpio));
	disable_irq(te_irq);
	display->is_te_irq_enabled = false;

	return;