Skip to content

Commit 6d8270f

Browse files
committed
Implment configuration reading
1 parent b705eb4 commit 6d8270f

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,15 +345,57 @@ IOReturn VoodooI2CGoodixTouchDriver::goodix_read_version(struct goodix_ts_data *
345345
return retVal;
346346
}
347347

348-
IOReturn VoodooI2CGoodixTouchDriver::goodix_configure_dev(struct goodix_ts_data *ts) {
348+
void VoodooI2CGoodixTouchDriver::goodix_read_config(struct goodix_ts_data *ts) {
349+
UInt8 config[GOODIX_CONFIG_MAX_LENGTH];
349350
IOReturn retVal = kIOReturnSuccess;
350351

351-
return retVal;
352+
retVal = goodix_read_reg(ts->chip->config_addr, config, ts->chip->config_len);
353+
354+
if (retVal != kIOReturnSuccess) {
355+
IOLog("%s::Error reading config (%d), using defaults\n", getName(), retVal);
356+
ts->abs_x_max = GOODIX_MAX_WIDTH;
357+
ts->abs_y_max = GOODIX_MAX_HEIGHT;
358+
// if (ts->swapped_x_y)
359+
// swap(ts->abs_x_max, ts->abs_y_max);
360+
ts->int_trigger_type = GOODIX_INT_TRIGGER;
361+
ts->max_touch_num = GOODIX_MAX_CONTACTS;
362+
return;
363+
}
364+
365+
ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]);
366+
ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]);
367+
// if (ts->swapped_x_y)
368+
// swap(ts->abs_x_max, ts->abs_y_max);
369+
ts->int_trigger_type = config[TRIGGER_LOC] & 0x03;
370+
ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f;
371+
if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) {
372+
IOLog("%s::Invalid config (%d), using defaults\n", getName(), retVal);
373+
ts->abs_x_max = GOODIX_MAX_WIDTH;
374+
ts->abs_y_max = GOODIX_MAX_HEIGHT;
375+
// if (ts->swapped_x_y)
376+
// swap(ts->abs_x_max, ts->abs_y_max);
377+
ts->max_touch_num = GOODIX_MAX_CONTACTS;
378+
}
379+
380+
IOLog("%s::Config read successfully\n", getName());
381+
382+
IOLog("%s::ts->abs_x_max = %d\n", getName(), ts->abs_x_max);
383+
IOLog("%s::ts->abs_y_max = %d\n", getName(), ts->abs_y_max);
384+
IOLog("%s::ts->int_trigger_type = %d\n", getName(), ts->int_trigger_type);
385+
IOLog("%s::ts->max_touch_num = %d\n", getName(), ts->max_touch_num);
386+
387+
// if (dmi_check_system(rotated_screen)) {
388+
// ts->inverted_x = true;
389+
// ts->inverted_y = true;
390+
// IOLog("%s::Applying '180 degrees rotated screen' quirk\n");
391+
// }
352392
}
353393

354-
IOReturn VoodooI2CGoodixTouchDriver::goodix_read_config(struct goodix_ts_data *ts) {
394+
IOReturn VoodooI2CGoodixTouchDriver::goodix_configure_dev(struct goodix_ts_data *ts) {
355395
IOReturn retVal = kIOReturnSuccess;
356396

397+
goodix_read_config(ts);
398+
357399
return retVal;
358400
}
359401

VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class VoodooI2CGoodixTouchDriver : public IOService {
108108
*
109109
* @ts: our goodix_ts_data pointer
110110
*/
111-
IOReturn goodix_read_config(struct goodix_ts_data *ts);
111+
void goodix_read_config(struct goodix_ts_data *ts);
112112
};
113113

114114
#endif /* VoodooI2CGoodixTouchDriver_hpp */

VoodooI2CGoodix/goodix.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
1212
#define GOODIX_CONFIG_911_LENGTH 186
1313
#define GOODIX_CONFIG_967_LENGTH 228
1414

15+
#define GOODIX_MAX_HEIGHT 4096
16+
#define GOODIX_MAX_WIDTH 4096
17+
#define GOODIX_INT_TRIGGER 1
18+
#define GOODIX_CONTACT_SIZE 8
19+
#define GOODIX_MAX_CONTACTS 10
20+
21+
#define RESOLUTION_LOC 1
22+
#define MAX_CONTACTS_LOC 5
23+
#define TRIGGER_LOC 6
24+
1525
#define msleep(x) IOSleep(x)
1626
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
1727
#define usleep_range(min, max) msleep(DIV_ROUND_UP(min, 1000))

0 commit comments

Comments
 (0)