Commit 6d789ad7 authored by Lino Sanfilippo's avatar Lino Sanfilippo Committed by Jarkko Sakkinen
Browse files

tpm, tpm_tis: Disable interrupts if tpm_tis_probe_irq() failed



Both functions tpm_tis_probe_irq_single() and tpm_tis_probe_irq() may setup
the interrupts and then return with an error. This case is indicated by a
missing TPM_CHIP_FLAG_IRQ flag in chip->flags.
Currently the interrupt setup is only undone if tpm_tis_probe_irq_single()
fails. Undo the setup also if tpm_tis_probe_irq() fails.

Signed-off-by: default avatarLino Sanfilippo <l.sanfilippo@kunbus.com>
Tested-by: default avatarMichael Niewöhner <linux@mniewoehner.de>
Tested-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
parent 282657a8
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -1095,9 +1095,12 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
			goto out_err;
		}

		if (irq) {
		if (irq)
			tpm_tis_probe_irq_single(chip, intmask, IRQF_SHARED,
						 irq);
		else
			tpm_tis_probe_irq(chip, intmask);

		if (!(chip->flags & TPM_CHIP_FLAG_IRQ)) {
			dev_err(&chip->dev, FW_BUG
					"TPM interrupt not working, polling instead\n");
@@ -1108,9 +1111,6 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
			disable_interrupts(chip);
			release_locality(chip, 0);
		}
		} else {
			tpm_tis_probe_irq(chip, intmask);
		}
	}

	rc = tpm_chip_register(chip);