i2c: sh_mobile: Mark adapter suspended during suspend
When a driver tries to send an I2C message while the adapter is suspended, this typically fails with: i2c-sh_mobile e60b0000.i2c: Transfer request timed out Avoid accessing the adapter while it is suspended by marking it suspended during suspend. This allows the I2C core to catch this, and print a warning: WARNING: CPU: 1 PID: 13 at drivers/i2c/i2c-core.h:54 __i2c_transfer+0x4a4/0x4e4 i2c i2c-6: Transfer while suspended Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Wolfram Sang <wsa@kernel.org>
This commit is contained in:
Родитель
04fd6f0a9e
Коммит
e8a61e5a7e
|
@ -956,10 +956,38 @@ static int sh_mobile_i2c_remove(struct platform_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int sh_mobile_i2c_suspend(struct device *dev)
|
||||
{
|
||||
struct sh_mobile_i2c_data *pd = dev_get_drvdata(dev);
|
||||
|
||||
i2c_mark_adapter_suspended(&pd->adap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh_mobile_i2c_resume(struct device *dev)
|
||||
{
|
||||
struct sh_mobile_i2c_data *pd = dev_get_drvdata(dev);
|
||||
|
||||
i2c_mark_adapter_resumed(&pd->adap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops sh_mobile_i2c_pm_ops = {
|
||||
SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(sh_mobile_i2c_suspend,
|
||||
sh_mobile_i2c_resume)
|
||||
};
|
||||
|
||||
#define DEV_PM_OPS (&sh_mobile_i2c_pm_ops)
|
||||
#else
|
||||
#define DEV_PM_OPS NULL
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
static struct platform_driver sh_mobile_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "i2c-sh_mobile",
|
||||
.of_match_table = sh_mobile_i2c_dt_ids,
|
||||
.pm = DEV_PM_OPS,
|
||||
},
|
||||
.probe = sh_mobile_i2c_probe,
|
||||
.remove = sh_mobile_i2c_remove,
|
||||
|
|
Загрузка…
Ссылка в новой задаче