]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
tpm2_i2c_nuvoton: add irq validity check
authorAndrew Zamansky <andrew.zamansky@nuvoton.com>
Wed, 29 Jun 2016 09:58:49 +0000 (12:58 +0300)
committerJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tue, 19 Jul 2016 14:43:38 +0000 (17:43 +0300)
In 570a3609 IRQ path is incorrectly always exercised while it should be
exercised only when there is an IRQ number allocated. This commit
reverts the old behavior.

[jarkko.sakkinen@linux.intel.com: updated description]

Fixes: 570a36097f3 ("tpm: drop 'irq' from struct tpm_vendor_specific")
Signed-off-by: Andrew Zamansky <andrew.zamansky@nuvoton.com>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
drivers/char/tpm/tpm_i2c_nuvoton.c

index 4e32094b761debf6d4f3f85f0ba6a56a09dfdd8e..82669823433637698dbbacebeb61af5dced7483d 100644 (file)
@@ -559,10 +559,8 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
         *   TPM_INTF_INT_LEVEL_LOW | TPM_INTF_DATA_AVAIL_INT
         * The IRQ should be set in the i2c_board_info (which is done
         * automatically in of_i2c_register_devices, for device tree users */
-       chip->flags |= TPM_CHIP_FLAG_IRQ;
        priv->irq = client->irq;
-
-       if (chip->flags & TPM_CHIP_FLAG_IRQ) {
+       if (client->irq) {
                dev_dbg(dev, "%s() priv->irq\n", __func__);
                rc = devm_request_irq(dev, client->irq,
                                      i2c_nuvoton_int_handler,
@@ -572,9 +570,9 @@ static int i2c_nuvoton_probe(struct i2c_client *client,
                if (rc) {
                        dev_err(dev, "%s() Unable to request irq: %d for use\n",
                                __func__, priv->irq);
-                       chip->flags &= ~TPM_CHIP_FLAG_IRQ;
                        priv->irq = 0;
                } else {
+                       chip->flags |= TPM_CHIP_FLAG_IRQ;
                        /* Clear any pending interrupt */
                        i2c_nuvoton_ready(chip);
                        /* - wait for TPM_STS==0xA0 (stsValid, commandReady) */