return amd_sfh_hid_client_init(privdata);
 }
 
+static int __maybe_unused amd_mp2_pci_resume(struct device *dev)
+{
+       struct pci_dev *pdev = to_pci_dev(dev);
+       struct amd_mp2_dev *mp2 = pci_get_drvdata(pdev);
+       struct amdtp_cl_data *cl_data = mp2->cl_data;
+       struct amd_mp2_sensor_info info;
+       int i, status;
+
+       for (i = 0; i < cl_data->num_hid_devices; i++) {
+               if (cl_data->sensor_sts[i] == SENSOR_DISABLED) {
+                       info.period = AMD_SFH_IDLE_LOOP;
+                       info.sensor_idx = cl_data->sensor_idx[i];
+                       info.dma_address = cl_data->sensor_dma_addr[i];
+                       mp2->mp2_ops->start(mp2, info);
+                       status = amd_sfh_wait_for_response
+                                       (mp2, cl_data->sensor_idx[i], SENSOR_ENABLED);
+                       if (status == SENSOR_ENABLED)
+                               cl_data->sensor_sts[i] = SENSOR_ENABLED;
+               }
+       }
+
+       return 0;
+}
+
+static int __maybe_unused amd_mp2_pci_suspend(struct device *dev)
+{
+       struct pci_dev *pdev = to_pci_dev(dev);
+       struct amd_mp2_dev *mp2 = pci_get_drvdata(pdev);
+       struct amdtp_cl_data *cl_data = mp2->cl_data;
+       int i, status;
+
+       for (i = 0; i < cl_data->num_hid_devices; i++) {
+               if (cl_data->sensor_idx[i] != HPD_IDX &&
+                   cl_data->sensor_sts[i] == SENSOR_ENABLED) {
+                       mp2->mp2_ops->stop(mp2, cl_data->sensor_idx[i]);
+                       status = amd_sfh_wait_for_response
+                                       (mp2, cl_data->sensor_idx[i], SENSOR_DISABLED);
+                       if (status != SENSOR_ENABLED)
+                               cl_data->sensor_sts[i] = SENSOR_DISABLED;
+               }
+       }
+
+       return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(amd_mp2_pm_ops, amd_mp2_pci_suspend,
+               amd_mp2_pci_resume);
+
 static const struct pci_device_id amd_mp2_pci_tbl[] = {
        { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_MP2) },
        { }
        .name           = DRIVER_NAME,
        .id_table       = amd_mp2_pci_tbl,
        .probe          = amd_mp2_pci_probe,
+       .driver.pm      = &amd_mp2_pm_ops,
 };
 module_pci_driver(amd_mp2_pci_driver);
 
 
 
 #define HPD_IDX                16
 
+#define AMD_SFH_IDLE_LOOP      200
+
 /* SFH Command register */
 union sfh_cmd_base {
        u32 ul;
 int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id);
 int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata);
 int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata);
+u32 amd_sfh_wait_for_response(struct amd_mp2_dev *mp2, u8 sid, u32 sensor_sts);
+void amd_mp2_suspend(struct amd_mp2_dev *mp2);
+void amd_mp2_resume(struct amd_mp2_dev *mp2);
 
 struct amd_mp2_ops {
         void (*start)(struct amd_mp2_dev *privdata, struct amd_mp2_sensor_info info);