diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index 5b3eb26..2267093 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -96,6 +96,7 @@ struct tpm_info {
 struct tpm_tis_phy_ops {
 	u8 data_expect_mask;
 	u8 data_expect_val;
+	int (*post_probe)(struct tpm_chip *chip);
 };
 
 struct priv_data {
@@ -619,6 +620,7 @@ static const struct tpm_class_ops tpm_tis = {
 static struct tpm_tis_phy_ops tis_phy_ops = {
 	.data_expect_mask = TPM_STS_DATA_EXPECT,
 	.data_expect_val = TPM_STS_DATA_EXPECT,
+	.post_probe = tpm_tis_post_probe,
 };
 
 static int tpm_mem_read_bytes(struct tpm_chip *chip, u32 addr, u16 len,
@@ -810,6 +812,23 @@ static void tpm_tis_probe_irq(struct tpm_chip *chip, u32 intmask)
 		return;
 }
 
+static int tpm_tis_post_probe(struct tpm_chip *chip)
+{
+	int probe;
+
+	if (!itpm) {
+		probe = probe_itpm(chip);
+		if (probe < 0)
+			return  -ENODEV;
+		itpm = !!probe;
+	}
+
+	if (itpm)
+		dev_info(chip->dev.parent, "Intel iTPM workaround enabled\n");
+
+	return 0;
+}
+
 static bool interrupts = true;
 module_param(interrupts, bool, 0444);
 MODULE_PARM_DESC(interrupts, "Enable interrupts");
@@ -906,19 +925,14 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info,
 		 (chip->flags & TPM_CHIP_FLAG_TPM2) ? "2.0" : "1.2",
 		 vendor >> 16, rid);
 
-	if (!itpm) {
-		probe = probe_itpm(chip);
-		if (probe < 0) {
+	if (priv->phy_ops && priv->phy_ops->post_probe) {
+		rc = priv->phy_ops->post_probe(chip);
+		if (rc < 0) {
 			rc = -ENODEV;
 			goto out_err;
 		}
-		itpm = !!probe;
 	}
 
-	if (itpm)
-		dev_info(dev, "Intel iTPM workaround enabled\n");
-
-
 	/* Figure out the capabilities */
 	rc = tpm_read32(chip, TPM_INTF_CAPS(priv->locality), &intfcaps);
 	if (rc < 0)
