@@ -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
0 commit comments