aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm/tpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/tpm/tpm.c')
-rw-r--r--drivers/char/tpm/tpm.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
index 4f18f84b498a..02a495c2e068 100644
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -1133,23 +1133,33 @@ int tpm_pm_resume(struct device *dev)
1133} 1133}
1134EXPORT_SYMBOL_GPL(tpm_pm_resume); 1134EXPORT_SYMBOL_GPL(tpm_pm_resume);
1135 1135
1136/* In case vendor provided release function, call it too.*/
1137
1138void tpm_dev_vendor_release(struct tpm_chip *chip)
1139{
1140 if (chip->vendor.release)
1141 chip->vendor.release(chip->dev);
1142
1143 clear_bit(chip->dev_num, dev_mask);
1144 kfree(chip->vendor.miscdev.name);
1145}
1146EXPORT_SYMBOL_GPL(tpm_dev_vendor_release);
1147
1148
1136/* 1149/*
1137 * Once all references to platform device are down to 0, 1150 * Once all references to platform device are down to 0,
1138 * release all allocated structures. 1151 * release all allocated structures.
1139 * In case vendor provided release function, call it too.
1140 */ 1152 */
1141static void tpm_dev_release(struct device *dev) 1153static void tpm_dev_release(struct device *dev)
1142{ 1154{
1143 struct tpm_chip *chip = dev_get_drvdata(dev); 1155 struct tpm_chip *chip = dev_get_drvdata(dev);
1144 1156
1145 if (chip->vendor.release) 1157 tpm_dev_vendor_release(chip);
1146 chip->vendor.release(dev);
1147 chip->release(dev);
1148 1158
1149 clear_bit(chip->dev_num, dev_mask); 1159 chip->release(dev);
1150 kfree(chip->vendor.miscdev.name);
1151 kfree(chip); 1160 kfree(chip);
1152} 1161}
1162EXPORT_SYMBOL_GPL(tpm_dev_release);
1153 1163
1154/* 1164/*
1155 * Called from tpm_<specific>.c probe function only for devices 1165 * Called from tpm_<specific>.c probe function only for devices