Message ID | 20230207072540.27226-1-mika.westerberg@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | [RFC] i2c: core: Do not enable wakeup by default | expand |
> Okay good to know, then I think we can forget this patch.
Based on this comment, I marked the patch as "Rejected".
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index 087e480b624c..7046549bdae7 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -527,7 +527,7 @@ static int i2c_device_probe(struct device *dev) goto put_sync_adapter; } - device_init_wakeup(&client->dev, true); + device_init_wakeup(&client->dev, false); if (wakeirq > 0 && wakeirq != client->irq) status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
After commit b38f2d5d9615 ("i2c: acpi: Use ACPI wake capability bit to set wake_irq") the I2C core has been setting I2C_CLIENT_WAKE for ACPI devices if they announce to be wake capable in their device description. However, on certain systems where audio codec has been connected through I2C this causes system suspend to wake up immediately because power to the codec is turned off which pulls the interrupt line "low" triggering wake up. Possible reason why the interrupt is marked as wake capable is that some codecs apparently support "Wake on Voice" or similar functionality. In any case, I don't think we should be enabling wakeup by default on all I2C devices that are wake capable. According to device_init_wakeup() documentation most devices should leave it disabled, with exceptions on devices such as keyboards, power buttons etc. Userspace can enable wakeup as needed by writing to device "power/wakeup" attribute. Reported-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- Hi, Sending this as RFC because I'm not too familiar with the usage of I2C_CLIENT_WAKE and whether this is something that is expected behaviour in users of I2C devices. On ACPI side I think this is the correct thing to do at least. drivers/i2c/i2c-core-base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)