platform/x86: fujitsu-laptop: move keycode processing to separate functions

acpi_fujitsu_hotkey_notify() is pretty deeply nested, which hurts
readability.  Move the keycode processing part to two separate functions
to make the code easier to understand and save a few line breaks.
Rename variable keycode_r to keycode as there is no longer any need to
differentiate between the two.  Tweak indentations to make checkpatch
happy.

Signed-off-by: Michał Kępień <kernel@kempniu.pl>
Acked-by: Jonathan Woithe <jwoithe@just42.net>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
This commit is contained in:
Michał Kępień 2017-01-11 09:59:31 +01:00 committed by Darren Hart
parent eb357cbaf7
commit 2451d19d5d
1 changed files with 43 additions and 33 deletions

View File

@ -1035,12 +1035,48 @@ static int acpi_fujitsu_hotkey_remove(struct acpi_device *device)
return 0; return 0;
} }
static void acpi_fujitsu_hotkey_press(int keycode)
{
struct input_dev *input = fujitsu_hotkey->input;
int status;
vdbg_printk(FUJLAPTOP_DBG_TRACE,
"Push keycode into ringbuffer [%d]\n", keycode);
status = kfifo_in_locked(&fujitsu_hotkey->fifo,
(unsigned char *)&keycode, sizeof(keycode),
&fujitsu_hotkey->fifo_lock);
if (status != sizeof(keycode)) {
vdbg_printk(FUJLAPTOP_DBG_WARN,
"Could not push keycode [0x%x]\n", keycode);
} else {
input_report_key(input, keycode, 1);
input_sync(input);
}
}
static void acpi_fujitsu_hotkey_release(void)
{
struct input_dev *input = fujitsu_hotkey->input;
int keycode, status;
while ((status = kfifo_out_locked(&fujitsu_hotkey->fifo,
(unsigned char *)&keycode,
sizeof(keycode),
&fujitsu_hotkey->fifo_lock))
== sizeof(keycode)) {
input_report_key(input, keycode, 0);
input_sync(input);
vdbg_printk(FUJLAPTOP_DBG_TRACE,
"Pop keycode from ringbuffer [%d]\n", keycode);
}
}
static void acpi_fujitsu_hotkey_notify(struct acpi_device *device, u32 event) static void acpi_fujitsu_hotkey_notify(struct acpi_device *device, u32 event)
{ {
struct input_dev *input; struct input_dev *input;
int keycode, keycode_r; int keycode;
unsigned int irb = 1; unsigned int irb = 1;
int i, status; int i;
input = fujitsu_hotkey->input; input = fujitsu_hotkey->input;
@ -1088,37 +1124,11 @@ static void acpi_fujitsu_hotkey_notify(struct acpi_device *device, u32 event)
keycode = -1; keycode = -1;
break; break;
} }
if (keycode > 0) {
vdbg_printk(FUJLAPTOP_DBG_TRACE, if (keycode > 0)
"Push keycode into ringbuffer [%d]\n", acpi_fujitsu_hotkey_press(keycode);
keycode); else if (keycode == 0)
status = kfifo_in_locked(&fujitsu_hotkey->fifo, acpi_fujitsu_hotkey_release();
(unsigned char *)&keycode,
sizeof(keycode),
&fujitsu_hotkey->fifo_lock);
if (status != sizeof(keycode)) {
vdbg_printk(FUJLAPTOP_DBG_WARN,
"Could not push keycode [0x%x]\n",
keycode);
} else {
input_report_key(input, keycode, 1);
input_sync(input);
}
} else if (keycode == 0) {
while ((status =
kfifo_out_locked(
&fujitsu_hotkey->fifo,
(unsigned char *) &keycode_r,
sizeof(keycode_r),
&fujitsu_hotkey->fifo_lock))
== sizeof(keycode_r)) {
input_report_key(input, keycode_r, 0);
input_sync(input);
vdbg_printk(FUJLAPTOP_DBG_TRACE,
"Pop keycode from ringbuffer [%d]\n",
keycode_r);
}
}
} }
/* On some models (first seen on the Skylake-based Lifebook /* On some models (first seen on the Skylake-based Lifebook