tpm: two-phase chip management functions
[deliverable/linux.git] / drivers / char / tpm / tpm_i2c_infineon.c
index 472af4bb1b6128d3f7a0176fcb51720115f11aec..03708e6b309a39000371693944b670ba9ccd1d7b 100644 (file)
@@ -581,12 +581,9 @@ static int tpm_tis_i2c_init(struct device *dev)
        int rc = 0;
        struct tpm_chip *chip;
 
-       chip = tpm_register_hardware(dev, &tpm_tis_i2c);
-       if (!chip) {
-               dev_err(dev, "could not register hardware\n");
-               rc = -ENODEV;
-               goto out_err;
-       }
+       chip = tpmm_chip_alloc(dev, &tpm_tis_i2c);
+       if (IS_ERR(chip))
+               return PTR_ERR(chip);
 
        /* Disable interrupts */
        chip->vendor.irq = 0;
@@ -600,7 +597,7 @@ static int tpm_tis_i2c_init(struct device *dev)
        if (request_locality(chip, 0) != 0) {
                dev_err(dev, "could not request locality\n");
                rc = -ENODEV;
-               goto out_vendor;
+               goto out_err;
        }
 
        /* read four bytes from DID_VID register */
@@ -628,21 +625,9 @@ static int tpm_tis_i2c_init(struct device *dev)
        tpm_get_timeouts(chip);
        tpm_do_selftest(chip);
 
-       return 0;
-
+       return tpm_chip_register(chip);
 out_release:
        release_locality(chip, chip->vendor.locality, 1);
-
-out_vendor:
-       /* close file handles */
-       tpm_dev_vendor_release(chip);
-
-       /* remove hardware */
-       tpm_remove_hardware(chip->dev);
-
-       /* reset these pointers, otherwise we oops */
-       chip->dev->release = NULL;
-       chip->release = NULL;
        tpm_dev.client = NULL;
 out_err:
        return rc;
@@ -712,17 +697,9 @@ static int tpm_tis_i2c_probe(struct i2c_client *client,
 static int tpm_tis_i2c_remove(struct i2c_client *client)
 {
        struct tpm_chip *chip = tpm_dev.chip;
-       release_locality(chip, chip->vendor.locality, 1);
 
-       /* close file handles */
-       tpm_dev_vendor_release(chip);
-
-       /* remove hardware */
-       tpm_remove_hardware(chip->dev);
-
-       /* reset these pointers, otherwise we oops */
-       chip->dev->release = NULL;
-       chip->release = NULL;
+       tpm_chip_unregister(chip);
+       release_locality(chip, chip->vendor.locality, 1);
        tpm_dev.client = NULL;
 
        return 0;
This page took 0.024364 seconds and 5 git commands to generate.