aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tpm/tpm.c
diff options
context:
space:
mode:
authorRajiv Andrade <srajiv@linux.vnet.ibm.com>2008-10-10 18:04:39 -0400
committerJames Morris <jmorris@namei.org>2008-10-10 18:04:39 -0400
commit253115b71fa06330bd58afbe01ccaf763a8a0cf1 (patch)
tree5b2ce62ca88fa461f7d3466361b8c4599ea82ea0 /drivers/char/tpm/tpm.c
parentf02a93645e6200a9da0f26dac8ced28c612f5e86 (diff)
The tpm_dev_release function is only called for platform devices, not pnp
devices, so we implemented the .remove function for pnp ones. Since it's code is very similar to the one inside tpm_dev_release, we've created a helper function tpm_dev_vendor_release, which is called by both. Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com> Cc: "Serge E. Hallyn" <serue@us.ibm.com> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: James Morris <jmorris@namei.org>
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 4f18f84b498..02a495c2e06 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