Re: [PATCH 1/7] HID: wacom: Move Intuos pad handling code into dedicated function
On Wed, 2 Dec 2015, Jiri Kosina wrote: > I know that this code (and other instances of similar spaghetti) has been > there before already and you are just moving it around, but isn't this the > proper time to clean it up a bit? > > Like change it to a for-loop that'd use BTN_ as an array index to compute > the position in the data bitstream and call input_report_key()? Okay, scratch that, I see now that this ugliness is being dealt with later in the series. Sorry for the noise. -- Jiri Kosina SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/7] HID: wacom: Move Intuos pad handling code into dedicated function
On Mon, 30 Nov 2015, Jason Gerecke wrote: > Begin slimming down the body of 'wacom_intuos_irq' by moving out its > largest block of code to a dedicated 'wacom_intuos_pad' function. > > Signed-off-by: Jason Gerecke> --- > drivers/hid/wacom_wac.c | 482 > +--- > 1 file changed, 247 insertions(+), 235 deletions(-) > > diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c > index 8b29949..c611ea5 100644 > --- a/drivers/hid/wacom_wac.c > +++ b/drivers/hid/wacom_wac.c > @@ -446,6 +446,249 @@ static void wacom_intuos_schedule_prox_event(struct > wacom_wac *wacom_wac) > } > } > > +static int wacom_intuos_pad(struct wacom_wac *wacom) > +{ > + struct wacom_features *features = >features; > + unsigned char *data = wacom->data; > + struct input_dev *input = wacom->pad_input; > + > + /* pad packets. Works as a second tool and is always in prox */ > + if (!(data[0] == WACOM_REPORT_INTUOSPAD || data[0] == > WACOM_REPORT_INTUOS5PAD || > + data[0] == WACOM_REPORT_CINTIQPAD)) > + return 0; > + > + if (features->type >= INTUOS4S && features->type <= INTUOS4L) { > + input_report_key(input, BTN_0, (data[2] & 0x01)); > + input_report_key(input, BTN_1, (data[3] & 0x01)); > + input_report_key(input, BTN_2, (data[3] & 0x02)); > + input_report_key(input, BTN_3, (data[3] & 0x04)); > + input_report_key(input, BTN_4, (data[3] & 0x08)); > + input_report_key(input, BTN_5, (data[3] & 0x10)); > + input_report_key(input, BTN_6, (data[3] & 0x20)); > + if (data[1] & 0x80) { > + input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f)); > + } else { > + /* Out of proximity, clear wheel value. */ > + input_report_abs(input, ABS_WHEEL, 0); > + } > + if (features->type != INTUOS4S) { > + input_report_key(input, BTN_7, (data[3] & 0x40)); > + input_report_key(input, BTN_8, (data[3] & 0x80)); > + } > + if (data[1] | (data[2] & 0x01) | data[3]) { > + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); > + } else { > + input_report_abs(input, ABS_MISC, 0); > + } > + } else if (features->type == DTK) { > + input_report_key(input, BTN_0, (data[6] & 0x01)); > + input_report_key(input, BTN_1, (data[6] & 0x02)); > + input_report_key(input, BTN_2, (data[6] & 0x04)); > + input_report_key(input, BTN_3, (data[6] & 0x08)); > + input_report_key(input, BTN_4, (data[6] & 0x10)); > + input_report_key(input, BTN_5, (data[6] & 0x20)); > + if (data[6] & 0x3f) { > + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); > + } else { > + input_report_abs(input, ABS_MISC, 0); > + } > + } else if (features->type == WACOM_13HD) { > + input_report_key(input, BTN_0, (data[3] & 0x01)); > + input_report_key(input, BTN_1, (data[4] & 0x01)); > + input_report_key(input, BTN_2, (data[4] & 0x02)); > + input_report_key(input, BTN_3, (data[4] & 0x04)); > + input_report_key(input, BTN_4, (data[4] & 0x08)); > + input_report_key(input, BTN_5, (data[4] & 0x10)); > + input_report_key(input, BTN_6, (data[4] & 0x20)); > + input_report_key(input, BTN_7, (data[4] & 0x40)); > + input_report_key(input, BTN_8, (data[4] & 0x80)); > + if ((data[3] & 0x01) | data[4]) { > + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); > + } else { > + input_report_abs(input, ABS_MISC, 0); > + } > + } else if (features->type == WACOM_24HD) { > + input_report_key(input, BTN_0, (data[6] & 0x01)); > + input_report_key(input, BTN_1, (data[6] & 0x02)); > + input_report_key(input, BTN_2, (data[6] & 0x04)); > + input_report_key(input, BTN_3, (data[6] & 0x08)); > + input_report_key(input, BTN_4, (data[6] & 0x10)); > + input_report_key(input, BTN_5, (data[6] & 0x20)); > + input_report_key(input, BTN_6, (data[6] & 0x40)); > + input_report_key(input, BTN_7, (data[6] & 0x80)); > + input_report_key(input, BTN_8, (data[8] & 0x01)); > + input_report_key(input, BTN_9, (data[8] & 0x02)); > + input_report_key(input, BTN_A, (data[8] & 0x04)); > + input_report_key(input, BTN_B, (data[8] & 0x08)); > + input_report_key(input, BTN_C, (data[8] & 0x10)); > + input_report_key(input, BTN_X, (data[8] & 0x20)); > + input_report_key(input, BTN_Y, (data[8] & 0x40)); > +
Re: [PATCH 1/7] HID: wacom: Move Intuos pad handling code into dedicated function
On Mon, 30 Nov 2015, Jason Gerecke wrote: > Begin slimming down the body of 'wacom_intuos_irq' by moving out its > largest block of code to a dedicated 'wacom_intuos_pad' function. > > Signed-off-by: Jason GereckeI really like the cleanups done by this patchset, thanks. I have applied it to for-4.5/wacom branch. -- Jiri Kosina SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/7] HID: wacom: Move Intuos pad handling code into dedicated function
Begin slimming down the body of 'wacom_intuos_irq' by moving out its largest block of code to a dedicated 'wacom_intuos_pad' function. Signed-off-by: Jason Gerecke--- drivers/hid/wacom_wac.c | 482 +--- 1 file changed, 247 insertions(+), 235 deletions(-) diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 8b29949..c611ea5 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -446,6 +446,249 @@ static void wacom_intuos_schedule_prox_event(struct wacom_wac *wacom_wac) } } +static int wacom_intuos_pad(struct wacom_wac *wacom) +{ + struct wacom_features *features = >features; + unsigned char *data = wacom->data; + struct input_dev *input = wacom->pad_input; + + /* pad packets. Works as a second tool and is always in prox */ + if (!(data[0] == WACOM_REPORT_INTUOSPAD || data[0] == WACOM_REPORT_INTUOS5PAD || + data[0] == WACOM_REPORT_CINTIQPAD)) + return 0; + + if (features->type >= INTUOS4S && features->type <= INTUOS4L) { + input_report_key(input, BTN_0, (data[2] & 0x01)); + input_report_key(input, BTN_1, (data[3] & 0x01)); + input_report_key(input, BTN_2, (data[3] & 0x02)); + input_report_key(input, BTN_3, (data[3] & 0x04)); + input_report_key(input, BTN_4, (data[3] & 0x08)); + input_report_key(input, BTN_5, (data[3] & 0x10)); + input_report_key(input, BTN_6, (data[3] & 0x20)); + if (data[1] & 0x80) { + input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f)); + } else { + /* Out of proximity, clear wheel value. */ + input_report_abs(input, ABS_WHEEL, 0); + } + if (features->type != INTUOS4S) { + input_report_key(input, BTN_7, (data[3] & 0x40)); + input_report_key(input, BTN_8, (data[3] & 0x80)); + } + if (data[1] | (data[2] & 0x01) | data[3]) { + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); + } else { + input_report_abs(input, ABS_MISC, 0); + } + } else if (features->type == DTK) { + input_report_key(input, BTN_0, (data[6] & 0x01)); + input_report_key(input, BTN_1, (data[6] & 0x02)); + input_report_key(input, BTN_2, (data[6] & 0x04)); + input_report_key(input, BTN_3, (data[6] & 0x08)); + input_report_key(input, BTN_4, (data[6] & 0x10)); + input_report_key(input, BTN_5, (data[6] & 0x20)); + if (data[6] & 0x3f) { + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); + } else { + input_report_abs(input, ABS_MISC, 0); + } + } else if (features->type == WACOM_13HD) { + input_report_key(input, BTN_0, (data[3] & 0x01)); + input_report_key(input, BTN_1, (data[4] & 0x01)); + input_report_key(input, BTN_2, (data[4] & 0x02)); + input_report_key(input, BTN_3, (data[4] & 0x04)); + input_report_key(input, BTN_4, (data[4] & 0x08)); + input_report_key(input, BTN_5, (data[4] & 0x10)); + input_report_key(input, BTN_6, (data[4] & 0x20)); + input_report_key(input, BTN_7, (data[4] & 0x40)); + input_report_key(input, BTN_8, (data[4] & 0x80)); + if ((data[3] & 0x01) | data[4]) { + input_report_abs(input, ABS_MISC, PAD_DEVICE_ID); + } else { + input_report_abs(input, ABS_MISC, 0); + } + } else if (features->type == WACOM_24HD) { + input_report_key(input, BTN_0, (data[6] & 0x01)); + input_report_key(input, BTN_1, (data[6] & 0x02)); + input_report_key(input, BTN_2, (data[6] & 0x04)); + input_report_key(input, BTN_3, (data[6] & 0x08)); + input_report_key(input, BTN_4, (data[6] & 0x10)); + input_report_key(input, BTN_5, (data[6] & 0x20)); + input_report_key(input, BTN_6, (data[6] & 0x40)); + input_report_key(input, BTN_7, (data[6] & 0x80)); + input_report_key(input, BTN_8, (data[8] & 0x01)); + input_report_key(input, BTN_9, (data[8] & 0x02)); + input_report_key(input, BTN_A, (data[8] & 0x04)); + input_report_key(input, BTN_B, (data[8] & 0x08)); + input_report_key(input, BTN_C, (data[8] & 0x10)); + input_report_key(input, BTN_X, (data[8] & 0x20)); + input_report_key(input, BTN_Y, (data[8] & 0x40)); + input_report_key(input, BTN_Z, (data[8] & 0x80)); + + /* +*