Restoring configuration registers is only needed when we hand control to the firmware. This is never the case with runtime power management. The device will autosuspend whenever not used, so avoid useless register writes by defining suspend/resume only, and not runtime_suspend/runtime_resume. Signed-off-by: Jean Delvare <jdelvare@xxxxxxx> Cc: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx> Cc: Wolfram Sang <wsa@xxxxxxxxxxxxx> --- I am told this could be further optimized, but I'm not completely sure how, and also not sure it's worth the extra code, so let's keep it simple for now. Optimizations can be added later. Jarkko, you specifically mentioned runtime power management in commit 2ee73c484dc4 where you made use of UNIVERSAL_DEV_PM_OPS. Did you have anything specific in mind? I can't think of anything the i2c-i801 driver should do for runtime power management. drivers/i2c/busses/i2c-i801.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) --- linux-4.15.orig/drivers/i2c/busses/i2c-i801.c 2018-04-20 07:34:45.809535948 +0200 +++ linux-4.15/drivers/i2c/busses/i2c-i801.c 2018-04-25 11:49:29.172069486 +0200 @@ -1730,8 +1730,7 @@ static int i801_resume(struct device *de } #endif -static UNIVERSAL_DEV_PM_OPS(i801_pm_ops, i801_suspend, - i801_resume, NULL); +static SIMPLE_DEV_PM_OPS(i801_pm_ops, i801_suspend, i801_resume); static struct pci_driver i801_driver = { .name = "i801_smbus", -- Jean Delvare SUSE L3 Support