Skip to content

Commit f5954d9

Browse files
committed
Support touchpad hybrid mode report data packet
TEST=touchpad (hybrid report mode and parallel report mode) can work without HID driver Signed-off-by: Josh-Tsai <josh_tsai@compal.com>
1 parent 21c9dec commit f5954d9

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

baseboard/fwk/ps2mouse.c

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ void read_touchpad_in_report(void)
338338
int need_reset = 0;
339339
uint8_t data[128];
340340
int xfer_len = 0;
341+
int report_mode = PS2MOUSE_REPORT_UNKNOWN;
341342
int16_t x, y;
342343
uint8_t response_byte = 0x08;
343344

@@ -368,7 +369,11 @@ void read_touchpad_in_report(void)
368369
CPRINTS("PS2M Touchpad need to reset");
369370
xfer_len = 6;
370371
need_reset = 1;
371-
}
372+
} else if (xfer_len == 7)
373+
report_mode = PS2MOUSE_REPORT_HYBRID;
374+
else if (xfer_len == 8)
375+
report_mode = PS2MOUSE_REPORT_PARALLEL;
376+
372377
xfer_len = MIN(126, xfer_len-2);
373378
rv = i2c_xfer_unlocked(I2C_PORT_TOUCHPAD,
374379
TOUCHPAD_I2C_HID_EP | I2C_FLAG_ADDR16_LITTLE_ENDIAN,
@@ -412,8 +417,20 @@ void read_touchpad_in_report(void)
412417
if (rv == EC_SUCCESS && data[2] == 0x02) {
413418
/*0x0800 02 04 feff 0000
414419
*0x0800 02 04 fdff ffff */
415-
x = (int16_t)(data[4] + (data[5] << 8));
416-
y = -(int16_t)(data[6] + (data[7] << 8));
420+
if (report_mode == PS2MOUSE_REPORT_HYBRID) {
421+
422+
if (data[4] & 0x80)
423+
x = (int16_t)(data[4] + (0xff << 8));
424+
else
425+
x = (int16_t)data[4];
426+
if (data[5] & 0x80)
427+
y = -(int16_t)(data[5] + (0xff << 8));
428+
else
429+
y = -(int16_t)data[5];
430+
} else {
431+
x = (int16_t)(data[4] + (data[5] << 8));
432+
y = -(int16_t)(data[6] + (data[7] << 8));
433+
}
417434
x = MIN(255, MAX(x, -255));
418435
y = MIN(255, MAX(y, -255));
419436
/*button data*/

baseboard/fwk/ps2mouse.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ enum ps2_mouse_task_evt {
5454

5555
};
5656

57+
enum ps2_mouse_report_mode {
58+
PS2MOUSE_REPORT_UNKNOWN,
59+
PS2MOUSE_REPORT_PARALLEL,
60+
PS2MOUSE_REPORT_HYBRID,
61+
};
62+
5763
#define LEFT_BTN BIT(0)
5864
#define RIGHT_BTN BIT(1)
5965
#define MIDDLE_BTN BIT(2)

0 commit comments

Comments
 (0)