@@ -961,6 +961,14 @@ static void i2c_hid_core_shutdown_tail(struct i2c_hid *ihid)
961961 ihid -> ops -> shutdown_tail (ihid -> ops );
962962}
963963
964+ static void i2c_hid_core_restore_sequence (struct i2c_hid * ihid )
965+ {
966+ if (!ihid -> ops -> restore_sequence )
967+ return ;
968+
969+ ihid -> ops -> restore_sequence (ihid -> ops );
970+ }
971+
964972static int i2c_hid_core_suspend (struct i2c_hid * ihid , bool force_poweroff )
965973{
966974 struct i2c_client * client = ihid -> client ;
@@ -1360,8 +1368,26 @@ static int i2c_hid_core_pm_resume(struct device *dev)
13601368 return i2c_hid_core_resume (ihid );
13611369}
13621370
1371+ static int i2c_hid_core_pm_restore (struct device * dev )
1372+ {
1373+ struct i2c_client * client = to_i2c_client (dev );
1374+ struct i2c_hid * ihid = i2c_get_clientdata (client );
1375+
1376+ if (ihid -> is_panel_follower )
1377+ return 0 ;
1378+
1379+ i2c_hid_core_restore_sequence (ihid );
1380+
1381+ return i2c_hid_core_resume (ihid );
1382+ }
1383+
13631384const struct dev_pm_ops i2c_hid_core_pm = {
1364- SYSTEM_SLEEP_PM_OPS (i2c_hid_core_pm_suspend , i2c_hid_core_pm_resume )
1385+ .suspend = pm_sleep_ptr (i2c_hid_core_pm_suspend ),
1386+ .resume = pm_sleep_ptr (i2c_hid_core_pm_resume ),
1387+ .freeze = pm_sleep_ptr (i2c_hid_core_pm_suspend ),
1388+ .thaw = pm_sleep_ptr (i2c_hid_core_pm_resume ),
1389+ .poweroff = pm_sleep_ptr (i2c_hid_core_pm_suspend ),
1390+ .restore = pm_sleep_ptr (i2c_hid_core_pm_restore ),
13651391};
13661392EXPORT_SYMBOL_GPL (i2c_hid_core_pm );
13671393
0 commit comments