return 0;
}
+static const char * __devinit find_hci_method(acpi_handle handle)
+{
+ acpi_status status;
+ acpi_handle hci_handle;
+
+ status = acpi_get_handle(handle, "GHCI", &hci_handle);
+ if (ACPI_SUCCESS(status))
+ return "GHCI";
+
+ status = acpi_get_handle(handle, "SPFC", &hci_handle);
+ if (ACPI_SUCCESS(status))
+ return "SPFC";
+
+ return NULL;
+}
+
static int __devinit toshiba_acpi_add(struct acpi_device *acpi_dev)
{
struct toshiba_acpi_dev *dev;
- acpi_status status;
- acpi_handle handle;
+ const char *hci_method;
u32 hci_result;
bool bt_present;
int ret = 0;
pr_info("Toshiba Laptop ACPI Extras version %s\n",
TOSHIBA_ACPI_VERSION);
- /* simple device detection: look for HCI method */
- status = acpi_get_handle(acpi_dev->handle, "GHCI", &handle);
- if (ACPI_FAILURE(status))
+ hci_method = find_hci_method(acpi_dev->handle);
+ if (!hci_method) {
+ pr_err("HCI interface not found\n");
return -ENODEV;
+ }
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (!dev)
return -ENOMEM;
dev->acpi_dev = acpi_dev;
- dev->method_hci = "GHCI";
+ dev->method_hci = hci_method;
acpi_dev->driver_data = dev;
if (toshiba_acpi_setup_keyboard(dev))