toshiba_acpi: Move hotkey enabling code to its own function
The hotkey enabling code is being used by *_setup_keyboard and also by *_resume. This patch creates a new function called toshiba_acpi_enable_hotkeys to be used by these two functions to avoid duplicating code. Signed-off-by: Azael Avalos <coproscefalo@gmail.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
This commit is contained in:
Родитель
8cb8e63b56
Коммит
1f28f2908e
|
@ -1574,6 +1574,28 @@ static umode_t toshiba_sysfs_is_visible(struct kobject *kobj,
|
|||
return exists ? attr->mode : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hotkeys
|
||||
*/
|
||||
static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev)
|
||||
{
|
||||
acpi_status status;
|
||||
u32 result;
|
||||
|
||||
status = acpi_evaluate_object(dev->acpi_dev->handle,
|
||||
"ENAB", NULL, NULL);
|
||||
if (ACPI_FAILURE(status))
|
||||
return -ENODEV;
|
||||
|
||||
result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
|
||||
if (result == TOS_FAILURE)
|
||||
return -EIO;
|
||||
else if (result == TOS_NOT_SUPPORTED)
|
||||
return -ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool toshiba_acpi_i8042_filter(unsigned char data, unsigned char str,
|
||||
struct serio *port)
|
||||
{
|
||||
|
@ -1638,7 +1660,6 @@ static void toshiba_acpi_report_hotkey(struct toshiba_acpi_dev *dev,
|
|||
|
||||
static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
|
||||
{
|
||||
acpi_status status;
|
||||
acpi_handle ec_handle;
|
||||
int error;
|
||||
u32 hci_result;
|
||||
|
@ -1665,7 +1686,6 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
|
|||
* supported, so if it's present set up an i8042 key filter
|
||||
* for this purpose.
|
||||
*/
|
||||
status = AE_ERROR;
|
||||
ec_handle = ec_get_handle();
|
||||
if (ec_handle && acpi_has_method(ec_handle, "NTFY")) {
|
||||
INIT_WORK(&dev->hotkey_work, toshiba_acpi_hotkey_work);
|
||||
|
@ -1696,10 +1716,9 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
|
|||
goto err_remove_filter;
|
||||
}
|
||||
|
||||
status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB", NULL, NULL);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
error = toshiba_acpi_enable_hotkeys(dev);
|
||||
if (error) {
|
||||
pr_info("Unable to enable hotkeys\n");
|
||||
error = -ENODEV;
|
||||
goto err_remove_filter;
|
||||
}
|
||||
|
||||
|
@ -1709,7 +1728,6 @@ static int toshiba_acpi_setup_keyboard(struct toshiba_acpi_dev *dev)
|
|||
goto err_remove_filter;
|
||||
}
|
||||
|
||||
hci_result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
|
||||
return 0;
|
||||
|
||||
err_remove_filter:
|
||||
|
@ -2007,16 +2025,12 @@ static int toshiba_acpi_suspend(struct device *device)
|
|||
static int toshiba_acpi_resume(struct device *device)
|
||||
{
|
||||
struct toshiba_acpi_dev *dev = acpi_driver_data(to_acpi_device(device));
|
||||
u32 result;
|
||||
acpi_status status;
|
||||
int error;
|
||||
|
||||
if (dev->hotkey_dev) {
|
||||
status = acpi_evaluate_object(dev->acpi_dev->handle, "ENAB",
|
||||
NULL, NULL);
|
||||
if (ACPI_FAILURE(status))
|
||||
error = toshiba_acpi_enable_hotkeys(dev);
|
||||
if (error)
|
||||
pr_info("Unable to re-enable hotkeys\n");
|
||||
|
||||
result = hci_write1(dev, HCI_HOTKEY_EVENT, HCI_HOTKEY_ENABLE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче