Commit 6b37729b authored by Peter Huewe's avatar Peter Huewe

tpm/tpm_infineon: Use struct dev_pm_ops for power management

Make the tpm_infineon driver define its PM callbacks through
a struct dev_pm_ops object rather than by using legacy PM hooks
in struct pnp_driver.

This allows the driver to use tpm_pm_suspend() as its suspend
callback directly, so we can remove the duplicated savestate code.
Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
parent ce93b4b0
...@@ -591,27 +591,8 @@ static void tpm_inf_pnp_remove(struct pnp_dev *dev) ...@@ -591,27 +591,8 @@ static void tpm_inf_pnp_remove(struct pnp_dev *dev)
} }
} }
static int tpm_inf_pnp_suspend(struct pnp_dev *dev, pm_message_t pm_state) #ifdef CONFIG_PM_SLEEP
{ static int tpm_inf_resume(struct device *dev)
struct tpm_chip *chip = pnp_get_drvdata(dev);
int rc;
if (chip) {
u8 savestate[] = {
0, 193, /* TPM_TAG_RQU_COMMAND */
0, 0, 0, 10, /* blob length (in bytes) */
0, 0, 0, 152 /* TPM_ORD_SaveState */
};
dev_info(&dev->dev, "saving TPM state\n");
rc = tpm_inf_send(chip, savestate, sizeof(savestate));
if (rc < 0) {
dev_err(&dev->dev, "error while saving TPM state\n");
return rc;
}
}
return 0;
}
static int tpm_inf_pnp_resume(struct pnp_dev *dev)
{ {
/* Re-configure TPM after suspending */ /* Re-configure TPM after suspending */
tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR); tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR);
...@@ -625,16 +606,19 @@ static int tpm_inf_pnp_resume(struct pnp_dev *dev) ...@@ -625,16 +606,19 @@ static int tpm_inf_pnp_resume(struct pnp_dev *dev)
tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR);
/* disable RESET, LP and IRQC */ /* disable RESET, LP and IRQC */
tpm_data_out(RESET_LP_IRQC_DISABLE, CMD); tpm_data_out(RESET_LP_IRQC_DISABLE, CMD);
return tpm_pm_resume(&dev->dev); return tpm_pm_resume(dev);
} }
#endif
static SIMPLE_DEV_PM_OPS(tpm_inf_pm, tpm_pm_suspend, tpm_inf_resume);
static struct pnp_driver tpm_inf_pnp_driver = { static struct pnp_driver tpm_inf_pnp_driver = {
.name = "tpm_inf_pnp", .name = "tpm_inf_pnp",
.id_table = tpm_inf_pnp_tbl, .id_table = tpm_inf_pnp_tbl,
.probe = tpm_inf_pnp_probe, .probe = tpm_inf_pnp_probe,
.suspend = tpm_inf_pnp_suspend, .remove = tpm_inf_pnp_remove,
.resume = tpm_inf_pnp_resume, .driver = {
.remove = tpm_inf_pnp_remove .pm = &tpm_inf_pm,
}
}; };
static int __init init_inf(void) static int __init init_inf(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment