Skip to content

Commit

Permalink
toshiba_bluetooth: Add three new functions to the driver
Browse files Browse the repository at this point in the history
This patch introduces three new functions, which are going to be used
by the next patches.

The functions introduced are toshiba_bluetooth_present,
toshiba_bluetooth_status and toshiba_bluetooth_disable, which queries
the presence of the device, queries the status and disables the
device respectively.

Signed-off-by: Azael Avalos <coproscefalo@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
  • Loading branch information
Azael Avalos authored and Darren Hart committed Mar 26, 2015
1 parent fb42d1f commit bb2ea96
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions drivers/platform/x86/toshiba_bluetooth.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,38 @@ static struct acpi_driver toshiba_bt_rfkill_driver = {
.drv.pm = &toshiba_bt_pm,
};

static int toshiba_bluetooth_present(acpi_handle handle)
{
acpi_status result;
u64 bt_present;

result = acpi_evaluate_integer(handle, "_STA", NULL, &bt_present);
if (ACPI_FAILURE(result)) {
pr_err("ACPI call to query Bluetooth presence failed");
return -ENXIO;
} else if (!bt_present) {
pr_info("Bluetooth device not present\n");
return -ENODEV;
}

return 0;
}

static int toshiba_bluetooth_status(acpi_handle handle)
{
acpi_status result;
u64 status;

result = acpi_evaluate_integer(handle, "BTST", NULL, &status);
if (ACPI_FAILURE(result)) {
pr_err("Could not get Bluetooth device status\n");
return -ENXIO;
}

pr_info("Bluetooth status %llu\n", status);

return status;
}

static int toshiba_bluetooth_enable(acpi_handle handle)
{
Expand Down Expand Up @@ -85,6 +117,25 @@ static int toshiba_bluetooth_enable(acpi_handle handle)
return -ENODEV;
}

static int toshiba_bluetooth_disable(acpi_handle handle)
{
acpi_status result;

result = acpi_evaluate_object(handle, "BTPF", NULL, NULL);
if (ACPI_FAILURE(result)) {
pr_err("Could not power OFF Bluetooth device\n");
return -ENXIO;
}

result = acpi_evaluate_object(handle, "DUSB", NULL, NULL);
if (ACPI_FAILURE(result)) {
pr_err("Could not detach USB Bluetooth device\n");
return -ENXIO;
}

return 0;
}

static void toshiba_bt_rfkill_notify(struct acpi_device *device, u32 event)
{
toshiba_bluetooth_enable(device->handle);
Expand Down

0 comments on commit bb2ea96

Please sign in to comment.