Hi Dmitry,
On Mon, Mar 16, 2020 at 10:53:03AM +0300, Dmitry Mastykin wrote:
+static void goodix_ts_report_key(struct goodix_ts_data *ts, u8 *data)
+{
+ int touch_num;
+ u8 key_value;
+ int i;
+
+ if (data[0] & GOODIX_HAVE_KEY) {
+ touch_num = data[0] & 0x0f;
+ key_value = data[1 + ts->contact_size * touch_num];
+ for (i = 0; i < GOODIX_MAX_KEYS; ++i)
+ if (key_value & (1 << i))
+ input_report_key(ts->input_dev, ts->keymap[i], 1);
+ } else
+ for (i = 0; i < GOODIX_MAX_KEYS; ++i)
+ input_report_key(ts->input_dev, ts->keymap[i], 0);
Should this be written as:
if (data[0] & GOODIX_HAVE_KEY) {
touch_num = data[0] & 0x0f;
key_value = data[1 + ts->contact_size * touch_num];
} else {
/* Release all keys */
key_value = 0;
}
for (i = 0; i < GOODIX_MAX_KEYS; i++)
input_report_key(ts->input_dev, ts->keymap[i],
key_value & BIT(i);
or the device may send incremental updates to the keys pressed without
resending currently pressed keys (sounds unlikely)?
Thanks.
--
Dmitry