Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −25
Original line number Diff line number Diff line
@@ -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)
{
	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)
#ifdef CONFIG_PM_SLEEP
static int tpm_inf_resume(struct device *dev)
{
	/* Re-configure TPM after suspending */
	tpm_config_out(ENABLE_REGISTER_PAIR, TPM_INF_ADDR);
@@ -625,16 +606,19 @@ static int tpm_inf_pnp_resume(struct pnp_dev *dev)
	tpm_config_out(DISABLE_REGISTER_PAIR, TPM_INF_ADDR);
	/* disable RESET, LP and IRQC */
	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 = {
	.name = "tpm_inf_pnp",
	.id_table = tpm_inf_pnp_tbl,
	.probe = tpm_inf_pnp_probe,
	.suspend = tpm_inf_pnp_suspend,
	.resume = tpm_inf_pnp_resume,
	.remove = tpm_inf_pnp_remove
	.remove = tpm_inf_pnp_remove,
	.driver = {
		.pm = &tpm_inf_pm,
	}
};

static int __init init_inf(void)