Re: [PATCH] Input: goodix - disable IRQs while suspended

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 10-01-18 15:14, Bastien Nocera wrote:
On Wed, 2018-01-10 at 12:34 +0100, Hans de Goede wrote:
We should not try to do any i2c transfers before the controller is
resumed (which happens before our resume method gets called).

So we need to disable our IRQ while suspended to enforce this. The
code paths for devices with GPIOs for the int and reset pins already
disable the IRQ the through goodix_free_irq().

This commit also disables the IRQ while suspended for devices without
GPIOs for the int and reset pins.

Do disable_irq() and enable_irq() require to be paired,

Yes.

and if so, are
goodix_suspend() and goodix_resume() guaranteed to be paired?

Yes I believe they are, many i2c drivers call disable / enable_irq
from there suspend/resume handler.

Other than that, looks good to me. Please add the name of the device(s)
you tested this on in the changelog and add your tested-by, to show
it's not a "compile-only check" kind of commit.

Ok, v2 with amended commit messages coming up.

Regards,

Hans


Cheers

Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
---
  drivers/input/touchscreen/goodix.c | 8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/input/touchscreen/goodix.c
b/drivers/input/touchscreen/goodix.c
index 69d0b8cbc71f..ecec8eb17f28 100644
--- a/drivers/input/touchscreen/goodix.c
+++ b/drivers/input/touchscreen/goodix.c
@@ -878,8 +878,10 @@ static int __maybe_unused goodix_suspend(struct
device *dev)
  	int error;
/* We need gpio pins to suspend/resume */
-	if (!ts->gpiod_int || !ts->gpiod_rst)
+	if (!ts->gpiod_int || !ts->gpiod_rst) {
+		disable_irq(client->irq);
  		return 0;
+	}
wait_for_completion(&ts->firmware_loading_complete); @@ -919,8 +921,10 @@ static int __maybe_unused goodix_resume(struct
device *dev)
  	struct goodix_ts_data *ts = i2c_get_clientdata(client);
  	int error;
- if (!ts->gpiod_int || !ts->gpiod_rst)
+	if (!ts->gpiod_int || !ts->gpiod_rst) {
+		enable_irq(client->irq);
  		return 0;
+	}
/*
  	 * Exit sleep mode by outputting HIGH level to INT pin
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux