|
@@ -80,6 +80,33 @@ void tpm_put_ops(struct tpm_chip *chip)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(tpm_put_ops);
|
|
|
|
|
|
+/**
|
|
|
+ * tpm_default_chip() - find a TPM chip and get a reference to it
|
|
|
+ */
|
|
|
+struct tpm_chip *tpm_default_chip(void)
|
|
|
+{
|
|
|
+ struct tpm_chip *chip, *res = NULL;
|
|
|
+ int chip_num = 0;
|
|
|
+ int chip_prev;
|
|
|
+
|
|
|
+ mutex_lock(&idr_lock);
|
|
|
+
|
|
|
+ do {
|
|
|
+ chip_prev = chip_num;
|
|
|
+ chip = idr_get_next(&dev_nums_idr, &chip_num);
|
|
|
+ if (chip) {
|
|
|
+ get_device(&chip->dev);
|
|
|
+ res = chip;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } while (chip_prev != chip_num);
|
|
|
+
|
|
|
+ mutex_unlock(&idr_lock);
|
|
|
+
|
|
|
+ return res;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(tpm_default_chip);
|
|
|
+
|
|
|
/**
|
|
|
* tpm_find_get_ops() - find and reserve a TPM chip
|
|
|
* @chip: a &struct tpm_chip instance, %NULL for the default chip
|