diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index af7733a8..c3b2fc93 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ include: - remote: 'https://gitlab.gnome.org/GNOME/citemplates/-/raw/71e636e012ae0ab04c5e0fe40ca73ada91ae6bde/flatpak/flatpak_ci_initiative.yml' default: + interruptible: true # Auto-retry jobs in case of infra failures retry: max: 1 @@ -19,7 +20,7 @@ default: variables: extends: .libfprint_common_variables FDO_DISTRIBUTION_TAG: $LIBFPRINT_IMAGE_TAG - FDO_DISTRIBUTION_VERSION: 41 + FDO_DISTRIBUTION_VERSION: rawhide FDO_UPSTREAM_REPO: "libfprint/$CI_PROJECT_NAME" FEDORA_IMAGE: "$CI_REGISTRY/libfprint/$CI_PROJECT_NAME/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG" LAST_ABI_BREAK: "056ea541ddc97f5806cffbd99a12dc87e4da3546" diff --git a/.gitlab-ci/libfprint-templates.yaml b/.gitlab-ci/libfprint-templates.yaml index 6401cfac..60b666d4 100644 --- a/.gitlab-ci/libfprint-templates.yaml +++ b/.gitlab-ci/libfprint-templates.yaml @@ -44,4 +44,6 @@ libgusb \ libusb \ openssl \ - pixman + pixman \ + python3-gobject \ + python3-gobject-base diff --git a/NEWS b/NEWS index b945e9f5..fb9c2290 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,22 @@ This file lists notable changes in each release. For the full history of all changes, see ChangeLog. +2026-02-10: v1.94.10 release + +Highlights: + * synaptics: Add USB reset in probe to recover stall condition + * synaptics: New PIDs 0x0169, 0x019F, 0x00E9, 0x01A0, 0x0109, 0x010A + * goodixmoc: New PID 0x66A9 + * goodixmoc: Fix crash in exit callback handler + * fpcmoc: New PID 0xA306 + * fpcmoc: Fix interrupt cancellable leak + * elanmoc: New PIDs 0x0CA7, 0x0CA8, 0x0CB0 + * egismoc: New PIDs 0x0584, 0x0588 + * focaltech_moc: New PIDs 0xA27A, 0x1579 + * realtek: New PID 0xFA03 + * fp-device: Clarify getter for open property + * libfprint: Use fatal-warnings on g-i-scanner + 2025-02-20: v1.94.9 release Highlights: diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb index 495a3f74..31956d73 100644 --- a/data/autosuspend.hwdb +++ b/data/autosuspend.hwdb @@ -83,6 +83,7 @@ usb:v1C7Ap0583* usb:v1C7Ap0584* usb:v1C7Ap0586* usb:v1C7Ap0587* +usb:v1C7Ap0588* usb:v1C7Ap05A1* usb:v1C7Ap05A5* ID_AUTOSUSPEND=1 @@ -165,6 +166,9 @@ usb:v04F3p0C99* usb:v04F3p0C9D* usb:v04F3p0C9F* usb:v04F3p0CA3* +usb:v04F3p0CA7* +usb:v04F3p0CA8* +usb:v04F3p0CB0* ID_AUTOSUSPEND=1 ID_PERSIST=0 @@ -176,10 +180,14 @@ usb:v1C7Ap0603* # Supported by libfprint driver focaltech_moc usb:v2808p9E48* usb:v2808pD979* +usb:v2808pA27A* usb:v2808pA959* usb:v2808pA99A* usb:v2808pA57A* usb:v2808pA78A* +usb:v2808p1579* +usb:v2808p077A* +usb:v2808p079A* ID_AUTOSUSPEND=1 ID_PERSIST=0 @@ -229,6 +237,7 @@ usb:v27C6p659C* usb:v27C6p6A94* usb:v27C6p6512* usb:v27C6p689A* +usb:v27C6p66A9* ID_AUTOSUSPEND=1 ID_PERSIST=0 @@ -240,6 +249,7 @@ usb:v298Dp1010* # Supported by libfprint driver realtek usb:v0BDAp5813* usb:v0BDAp5816* +usb:v2541pFA03* ID_AUTOSUSPEND=1 ID_PERSIST=0 @@ -249,6 +259,7 @@ usb:v06CBp00C2* usb:v06CBp00C4* usb:v06CBp00C6* usb:v06CBp00DF* +usb:v06CBp00E9* usb:v06CBp00F0* usb:v06CBp00F9* usb:v06CBp00FC* @@ -266,11 +277,13 @@ usb:v06CBp0126* usb:v06CBp0129* usb:v06CBp015F* usb:v06CBp0168* +usb:v06CBp0169* usb:v06CBp016C* usb:v06CBp0173* usb:v06CBp0174* usb:v06CBp019D* usb:v06CBp019F* +usb:v06CBp01A0* ID_AUTOSUSPEND=1 ID_PERSIST=0 @@ -374,10 +387,12 @@ usb:v06CBp0088* usb:v06CBp008A* usb:v06CBp009A* usb:v06CBp009B* +usb:v06CBp00A1* usb:v06CBp00A2* usb:v06CBp00A8* usb:v06CBp00B7* usb:v06CBp00BB* +usb:v06CBp00BC* usb:v06CBp00BE* usb:v06CBp00CB* usb:v06CBp00C9* @@ -386,7 +401,6 @@ usb:v06CBp00DA* usb:v06CBp00DC* usb:v06CBp00E4* usb:v06CBp00E7* -usb:v06CBp00E9* usb:v06CBp00FD* usb:v06CBp00FF* usb:v0A5Cp5801* @@ -407,9 +421,11 @@ usb:v0A5Cp5867* usb:v0BDAp5812* usb:v10A5p0007* usb:v10A5p9200* +usb:v10A5p9201* usb:v10A5p9800* usb:v10A5pA120* usb:v10A5pA900* +usb:v10A5pA921* usb:v10A5pE340* usb:v1188p9545* usb:v138Ap0007* @@ -463,12 +479,14 @@ usb:v27C6p5E0A* usb:v27C6p581A* usb:v27C6p589A* usb:v27C6p5F10* +usb:v27C6p5F91* usb:v27C6p6382* usb:v2808p9338* usb:v2808p9348* usb:v2808p93A9* usb:v2808pA658* usb:v2808pC652* +usb:v2808pA553* usb:v298Dp2020* usb:v298Dp2033* usb:v2DF0p0003* diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c index 775974fd..4425864c 100644 --- a/libfprint/drivers/egismoc/egismoc.c +++ b/libfprint/drivers/egismoc/egismoc.c @@ -50,12 +50,13 @@ struct _FpiDeviceEgisMoc G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_SDCP_DEVICE); static const FpIdEntry egismoc_id_table[] = { - { .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 }, + { .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_15 }, { .vid = 0x1c7a, .pid = 0x0583, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_15 }, { .vid = 0x1c7a, .pid = 0x0584, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, { .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, { .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, - { .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 }, + { .vid = 0x1c7a, .pid = 0x0588, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, + { .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_15 }, { .vid = 0x1c7a, .pid = 0x05a5, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_15 }, { .vid = 0, .pid = 0, .driver_data = 0 } }; diff --git a/libfprint/drivers/elanmoc/elanmoc.c b/libfprint/drivers/elanmoc/elanmoc.c index f5ccc11a..1b441bdc 100644 --- a/libfprint/drivers/elanmoc/elanmoc.c +++ b/libfprint/drivers/elanmoc/elanmoc.c @@ -36,6 +36,9 @@ static const FpIdEntry id_table[] = { { .vid = 0x04f3, .pid = 0x0c9d, }, { .vid = 0x04f3, .pid = 0x0c9f, }, { .vid = 0x04f3, .pid = 0x0ca3, }, + { .vid = 0x04f3, .pid = 0x0ca7, }, + { .vid = 0x04f3, .pid = 0x0ca8, }, + { .vid = 0x04f3, .pid = 0x0cb0, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; @@ -132,10 +135,10 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer, } typedef enum { - FP_CMD_SEND = 0, - FP_CMD_GET, - FP_CMD_NUM_STATES, -} FpCmdState; + ELAN_MOC_CMD_SEND = 0, + ELAN_MOC_CMD_GET, + ELAN_MOC_CMD_NUM_STATES, +} ElanMocCmdState; static void fp_cmd_run_state (FpiSsm *ssm, @@ -146,7 +149,7 @@ fp_cmd_run_state (FpiSsm *ssm, switch (fpi_ssm_get_cur_state (ssm)) { - case FP_CMD_SEND: + case ELAN_MOC_CMD_SEND: if (self->cmd_transfer) { self->cmd_transfer->ssm = ssm; @@ -162,7 +165,7 @@ fp_cmd_run_state (FpiSsm *ssm, } break; - case FP_CMD_GET: + case ELAN_MOC_CMD_GET: if (self->cmd_len_in == 0) { CommandData *data = fpi_ssm_get_data (ssm); @@ -229,7 +232,7 @@ elanmoc_get_cmd (FpDevice *device, guint8 *buffer_out, self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), fp_cmd_run_state, - FP_CMD_NUM_STATES); + ELAN_MOC_CMD_NUM_STATES); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); diff --git a/libfprint/drivers/focaltech_moc/focaltech_moc.c b/libfprint/drivers/focaltech_moc/focaltech_moc.c index 17f5363f..8bd93e4b 100644 --- a/libfprint/drivers/focaltech_moc/focaltech_moc.c +++ b/libfprint/drivers/focaltech_moc/focaltech_moc.c @@ -29,10 +29,14 @@ G_DEFINE_TYPE (FpiDeviceFocaltechMoc, fpi_device_focaltech_moc, FP_TYPE_DEVICE) static const FpIdEntry id_table[] = { { .vid = 0x2808, .pid = 0x9e48, }, { .vid = 0x2808, .pid = 0xd979, }, + { .vid = 0x2808, .pid = 0xa27a, }, { .vid = 0x2808, .pid = 0xa959, }, { .vid = 0x2808, .pid = 0xa99a, }, { .vid = 0x2808, .pid = 0xa57a, }, { .vid = 0x2808, .pid = 0xa78a, }, + { .vid = 0x2808, .pid = 0x1579, }, + { .vid = 0x2808, .pid = 0x077A, }, + { .vid = 0x2808, .pid = 0x079A, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; @@ -235,10 +239,10 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer, } typedef enum { - FP_CMD_SEND = 0, - FP_CMD_GET, - FP_CMD_NUM_STATES, -} FpCmdState; + FOCALTECH_CMD_SEND = 0, + FOCALTECH_CMD_GET, + FOCALTECH_CMD_NUM_STATES, +} FocaltechCmdState; static void fp_cmd_run_state (FpiSsm *ssm, @@ -249,7 +253,7 @@ fp_cmd_run_state (FpiSsm *ssm, switch (fpi_ssm_get_cur_state (ssm)) { - case FP_CMD_SEND: + case FOCALTECH_CMD_SEND: if (self->cmd_transfer) { self->cmd_transfer->ssm = ssm; @@ -266,7 +270,7 @@ fp_cmd_run_state (FpiSsm *ssm, break; - case FP_CMD_GET: + case FOCALTECH_CMD_GET: if (self->cmd_len_in == 0) { CommandData *data = fpi_ssm_get_data (ssm); @@ -334,7 +338,7 @@ focaltech_moc_get_cmd (FpDevice *device, guint8 *buffer_out, self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), fp_cmd_run_state, - FP_CMD_NUM_STATES); + FOCALTECH_CMD_NUM_STATES); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); diff --git a/libfprint/drivers/fpcmoc/fpc.c b/libfprint/drivers/fpcmoc/fpc.c index b67c4ff2..6547a64e 100644 --- a/libfprint/drivers/fpcmoc/fpc.c +++ b/libfprint/drivers/fpcmoc/fpc.c @@ -86,7 +86,7 @@ fpc_suspend_resume_cb (FpiUsbTransfer *transfer, fp_dbg ("%s current ssm state: %d", G_STRFUNC, ssm_state); - if (ssm_state == FP_CMD_SUSPENDED) + if (ssm_state == FPC_CMD_SUSPENDED) { if (error) fpi_ssm_mark_failed (transfer->ssm, error); @@ -94,12 +94,12 @@ fpc_suspend_resume_cb (FpiUsbTransfer *transfer, fpi_device_suspend_complete (device, error); /* The resume handler continues to the next state! */ } - else if (ssm_state == FP_CMD_RESUME) + else if (ssm_state == FPC_CMD_RESUME) { if (error) fpi_ssm_mark_failed (transfer->ssm, error); else - fpi_ssm_jump_to_state (transfer->ssm, FP_CMD_GET_DATA); + fpi_ssm_jump_to_state (transfer->ssm, FPC_CMD_GET_DATA); fpi_device_resume_complete (device, error); } @@ -118,7 +118,7 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer, if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) && (self->cmd_suspended)) { g_error_free (error); - fpi_ssm_jump_to_state (transfer->ssm, FP_CMD_SUSPENDED); + fpi_ssm_jump_to_state (transfer->ssm, FPC_CMD_SUSPENDED); return; } @@ -139,7 +139,7 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer, fp_dbg ("%s current ssm request: %d state: %d", G_STRFUNC, data->request, ssm_state); /* clean cmd_ssm except capture command for suspend/resume case */ - if (ssm_state != FP_CMD_SEND || data->request != FPC_CMD_ARM) + if (ssm_state != FPC_CMD_SEND || data->request != FPC_CMD_ARM) self->cmd_ssm = NULL; if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE) @@ -153,13 +153,13 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer, } else if (data->cmdtype == FPC_CMDTYPE_TO_DEVICE_EVTDATA) { - if (ssm_state == FP_CMD_SEND) + if (ssm_state == FPC_CMD_SEND) { fpi_ssm_next_state (transfer->ssm); return; } - if (ssm_state == FP_CMD_GET_DATA) + if (ssm_state == FPC_CMD_GET_DATA) { fpc_cmd_response_t evt_data = {0}; fp_dbg ("%s recv evt data length: %ld", G_STRFUNC, transfer->actual_length); @@ -292,11 +292,11 @@ fpc_cmd_run_state (FpiSsm *ssm, switch (fpi_ssm_get_cur_state (ssm)) { - case FP_CMD_SEND: + case FPC_CMD_SEND: fpc_send_ctrl_cmd (dev); break; - case FP_CMD_GET_DATA: + case FPC_CMD_GET_DATA: transfer = fpi_usb_transfer_new (dev); transfer->ssm = ssm; fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); @@ -307,7 +307,7 @@ fpc_cmd_run_state (FpiSsm *ssm, fpi_ssm_get_data (ssm)); break; - case FP_CMD_SUSPENDED: + case FPC_CMD_SUSPENDED: transfer = fpi_usb_transfer_new (dev); transfer->ssm = ssm; fpi_usb_transfer_fill_control (transfer, @@ -323,7 +323,7 @@ fpc_cmd_run_state (FpiSsm *ssm, fpc_suspend_resume_cb, NULL); break; - case FP_CMD_RESUME: + case FPC_CMD_RESUME: transfer = fpi_usb_transfer_new (dev); transfer->ssm = ssm; fpi_usb_transfer_fill_control (transfer, @@ -354,21 +354,22 @@ fpc_sensor_cmd (FpiDeviceFpcMoc *self, data = g_memdup2 (cmd_data, sizeof (CommandData)); + g_clear_object (&self->interrupt_cancellable); + if (wait_data_delay) { self->cmd_data_timeout = 0; - g_set_object (&self->interrupt_cancellable, g_cancellable_new ()); + self->interrupt_cancellable = g_cancellable_new (); } else { self->cmd_data_timeout = DATA_TIMEOUT; - g_clear_object (&self->interrupt_cancellable); } g_assert (self->cmd_ssm == NULL); self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), fpc_cmd_run_state, - FP_CMD_NUM_STATES); + FPC_CMD_NUM_STATES); fpi_ssm_set_data (self->cmd_ssm, data, g_free); fpi_ssm_start (self->cmd_ssm, fpc_cmd_ssm_done); @@ -743,7 +744,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self, case FPC_ENROL_STATUS_COMPLETED: self->enroll_stage++; fpi_device_enroll_progress (FP_DEVICE (self), self->enroll_stage, NULL, NULL); - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE); + fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE); return; case FPC_ENROL_STATUS_IMAGE_TOO_SIMILAR: @@ -762,7 +763,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self, /* Used for customer enrollment scheme */ if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage)) { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE); + fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE); return; } break; @@ -780,7 +781,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self, /* Used for customer enrollment scheme */ if (self->enroll_stage >= (self->max_enroll_stage - self->max_immobile_stage)) { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_COMPLETE); + fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_COMPLETE); return; } break; @@ -815,7 +816,7 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self, } else { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); + fpi_ssm_jump_to_state (self->task_ssm, FPC_ENROLL_CAPTURE); } } @@ -943,7 +944,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_ENROLL_ENUM: + case FPC_ENROLL_ENUM: { FPC_FID_DATA pquery_data = {0}; gsize query_data_len = 0; @@ -968,7 +969,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CREATE: + case FPC_ENROLL_CREATE: { recv_data_len = sizeof (FPC_BEGIN_ENROL); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -983,7 +984,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CAPTURE: + case FPC_ENROLL_CAPTURE: { guint32 capture_id = FPC_CAPTUREID_RESERVED; fpi_device_report_finger_status_changes (device, @@ -1001,7 +1002,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_GET_IMG: + case FPC_ENROLL_GET_IMG: { cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.request = FPC_CMD_GET_IMG; @@ -1015,7 +1016,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_UPDATE: + case FPC_ENROLL_UPDATE: { recv_data_len = sizeof (FPC_ENROL); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1030,7 +1031,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_COMPLETE: + case FPC_ENROLL_COMPLETE: { recv_data_len = sizeof (FPC_END_ENROL); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1045,7 +1046,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CHECK_DUPLICATE: + case FPC_ENROLL_CHECK_DUPLICATE: { recv_data_len = sizeof (FPC_IDENTIFY); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1060,7 +1061,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_BINDID: + case FPC_ENROLL_BINDID: { FPC_FID_DATA data = {0}; gsize data_len = 0; @@ -1114,7 +1115,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_COMMIT: + case FPC_ENROLL_COMMIT: { recv_data_len = sizeof (gint32); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1129,7 +1130,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_DICARD: + case FPC_ENROLL_DICARD: { cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.request = FPC_CMD_ABORT; @@ -1142,7 +1143,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CLEANUP: + case FPC_ENROLL_CLEANUP: { if (self->do_cleanup == TRUE) { @@ -1287,7 +1288,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_VERIFY_CAPTURE: + case FPC_VERIFY_CAPTURE: { guint32 capture_id = FPC_CAPTUREID_RESERVED; fpi_device_report_finger_status_changes (device, @@ -1305,7 +1306,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_VERIFY_GET_IMG: + case FPC_VERIFY_GET_IMG: { cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.request = FPC_CMD_GET_IMG; @@ -1319,7 +1320,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_VERIFY_IDENTIFY: + case FPC_VERIFY_IDENTIFY: { gsize recv_data_len = sizeof (FPC_IDENTIFY); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1334,7 +1335,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_VERIFY_CANCEL: + case FPC_VERIFY_CANCEL: { cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.request = FPC_CMD_ABORT; @@ -1404,7 +1405,7 @@ fpc_clear_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_CLEAR_DELETE_DB: + case FPC_CLEAR_DELETE_DB: { if (self->dbid) { @@ -1431,7 +1432,7 @@ fpc_clear_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_CLEAR_CREATE_DB: + case FPC_CLEAR_CREATE_DB: { if (self->dbid) { @@ -1536,7 +1537,7 @@ fpc_init_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_INIT: + case FPC_INIT: cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.request = FPC_CMD_INIT; cmd_data.value = 0x1; @@ -1548,7 +1549,7 @@ fpc_init_sm_run_state (FpiSsm *ssm, FpDevice *device) fpc_sensor_cmd (self, FALSE, &cmd_data); break; - case FP_LOAD_DB: + case FPC_INIT_LOAD_DB: { gsize recv_data_len = sizeof (FPC_LOAD_DB); cmd_data.cmdtype = FPC_CMDTYPE_FROM_DEVICE; @@ -1682,7 +1683,7 @@ fpc_dev_open (FpDevice *device) } self->task_ssm = fpi_ssm_new (device, fpc_init_sm_run_state, - FP_INIT_NUM_STATES); + FPC_INIT_NUM_STATES); fpi_ssm_start (self->task_ssm, fpc_init_ssm_done); } @@ -1694,6 +1695,7 @@ fpc_dev_close (FpDevice *device) fp_dbg ("%s enter -->", G_STRFUNC); g_clear_pointer (&self->dbid, g_free); + g_cancellable_cancel (self->interrupt_cancellable); g_clear_object (&self->interrupt_cancellable); fpc_dev_release_interface (self, NULL); } @@ -1705,8 +1707,8 @@ fpc_dev_verify_identify (FpDevice *device) fp_dbg ("%s enter -->", G_STRFUNC); self->task_ssm = fpi_ssm_new_full (device, fpc_verify_sm_run_state, - FP_VERIFY_NUM_STATES, - FP_VERIFY_CANCEL, + FPC_VERIFY_NUM_STATES, + FPC_VERIFY_CANCEL, "verify_identify"); fpi_ssm_start (self->task_ssm, fpc_verify_ssm_done); @@ -1722,8 +1724,8 @@ fpc_dev_enroll (FpDevice *device) self->enroll_stage = 0; self->immobile_stage = 0; self->task_ssm = fpi_ssm_new_full (device, fpc_enroll_sm_run_state, - FP_ENROLL_NUM_STATES, - FP_ENROLL_DICARD, + FPC_ENROLL_NUM_STATES, + FPC_ENROLL_DICARD, "enroll"); fpi_ssm_start (self->task_ssm, fpc_enroll_ssm_done); @@ -1774,7 +1776,7 @@ fpc_dev_suspend (FpDevice *device) } g_assert (self->cmd_ssm); - g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FP_CMD_GET_DATA); + g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FPC_CMD_GET_DATA); self->cmd_suspended = TRUE; g_cancellable_cancel (self->interrupt_cancellable); } @@ -1796,10 +1798,12 @@ fpc_dev_resume (FpDevice *device) g_assert (self->cmd_ssm); g_assert (self->cmd_suspended); - g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FP_CMD_SUSPENDED); + g_assert (fpi_ssm_get_cur_state (self->cmd_ssm) == FPC_CMD_SUSPENDED); self->cmd_suspended = FALSE; - g_set_object (&self->interrupt_cancellable, g_cancellable_new ()); - fpi_ssm_jump_to_state (self->cmd_ssm, FP_CMD_RESUME); + + g_clear_object (&self->interrupt_cancellable); + self->interrupt_cancellable = g_cancellable_new (); + fpi_ssm_jump_to_state (self->cmd_ssm, FPC_CMD_RESUME); } static void @@ -1863,8 +1867,8 @@ fpc_dev_clear_storage (FpDevice *device) fp_dbg ("%s enter -->", G_STRFUNC); self->task_ssm = fpi_ssm_new_full (device, fpc_clear_sm_run_state, - FP_CLEAR_NUM_STATES, - FP_CLEAR_NUM_STATES, + FPC_CLEAR_NUM_STATES, + FPC_CLEAR_NUM_STATES, "Clear storage"); fpi_ssm_start (self->task_ssm, fpc_clear_ssm_done); diff --git a/libfprint/drivers/fpcmoc/fpc.h b/libfprint/drivers/fpcmoc/fpc.h index 389c63ff..70d64320 100644 --- a/libfprint/drivers/fpcmoc/fpc.h +++ b/libfprint/drivers/fpcmoc/fpc.h @@ -178,44 +178,44 @@ typedef enum { } FpcCmdType; typedef enum { - FP_CMD_SEND = 0, - FP_CMD_GET_DATA, - FP_CMD_SUSPENDED, - FP_CMD_RESUME, - FP_CMD_NUM_STATES, -} FpCmdState; + FPC_CMD_SEND = 0, + FPC_CMD_GET_DATA, + FPC_CMD_SUSPENDED, + FPC_CMD_RESUME, + FPC_CMD_NUM_STATES, +} FpcCmdState; typedef enum { - FP_INIT = 0, - FP_LOAD_DB, - FP_INIT_NUM_STATES, -} FpInitState; + FPC_INIT = 0, + FPC_INIT_LOAD_DB, + FPC_INIT_NUM_STATES, +} FpcInitState; typedef enum { - FP_ENROLL_ENUM = 0, - FP_ENROLL_CREATE, - FP_ENROLL_CAPTURE, - FP_ENROLL_GET_IMG, - FP_ENROLL_UPDATE, - FP_ENROLL_COMPLETE, - FP_ENROLL_CHECK_DUPLICATE, - FP_ENROLL_BINDID, - FP_ENROLL_COMMIT, - FP_ENROLL_DICARD, - FP_ENROLL_CLEANUP, - FP_ENROLL_NUM_STATES, -} FpEnrollState; + FPC_ENROLL_ENUM = 0, + FPC_ENROLL_CREATE, + FPC_ENROLL_CAPTURE, + FPC_ENROLL_GET_IMG, + FPC_ENROLL_UPDATE, + FPC_ENROLL_COMPLETE, + FPC_ENROLL_CHECK_DUPLICATE, + FPC_ENROLL_BINDID, + FPC_ENROLL_COMMIT, + FPC_ENROLL_DICARD, + FPC_ENROLL_CLEANUP, + FPC_ENROLL_NUM_STATES, +} FpcEnrollState; typedef enum { - FP_VERIFY_CAPTURE = 0, - FP_VERIFY_GET_IMG, - FP_VERIFY_IDENTIFY, - FP_VERIFY_CANCEL, - FP_VERIFY_NUM_STATES, -} FpVerifyState; + FPC_VERIFY_CAPTURE = 0, + FPC_VERIFY_GET_IMG, + FPC_VERIFY_IDENTIFY, + FPC_VERIFY_CANCEL, + FPC_VERIFY_NUM_STATES, +} FpcVerifyState; typedef enum { - FP_CLEAR_DELETE_DB = 0, - FP_CLEAR_CREATE_DB, - FP_CLEAR_NUM_STATES, + FPC_CLEAR_DELETE_DB = 0, + FPC_CLEAR_CREATE_DB, + FPC_CLEAR_NUM_STATES, } FpClearState; diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c index 659722ae..27302193 100644 --- a/libfprint/drivers/goodixmoc/goodix.c +++ b/libfprint/drivers/goodixmoc/goodix.c @@ -238,7 +238,7 @@ fp_cmd_run_state (FpiSsm *ssm, switch (fpi_ssm_get_cur_state (ssm)) { - case FP_CMD_SEND: + case GOODIX_CMD_SEND: if (self->cmd_transfer) { self->cmd_transfer->ssm = ssm; @@ -254,7 +254,7 @@ fp_cmd_run_state (FpiSsm *ssm, } break; - case FP_CMD_GET_ACK: + case GOODIX_CMD_GET_ACK: transfer = fpi_usb_transfer_new (dev); transfer->ssm = ssm; fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); @@ -266,7 +266,7 @@ fp_cmd_run_state (FpiSsm *ssm, break; - case FP_CMD_GET_DATA: + case GOODIX_CMD_GET_DATA: transfer = fpi_usb_transfer_new (dev); transfer->ssm = ssm; fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); @@ -354,7 +354,7 @@ goodix_sensor_cmd (FpiDeviceGoodixMoc *self, self->cmd_ssm = fpi_ssm_new (FP_DEVICE (self), fp_cmd_run_state, - FP_CMD_NUM_STATES); + GOODIX_CMD_NUM_STATES); fpi_ssm_set_data (self->cmd_ssm, data, (GDestroyNotify) fp_cmd_ssm_done_data_free); @@ -480,6 +480,35 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, } +static void +fp_verify_finger_mode_cb (FpiDeviceGoodixMoc *self, + gxfp_cmd_response_t *resp, + GError *error) +{ + if (error) + { + fpi_ssm_mark_failed (self->task_ssm, error); + return; + } + /* if reach max timeout(5sec) finger not up, try again */ + if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT) + { + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_VERIFY_WAIT_FINGER_UP); + return; + } + else if (resp->finger_status.status != GX_SUCCESS) + { + fpi_ssm_mark_failed (self->task_ssm, + fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO, + "Switch finger mode failed")); + return; + } + fpi_device_report_finger_status_changes (FP_DEVICE (self), + FP_FINGER_STATUS_NONE, + FP_FINGER_STATUS_PRESENT); + fpi_ssm_next_state (self->task_ssm); +} + static void fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) { @@ -493,7 +522,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_VERIFY_PWR_BTN_SHIELD_ON: + case GOODIX_VERIFY_PWR_BTN_SHIELD_ON: goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, false, NULL, @@ -501,7 +530,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_pwr_btn_shield_cb); break; - case FP_VERIFY_CAPTURE: + case GOODIX_VERIFY_CAPTURE: fpi_device_report_finger_status_changes (device, FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NONE); @@ -512,7 +541,7 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_verify_capture_cb); break; - case FP_VERIFY_IDENTIFY: + case GOODIX_VERIFY_IDENTIFY: goodix_sensor_cmd (self, MOC_CMD0_IDENTIFY, MOC_CMD1_DEFAULT, false, (const guint8 *) nonce, @@ -520,7 +549,18 @@ fp_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_verify_cb); break; - case FP_VERIFY_PWR_BTN_SHIELD_OFF: + case GOODIX_VERIFY_WAIT_FINGER_UP: + { + guint8 dummy = 0; + goodix_sensor_cmd (self, MOC_CMD0_FINGER_MODE, MOC_CMD1_SET_FINGER_UP, + true, + &dummy, + 1, + fp_verify_finger_mode_cb); + } + break; + + case GOODIX_VERIFY_PWR_BTN_SHIELD_OFF: goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, false, NULL, @@ -682,7 +722,7 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self, self->enroll_stage, NULL, fpi_device_retry_new (FP_DEVICE_RETRY_GENERAL)); - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); return; } fpi_device_report_finger_status_changes (FP_DEVICE (self), @@ -700,7 +740,7 @@ fp_enroll_capture_cb (FpiDeviceGoodixMoc *self, self->enroll_stage, NULL, fpi_device_retry_new (FP_DEVICE_RETRY_CENTER_FINGER)); - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); return; } else @@ -746,7 +786,7 @@ fp_enroll_update_cb (FpiDeviceGoodixMoc *self, /* if enroll complete, no need to wait finger up */ if (self->enroll_stage >= self->max_enroll_stage) { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CHECK_DUPLICATE); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CHECK_DUPLICATE); return; } @@ -812,7 +852,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, /* if reach max timeout(5sec) finger not up, switch to finger up again */ if (resp->finger_status.status == GX_ERROR_WAIT_FINGER_UP_TIMEOUT) { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_WAIT_FINGER_UP); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_WAIT_FINGER_UP); return; } else if (resp->finger_status.status != GX_SUCCESS) @@ -827,7 +867,7 @@ fp_finger_mode_cb (FpiDeviceGoodixMoc *self, FP_FINGER_STATUS_PRESENT); if (self->enroll_stage < self->max_enroll_stage) { - fpi_ssm_jump_to_state (self->task_ssm, FP_ENROLL_CAPTURE); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_ENROLL_CAPTURE); return; } fpi_ssm_next_state (self->task_ssm); @@ -853,7 +893,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_ENROLL_PWR_BTN_SHIELD_ON: + case GOODIX_ENROLL_PWR_BTN_SHIELD_ON: { goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_ON, false, @@ -863,7 +903,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_ENUM: + case GOODIX_ENROLL_ENUM: { goodix_sensor_cmd (self, MOC_CMD0_GETFINGERLIST, MOC_CMD1_DEFAULT, false, @@ -873,7 +913,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CREATE: + case GOODIX_ENROLL_CREATE: { goodix_sensor_cmd (self, MOC_CMD0_ENROLL_INIT, MOC_CMD1_DEFAULT, false, @@ -883,7 +923,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_CAPTURE: + case GOODIX_ENROLL_CAPTURE: fpi_device_report_finger_status_changes (device, FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NONE); @@ -894,7 +934,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_enroll_capture_cb); break; - case FP_ENROLL_UPDATE: + case GOODIX_ENROLL_UPDATE: dummy[0] = 1; dummy[1] = self->sensorcfg->config[2]; dummy[2] = self->sensorcfg->config[3]; @@ -905,7 +945,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_enroll_update_cb); break; - case FP_ENROLL_WAIT_FINGER_UP: + case GOODIX_ENROLL_WAIT_FINGER_UP: dummy[0] = 0; goodix_sensor_cmd (self, MOC_CMD0_FINGER_MODE, MOC_CMD1_SET_FINGER_UP, true, @@ -914,7 +954,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_finger_mode_cb); break; - case FP_ENROLL_CHECK_DUPLICATE: + case GOODIX_ENROLL_CHECK_DUPLICATE: goodix_sensor_cmd (self, MOC_CMD0_CHECK4DUPLICATE, MOC_CMD1_DEFAULT, false, (const guint8 *) &dummy, @@ -922,7 +962,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_enroll_check_duplicate_cb); break; - case FP_ENROLL_COMMIT: + case GOODIX_ENROLL_COMMIT: { fpi_device_get_enroll_data (device, &print); user_id = fpi_print_generate_user_id (print); @@ -975,7 +1015,7 @@ fp_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) } break; - case FP_ENROLL_PWR_BTN_SHIELD_OFF: + case GOODIX_ENROLL_PWR_BTN_SHIELD_OFF: { goodix_sensor_cmd (self, MOC_CMD0_PWR_BTN_SHIELD, MOC_CMD1_PWR_BTN_SHIELD_OFF, false, @@ -1066,7 +1106,7 @@ fp_init_cb_reset_or_complete (FpiDeviceGoodixMoc *self, { fp_warn ("Template storage appears to have been corrupted! Error was: %s", error->message); fp_warn ("A known reason for this to happen is a firmware bug triggered by another storage area being initialized."); - fpi_ssm_jump_to_state (self->task_ssm, FP_INIT_RESET_DEVICE); + fpi_ssm_jump_to_state (self->task_ssm, GOODIX_INIT_RESET_DEVICE); } else { @@ -1107,7 +1147,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) switch (fpi_ssm_get_cur_state (ssm)) { - case FP_INIT_VERSION: + case GOODIX_INIT_VERSION: goodix_sensor_cmd (self, MOC_CMD0_GET_VERSION, MOC_CMD1_DEFAULT, false, &dummy, @@ -1115,7 +1155,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_init_version_cb); break; - case FP_INIT_CONFIG: + case GOODIX_INIT_CONFIG: goodix_sensor_cmd (self, MOC_CMD0_UPDATE_CONFIG, MOC_CMD1_WRITE_CFG_TO_FLASH, false, (guint8 *) self->sensorcfg, @@ -1123,7 +1163,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_init_config_cb); break; - case FP_INIT_TEMPLATE_LIST: + case GOODIX_INIT_TEMPLATE_LIST: /* List prints to check whether the template DB was corrupted. * As of 2022-06-13 there is a known firmware issue that can cause the * stored templates for Linux to be corrupted when the Windows storage @@ -1138,7 +1178,7 @@ fp_init_sm_run_state (FpiSsm *ssm, FpDevice *device) fp_init_cb_reset_or_complete); break; - case FP_INIT_RESET_DEVICE: + case GOODIX_INIT_RESET_DEVICE: fp_warn ("Resetting device storage, you will need to enroll all prints again!"); goodix_sensor_cmd (self, MOC_CMD0_DELETETEMPLATE, MOC_CMD1_DELETE_ALL, FALSE, @@ -1452,7 +1492,7 @@ gx_fp_init (FpDevice *device) } self->task_ssm = fpi_ssm_new (device, fp_init_sm_run_state, - FP_INIT_NUM_STATES); + GOODIX_INIT_NUM_STATES); fpi_ssm_start (self->task_ssm, fp_init_ssm_done); @@ -1518,8 +1558,8 @@ gx_fp_verify_identify (FpDevice *device) FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); self->task_ssm = fpi_ssm_new_full (device, fp_verify_sm_run_state, - FP_VERIFY_NUM_STATES, - FP_VERIFY_PWR_BTN_SHIELD_OFF, + GOODIX_VERIFY_NUM_STATES, + GOODIX_VERIFY_PWR_BTN_SHIELD_OFF, "verify"); fpi_ssm_start (self->task_ssm, fp_verify_ssm_done); @@ -1535,8 +1575,8 @@ gx_fp_enroll (FpDevice *device) self->enroll_stage = 0; self->task_ssm = fpi_ssm_new_full (device, fp_enroll_sm_run_state, - FP_ENROLL_NUM_STATES, - FP_ENROLL_PWR_BTN_SHIELD_OFF, + GOODIX_ENROLL_NUM_STATES, + GOODIX_ENROLL_PWR_BTN_SHIELD_OFF, "enroll"); fpi_ssm_start (self->task_ssm, fp_enroll_ssm_done); @@ -1656,6 +1696,7 @@ static const FpIdEntry id_table[] = { { .vid = 0x27c6, .pid = 0x6A94, }, { .vid = 0x27c6, .pid = 0x6512, }, { .vid = 0x27c6, .pid = 0x689A, }, + { .vid = 0x27c6, .pid = 0x66A9, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; diff --git a/libfprint/drivers/goodixmoc/goodix.h b/libfprint/drivers/goodixmoc/goodix.h index 4ec5511f..ba7fce27 100644 --- a/libfprint/drivers/goodixmoc/goodix.h +++ b/libfprint/drivers/goodixmoc/goodix.h @@ -25,39 +25,40 @@ G_DECLARE_FINAL_TYPE (FpiDeviceGoodixMoc, fpi_device_goodixmoc, FPI, DEVICE_GOODIXMOC, FpDevice) typedef enum { - FP_CMD_SEND = 0, - FP_CMD_GET_ACK, - FP_CMD_GET_DATA, - FP_CMD_NUM_STATES, -} FpCmdState; + GOODIX_CMD_SEND = 0, + GOODIX_CMD_GET_ACK, + GOODIX_CMD_GET_DATA, + GOODIX_CMD_NUM_STATES, +} GoodixCmdState; typedef enum { - FP_INIT_VERSION = 0, - FP_INIT_CONFIG, - FP_INIT_TEMPLATE_LIST, - FP_INIT_RESET_DEVICE, - FP_INIT_NUM_STATES, -} FpInitState; + GOODIX_INIT_VERSION = 0, + GOODIX_INIT_CONFIG, + GOODIX_INIT_TEMPLATE_LIST, + GOODIX_INIT_RESET_DEVICE, + GOODIX_INIT_NUM_STATES, +} GoodixInitState; typedef enum { - FP_ENROLL_PWR_BTN_SHIELD_ON = 0, - FP_ENROLL_ENUM, - FP_ENROLL_CREATE, - FP_ENROLL_CAPTURE, - FP_ENROLL_UPDATE, - FP_ENROLL_WAIT_FINGER_UP, - FP_ENROLL_CHECK_DUPLICATE, - FP_ENROLL_COMMIT, - FP_ENROLL_PWR_BTN_SHIELD_OFF, - FP_ENROLL_NUM_STATES, -} FpEnrollState; + GOODIX_ENROLL_PWR_BTN_SHIELD_ON = 0, + GOODIX_ENROLL_ENUM, + GOODIX_ENROLL_CREATE, + GOODIX_ENROLL_CAPTURE, + GOODIX_ENROLL_UPDATE, + GOODIX_ENROLL_WAIT_FINGER_UP, + GOODIX_ENROLL_CHECK_DUPLICATE, + GOODIX_ENROLL_COMMIT, + GOODIX_ENROLL_PWR_BTN_SHIELD_OFF, + GOODIX_ENROLL_NUM_STATES, +} GoodixEnrollState; typedef enum { - FP_VERIFY_PWR_BTN_SHIELD_ON = 0, - FP_VERIFY_CAPTURE, - FP_VERIFY_IDENTIFY, - FP_VERIFY_PWR_BTN_SHIELD_OFF, - FP_VERIFY_NUM_STATES, -} FpVerifyState; + GOODIX_VERIFY_PWR_BTN_SHIELD_ON = 0, + GOODIX_VERIFY_CAPTURE, + GOODIX_VERIFY_IDENTIFY, + GOODIX_VERIFY_WAIT_FINGER_UP, + GOODIX_VERIFY_PWR_BTN_SHIELD_OFF, + GOODIX_VERIFY_NUM_STATES, +} GoodixVerifyState; diff --git a/libfprint/drivers/realtek/realtek.c b/libfprint/drivers/realtek/realtek.c index 425aadfa..4a0ddbc2 100644 --- a/libfprint/drivers/realtek/realtek.c +++ b/libfprint/drivers/realtek/realtek.c @@ -29,6 +29,7 @@ G_DEFINE_TYPE (FpiDeviceRealtek, fpi_device_realtek, FP_TYPE_DEVICE) static const FpIdEntry id_table[] = { { .vid = 0x0bda, .pid = 0x5813, }, { .vid = 0x0bda, .pid = 0x5816, }, + { .vid = 0x2541, .pid = 0xfa03, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c index 8b130937..0d918053 100644 --- a/libfprint/drivers/synaptics/synaptics.c +++ b/libfprint/drivers/synaptics/synaptics.c @@ -36,6 +36,7 @@ static const FpIdEntry id_table[] = { { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C4, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C6, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00DF, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00E9, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F0, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, }, @@ -53,11 +54,13 @@ static const FpIdEntry id_table[] = { { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0129, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x015F, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0168, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0169, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x016C, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0173, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0174, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019D, }, { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x019F, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x01A0, }, { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ }; diff --git a/libfprint/fp-device.c b/libfprint/fp-device.c index ab06e7f5..6040c1be 100644 --- a/libfprint/fp-device.c +++ b/libfprint/fp-device.c @@ -483,6 +483,9 @@ fp_device_class_init (FpDeviceClass *klass) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE); + /** + * FpDevice:open: (getter is_open): + */ properties[PROP_OPEN] = g_param_spec_boolean ("open", "Opened", diff --git a/libfprint/fprint-list-udev-hwdb.c b/libfprint/fprint-list-udev-hwdb.c index 5cb8d68a..6e2adb04 100644 --- a/libfprint/fprint-list-udev-hwdb.c +++ b/libfprint/fprint-list-udev-hwdb.c @@ -64,10 +64,12 @@ static const FpIdEntry allowlist_id_table[] = { { .vid = 0x06cb, .pid = 0x008a }, { .vid = 0x06cb, .pid = 0x009a }, { .vid = 0x06cb, .pid = 0x009b }, + { .vid = 0x06cb, .pid = 0x00a1 }, { .vid = 0x06cb, .pid = 0x00a2 }, { .vid = 0x06cb, .pid = 0x00a8 }, { .vid = 0x06cb, .pid = 0x00b7 }, { .vid = 0x06cb, .pid = 0x00bb }, + { .vid = 0x06cb, .pid = 0x00bc }, { .vid = 0x06cb, .pid = 0x00be }, { .vid = 0x06cb, .pid = 0x00cb }, { .vid = 0x06cb, .pid = 0x00c9 }, @@ -76,7 +78,6 @@ static const FpIdEntry allowlist_id_table[] = { { .vid = 0x06cb, .pid = 0x00dc }, { .vid = 0x06cb, .pid = 0x00e4 }, { .vid = 0x06cb, .pid = 0x00e7 }, - { .vid = 0x06cb, .pid = 0x00e9 }, { .vid = 0x06cb, .pid = 0x00fd }, { .vid = 0x06cb, .pid = 0x00ff }, { .vid = 0x0a5c, .pid = 0x5801 }, @@ -97,9 +98,11 @@ static const FpIdEntry allowlist_id_table[] = { { .vid = 0x0bda, .pid = 0x5812 }, { .vid = 0x10a5, .pid = 0x0007 }, { .vid = 0x10a5, .pid = 0x9200 }, + { .vid = 0x10a5, .pid = 0x9201 }, { .vid = 0x10a5, .pid = 0x9800 }, { .vid = 0x10a5, .pid = 0xa120 }, { .vid = 0x10a5, .pid = 0xa900 }, + { .vid = 0x10a5, .pid = 0xa921 }, { .vid = 0x10a5, .pid = 0xe340 }, { .vid = 0x1188, .pid = 0x9545 }, { .vid = 0x138a, .pid = 0x0007 }, @@ -120,7 +123,6 @@ static const FpIdEntry allowlist_id_table[] = { { .vid = 0x1c7a, .pid = 0x0300 }, { .vid = 0x1c7a, .pid = 0x0575 }, { .vid = 0x1c7a, .pid = 0x0576 }, - { .vid = 0x1c7a, .pid = 0x0584 }, { .vid = 0x1c7a, .pid = 0x0577 }, { .vid = 0x1c7a, .pid = 0x057e }, { .vid = 0x2541, .pid = 0x0236 }, @@ -154,12 +156,14 @@ static const FpIdEntry allowlist_id_table[] = { { .vid = 0x27c6, .pid = 0x581a }, { .vid = 0x27c6, .pid = 0x589a }, { .vid = 0x27c6, .pid = 0x5f10 }, + { .vid = 0x27c6, .pid = 0x5f91 }, { .vid = 0x27c6, .pid = 0x6382 }, { .vid = 0x2808, .pid = 0x9338 }, { .vid = 0x2808, .pid = 0x9348 }, { .vid = 0x2808, .pid = 0x93a9 }, { .vid = 0x2808, .pid = 0xa658 }, { .vid = 0x2808, .pid = 0xc652 }, + { .vid = 0x2808, .pid = 0xa553 }, { .vid = 0x298d, .pid = 0x2020 }, { .vid = 0x298d, .pid = 0x2033 }, { .vid = 0x2df0, .pid = 0x0003 }, diff --git a/libfprint/meson.build b/libfprint/meson.build index 813559a2..81fcdc95 100644 --- a/libfprint/meson.build +++ b/libfprint/meson.build @@ -278,6 +278,7 @@ libnbis = static_library('nbis', '-Wno-discarded-qualifiers', '-Wno-array-bounds', '-Wno-array-parameter', + '-Wno-unused-but-set-variable', ]), install: false) @@ -433,6 +434,7 @@ if get_option('introspection') 'GObject-2.0', 'GUsb-1.0', ], + fatal_warnings: true, install : true) libfprint_gir = libfprint_girtarget[0] libfprint_typelib = libfprint_girtarget[1] diff --git a/meson.build b/meson.build index a2128e5d..4968167e 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('libfprint', [ 'c', 'cpp' ], - version: '1.94.9', + version: '1.94.10', license: 'LGPLv2.1+', default_options: [ 'buildtype=debugoptimized', diff --git a/tests/goodixmoc/custom.pcapng b/tests/goodixmoc/custom.pcapng index 91925244..79c549f2 100644 Binary files a/tests/goodixmoc/custom.pcapng and b/tests/goodixmoc/custom.pcapng differ diff --git a/tests/goodixmoc/device b/tests/goodixmoc/device index 4f96b612..cd1a7556 100644 --- a/tests/goodixmoc/device +++ b/tests/goodixmoc/device @@ -1,30 +1,41 @@ -P: /devices/pci0000:00/0000:00:14.0/usb3/3-9 -N: bus/usb/003/004=12010002EF000040C627AC6300010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -E: DEVNAME=/dev/bus/usb/003/004 +P: /devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1/1-4/1-4.1 +N: bus/usb/001/007=12010002EF000040C6279C6000010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +E: BUSNUM=001 +E: DEVNAME=/dev/bus/usb/001/007 +E: DEVNUM=007 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=27c6/63ac/100 -E: TYPE=239/0/0 -E: BUSNUM=003 -E: DEVNUM=004 -E: MAJOR=189 -E: MINOR=259 -E: SUBSYSTEM=usb +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_MODEL=Goodix_Fingerprint_USB_Device +E: ID_MODEL_ENC=Goodix\x20Fingerprint\x20USB\x20Device +E: ID_MODEL_ID=609c +E: ID_PATH=pci-0000:c5:00.3-usb-0:4.1 +E: ID_PATH_TAG=pci-0000_c5_00_3-usb-0_4_1 +E: ID_PATH_WITH_USB_REVISION=pci-0000:c5:00.3-usbv2-0:4.1 +E: ID_PERSIST=0 +E: ID_REVISION=0100 +E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_Fingerprint_USB_Device_UIDB2A44C6F_XXXX_MOC_B0 +E: ID_SERIAL_SHORT=UIDB2A44C6F_XXXX_MOC_B0 +E: ID_USB_INTERFACES=:ff0000: +E: ID_USB_MODEL=Goodix_Fingerprint_USB_Device +E: ID_USB_MODEL_ENC=Goodix\x20Fingerprint\x20USB\x20Device +E: ID_USB_MODEL_ID=609c +E: ID_USB_REVISION=0100 +E: ID_USB_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_Fingerprint_USB_Device_UIDB2A44C6F_XXXX_MOC_B0 +E: ID_USB_SERIAL_SHORT=UIDB2A44C6F_XXXX_MOC_B0 +E: ID_USB_VENDOR=Goodix_Technology_Co.__Ltd. +E: ID_USB_VENDOR_ENC=Goodix\x20Technology\x20Co.\x2c\x20Ltd. +E: ID_USB_VENDOR_ID=27c6 E: ID_VENDOR=Goodix_Technology_Co.__Ltd. E: ID_VENDOR_ENC=Goodix\x20Technology\x20Co.\x2c\x20Ltd. -E: ID_VENDOR_ID=27c6 -E: ID_MODEL=Goodix_USB2.0_MISC -E: ID_MODEL_ENC=Goodix\x20USB2.0\x20MISC -E: ID_MODEL_ID=63ac -E: ID_REVISION=0100 -E: ID_SERIAL=Goodix_Technology_Co.__Ltd._Goodix_USB2.0_MISC_UID4C77C784_XXXX_MOC_B0 -E: ID_SERIAL_SHORT=UID4C77C784_XXXX_MOC_B0 -E: ID_BUS=usb -E: ID_USB_INTERFACES=:ff0000: E: ID_VENDOR_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd. -E: ID_AUTOSUSPEND=1 -E: ID_PATH=pci-0000:00:14.0-usb-0:9 -E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_9 +E: ID_VENDOR_ID=27c6 +E: MAJOR=189 +E: MINOR=6 +E: PRODUCT=27c6/609c/100 +E: SUBSYSTEM=usb +E: TYPE=239/0/0 A: authorized=1\n A: avoid_reset_quirk=0\n A: bConfigurationValue=1\n @@ -37,33 +48,39 @@ A: bNumConfigurations=1\n A: bNumInterfaces= 1\n A: bcdDevice=0100\n A: bmAttributes=a0\n -A: busnum=3\n -A: configuration=UID4C77C784_XXXX_MOC_B0\n -H: descriptors=12010002EF000040C627AC6300010102030109022000010103A0320904000002FF0000040705830240000007050102400000 -A: dev=189:259\n -A: devnum=4\n -A: devpath=9\n -L: driver=../../../../../bus/usb/drivers/usb -L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13/device:14/device:1f -A: idProduct=63ac\n +A: busnum=1\n +A: configuration=UIDB2A44C6F_XXXX_MOC_B0\n +H: descriptors=12010002EF000040C6279C6000010102030109022000010103A0320904000002FF0000040705830240000007050102400000 +A: dev=189:6\n +A: devnum=7\n +A: devpath=4.1\n +A: devspec=(null)\n +L: driver=../../../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1b/device:28/device:29/device:30/device:31 +A: idProduct=609c\n A: idVendor=27c6\n A: ltm_capable=no\n A: manufacturer=Goodix Technology Co., Ltd.\n A: maxchild=0\n -L: port=../3-0:1.0/usb3-port9 -A: power/active_duration=702588\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=center\n +A: physical_location/lid=no\n +A: physical_location/panel=left\n +A: physical_location/vertical_position=center\n +L: port=../1-4:1.0/1-4-port1 +A: power/active_duration=260514\n A: power/async=enabled\n A: power/autosuspend=2\n A: power/autosuspend_delay_ms=2000\n -A: power/connected_duration=78973756\n +A: power/connected_duration=4050949\n A: power/control=auto\n A: power/level=auto\n A: power/persist=1\n A: power/runtime_active_kids=0\n -A: power/runtime_active_time=707156\n +A: power/runtime_active_time=260998\n A: power/runtime_enabled=enabled\n A: power/runtime_status=active\n -A: power/runtime_suspended_time=78265226\n +A: power/runtime_suspended_time=3789785\n A: power/runtime_usage=0\n A: power/wakeup=disabled\n A: power/wakeup_abort_count=\n @@ -74,47 +91,157 @@ A: power/wakeup_expire_count=\n A: power/wakeup_last_time_ms=\n A: power/wakeup_max_time_ms=\n A: power/wakeup_total_time_ms=\n -A: product=Goodix USB2.0 MISC\n +A: product=Goodix Fingerprint USB Device\n A: quirks=0x0\n A: removable=fixed\n A: rx_lanes=1\n -A: serial=UID4C77C784_XXXX_MOC_B0\n +A: serial=UIDB2A44C6F_XXXX_MOC_B0\n A: speed=12\n A: tx_lanes=1\n -A: urbnum=5759\n +A: urbnum=948\n A: version= 2.00\n -P: /devices/pci0000:00/0000:00:14.0/usb3 -N: bus/usb/003/001=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C -E: DEVNAME=/dev/bus/usb/003/001 +P: /devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1/1-4 +N: bus/usb/001/004=1201000209000240E305100660600001000109022900010100E0320904000001090001000705810301000C0904000101090002000705810301000C +E: BUSNUM=001 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/001/004 +E: DEVNUM=004 E: DEVTYPE=usb_device E: DRIVER=usb -E: PRODUCT=1d6b/2/515 -E: TYPE=9/0/1 -E: BUSNUM=003 -E: DEVNUM=001 +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_c5_00_3-usb-0_4 +E: ID_MODEL=USB2.0_Hub +E: ID_MODEL_ENC=USB2.0\x20Hub +E: ID_MODEL_FROM_DATABASE=Hub +E: ID_MODEL_ID=0610 +E: ID_PATH=pci-0000:c5:00.3-usb-0:4 +E: ID_PATH_TAG=pci-0000_c5_00_3-usb-0_4 +E: ID_PATH_WITH_USB_REVISION=pci-0000:c5:00.3-usbv2-0:4 +E: ID_REVISION=6060 +E: ID_SERIAL=05e3_USB2.0_Hub +E: ID_USB_INTERFACES=:090001:090002: +E: ID_USB_MODEL=USB2.0_Hub +E: ID_USB_MODEL_ENC=USB2.0\x20Hub +E: ID_USB_MODEL_ID=0610 +E: ID_USB_REVISION=6060 +E: ID_USB_SERIAL=05e3_USB2.0_Hub +E: ID_USB_VENDOR=05e3 +E: ID_USB_VENDOR_ENC=05e3 +E: ID_USB_VENDOR_ID=05e3 +E: ID_VENDOR=05e3 +E: ID_VENDOR_ENC=05e3 +E: ID_VENDOR_FROM_DATABASE=Genesys Logic, Inc. +E: ID_VENDOR_ID=05e3 E: MAJOR=189 -E: MINOR=256 +E: MINOR=3 +E: PRODUCT=5e3/610/6060 E: SUBSYSTEM=usb -E: ID_VENDOR=Linux_5.15.0-57-generic_xhci-hcd -E: ID_VENDOR_ENC=Linux\x205.15.0-57-generic\x20xhci-hcd -E: ID_VENDOR_ID=1d6b +E: TAGS=:seat: +E: TYPE=9/0/2 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=02\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=6060\n +A: bmAttributes=e0\n +A: busnum=1\n +A: configuration= +H: descriptors=1201000209000240E305100660600001000109022900010100E0320904000001090001000705810301000C0904000101090002000705810301000C +A: dev=189:3\n +A: devnum=4\n +A: devpath=4\n +A: devspec=(null)\n +L: driver=../../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1b/device:28/device:29/device:30 +A: idProduct=0610\n +A: idVendor=05e3\n +A: ltm_capable=no\n +A: maxchild=4\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=center\n +A: physical_location/lid=no\n +A: physical_location/panel=left\n +A: physical_location/vertical_position=center\n +L: port=../1-0:1.0/usb1-port4 +A: power/active_duration=4051442\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=4051637\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=2\n +A: power/runtime_active_time=4051216\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=183\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=USB2.0 Hub\n +A: quirks=0x0\n +A: removable=fixed\n +A: rx_lanes=1\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=356\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1 +N: bus/usb/001/001=12010002090001406B1D020019060302010109021900010100E0000904000001090000000705810304000C +E: BUSNUM=001 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/001/001 +E: DEVNUM=001 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_c5_00_3 E: ID_MODEL=xHCI_Host_Controller E: ID_MODEL_ENC=xHCI\x20Host\x20Controller -E: ID_MODEL_ID=0002 -E: ID_REVISION=0515 -E: ID_SERIAL=Linux_5.15.0-57-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 -E: ID_SERIAL_SHORT=0000:00:14.0 -E: ID_BUS=usb -E: ID_USB_INTERFACES=:090000: -E: ID_VENDOR_FROM_DATABASE=Linux Foundation -E: ID_AUTOSUSPEND=1 E: ID_MODEL_FROM_DATABASE=2.0 root hub -E: ID_PATH=pci-0000:00:14.0 -E: ID_PATH_TAG=pci-0000_00_14_0 -E: ID_FOR_SEAT=usb-pci-0000_00_14_0 +E: ID_MODEL_ID=0002 +E: ID_PATH=pci-0000:c5:00.3 +E: ID_PATH_TAG=pci-0000_c5_00_3 +E: ID_REVISION=0619 +E: ID_SERIAL=Linux_6.19.0-custom+_xhci-hcd_xHCI_Host_Controller_0000:c5:00.3 +E: ID_SERIAL_SHORT=0000:c5:00.3 +E: ID_USB_INTERFACES=:090000: +E: ID_USB_MODEL=xHCI_Host_Controller +E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_USB_MODEL_ID=0002 +E: ID_USB_REVISION=0619 +E: ID_USB_SERIAL=Linux_6.19.0-custom+_xhci-hcd_xHCI_Host_Controller_0000:c5:00.3 +E: ID_USB_SERIAL_SHORT=0000:c5:00.3 +E: ID_USB_VENDOR=Linux_6.19.0-custom+_xhci-hcd +E: ID_USB_VENDOR_ENC=Linux\x206.19.0-custom+\x20xhci-hcd +E: ID_USB_VENDOR_ID=1d6b +E: ID_VENDOR=Linux_6.19.0-custom+_xhci-hcd +E: ID_VENDOR_ENC=Linux\x206.19.0-custom+\x20xhci-hcd +E: ID_VENDOR_FROM_DATABASE=Linux Foundation +E: ID_VENDOR_ID=1d6b +E: MAJOR=189 +E: MINOR=0 +E: PRODUCT=1d6b/2/619 +E: SUBSYSTEM=usb E: TAGS=:seat: -E: CURRENT_TAGS=:seat: +E: TYPE=9/0/1 A: authorized=1\n A: authorized_default=1\n A: avoid_reset_quirk=0\n @@ -126,31 +253,32 @@ A: bMaxPacketSize0=64\n A: bMaxPower=0mA\n A: bNumConfigurations=1\n A: bNumInterfaces= 1\n -A: bcdDevice=0515\n +A: bcdDevice=0619\n A: bmAttributes=e0\n -A: busnum=3\n +A: busnum=1\n A: configuration= -H: descriptors=12010002090001406B1D020015050302010109021900010100E0000904000001090000000705810304000C -A: dev=189:256\n +H: descriptors=12010002090001406B1D020019060302010109021900010100E0000904000001090000000705810304000C +A: dev=189:0\n A: devnum=1\n A: devpath=0\n -L: driver=../../../../bus/usb/drivers/usb -L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13/device:14 +A: devspec=(null)\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1b/device:28/device:29 A: idProduct=0002\n A: idVendor=1d6b\n A: interface_authorized_default=1\n A: ltm_capable=no\n -A: manufacturer=Linux 5.15.0-57-generic xhci-hcd\n -A: maxchild=12\n -A: power/active_duration=78971960\n +A: manufacturer=Linux 6.19.0-custom+ xhci-hcd\n +A: maxchild=5\n +A: power/active_duration=4052477\n A: power/async=enabled\n A: power/autosuspend=0\n A: power/autosuspend_delay_ms=0\n -A: power/connected_duration=78974992\n +A: power/connected_duration=4052477\n A: power/control=auto\n A: power/level=auto\n -A: power/runtime_active_kids=2\n -A: power/runtime_active_time=78973899\n +A: power/runtime_active_kids=3\n +A: power/runtime_active_time=4052477\n A: power/runtime_enabled=enabled\n A: power/runtime_status=active\n A: power/runtime_suspended_time=0\n @@ -168,51 +296,65 @@ A: product=xHCI Host Controller\n A: quirks=0x0\n A: removable=unknown\n A: rx_lanes=1\n -A: serial=0000:00:14.0\n +A: serial=0000:c5:00.3\n A: speed=480\n A: tx_lanes=1\n -A: urbnum=1824\n +A: urbnum=93\n A: version= 2.00\n -P: /devices/pci0000:00/0000:00:14.0 +P: /devices/pci0000:00/0000:00:08.1/0000:c5:00.3 E: DRIVER=xhci_hcd -E: PCI_CLASS=C0330 -E: PCI_ID=8086:51ED -E: PCI_SUBSYS_ID=1028:0B00 -E: PCI_SLOT_NAME=0000:00:14.0 -E: MODALIAS=pci:v00008086d000051EDsv00001028sd00000B00bc0Csc03i30 -E: SUBSYSTEM=pci +E: ID_PATH=pci-0000:c5:00.3 +E: ID_PATH_TAG=pci-0000_c5_00_3 E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller -E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI -E: ID_VENDOR_FROM_DATABASE=Intel Corporation +E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller +E: ID_VENDOR_FROM_DATABASE=Advanced Micro Devices, Inc. [AMD] +E: MODALIAS=pci:v00001022d000015B9sv0000F111sd00000005bc0Csc03i30 +E: PCI_CLASS=C0330 +E: PCI_ID=1022:15B9 +E: PCI_SLOT_NAME=0000:c5:00.3 +E: PCI_SUBSYS_ID=F111:0005 +E: SUBSYSTEM=pci A: ari_enabled=0\n A: broken_parity_status=0\n A: class=0x0c0330\n -H: config=8680ED51060490020130030C0000800004002A8F6200000000000000000000000000000000000000000000002810000B000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C1080000000000000000000000059087003808E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F100112000000 +H: config=2210B915060410000030030C100080000400209000000000000000000000000000000000000000000000000011F10500000000004800000000000000FF04000000000000000000000950080011F10500016403C80000000000000000000000003160000010A00200A18F000010290000040D400040000411000000000000000000000000000000001F007100000000001E00800100000100000000000000000005C08000000000000000000000000000000000000000000000000000000000001100008000E00F0000F00F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B00012A010001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A: consistent_dma_mask_bits=64\n +A: current_link_speed=16.0 GT/s PCIe\n +A: current_link_width=16\n A: d3cold_allowed=1\n A: dbc=disabled\n -A: device=0x51ed\n +A: dbc_bInterfaceProtocol=01\n +A: dbc_bcdDevice=0010\n +A: dbc_idProduct=0010\n +A: dbc_idVendor=1d6b\n +A: dbc_poll_interval_ms=64\n +A: device=0x15b9\n +A: devspec= A: dma_mask_bits=64\n -L: driver=../../../bus/pci/drivers/xhci_hcd +L: driver=../../../../bus/pci/drivers/xhci_hcd A: driver_override=(null)\n A: enable=1\n -L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:13 -L: iommu=../../virtual/iommu/dmar1 -L: iommu_group=../../../kernel/iommu_groups/13 -A: irq=167\n -A: local_cpulist=0-19\n -A: local_cpus=fffff\n -A: modalias=pci:v00008086d000051EDsv00001028sd00000B00bc0Csc03i30\n +L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1b/device:28 +L: iommu=../../0000:00:00.2/iommu/ivhd0 +L: iommu_group=../../../../kernel/iommu_groups/24 +A: irq=49\n +A: link/l0s_aspm=0\n +A: link/l1_aspm=0\n +A: local_cpulist=0-15\n +A: local_cpus=ffff\n +A: max_link_speed=16.0 GT/s PCIe\n +A: max_link_width=16\n +A: modalias=pci:v00001022d000015B9sv0000F111sd00000005bc0Csc03i30\n A: msi_bus=1\n -A: msi_irqs/167=msi\n +A: msi_irqs/50=msix\n A: numa_node=-1\n -A: pools=poolinfo - 0.1\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 13 14 2112 14\nxHCI ring segments 38 42 4096 42\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 3 32 128 1\nbuffer-32 0 0 32 0\n +A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 256 port bw ctx arrays 0 0 256 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 16 17 2112 17\nxHCI ring segments 69 73 4096 73\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 24 32 128 1\nbuffer-32 0 0 32 0\n A: power/async=enabled\n A: power/control=auto\n A: power/runtime_active_kids=1\n -A: power/runtime_active_time=78974886\n +A: power/runtime_active_time=4056729\n A: power/runtime_enabled=enabled\n A: power/runtime_status=active\n A: power/runtime_suspended_time=0\n @@ -227,9 +369,79 @@ A: power/wakeup_last_time_ms=0\n A: power/wakeup_max_time_ms=0\n A: power/wakeup_total_time_ms=0\n A: power_state=D0\n -A: resource=0x000000628f2a0000 0x000000628f2affff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n -A: revision=0x01\n -A: subsystem_device=0x0b00\n -A: subsystem_vendor=0x1028\n -A: vendor=0x8086\n +A: reset_method=pm\n +A: resource=0x0000000090200000 0x00000000902fffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n +A: revision=0x00\n +A: subsystem_device=0x0005\n +A: subsystem_vendor=0xf111\n +A: vendor=0x1022\n + +P: /devices/pci0000:00/0000:00:08.1 +E: DRIVER=pcieport +E: ID_MODEL_FROM_DATABASE=Phoenix Internal GPP Bridge to Bus [C:A] +E: ID_PATH=pci-0000:00:08.1 +E: ID_PATH_TAG=pci-0000_00_08_1 +E: ID_PCI_CLASS_FROM_DATABASE=Bridge +E: ID_PCI_INTERFACE_FROM_DATABASE=Normal decode +E: ID_PCI_SUBCLASS_FROM_DATABASE=PCI bridge +E: ID_VENDOR_FROM_DATABASE=Advanced Micro Devices, Inc. [AMD] +E: MODALIAS=pci:v00001022d000014EBsv00000005sd0000F111bc06sc04i00 +E: PCI_CLASS=60400 +E: PCI_ID=1022:14EB +E: PCI_SLOT_NAME=0000:00:08.1 +E: PCI_SUBSYS_ID=0005:F111 +E: SUBSYSTEM=pci +A: ari_enabled=0\n +A: broken_parity_status=0\n +A: class=0x060400\n +H: config=2210EB14070410000000040610008100000000000000000000C5C5001111000000905090011071208E0000008E000000000000005000000000000000FF01020000000000000000000000000000000000015803C80000000010A042002280000010290000040D7000400C04310000000000004000180001000000000040003100000000001E00800144001F00000000000000000000000000000000000000000005C081000000E0FE0000000000000000000000000000000000000000000000000D000000050011F100000000000000000000000000000000000000000000000000000000FC27FFFF0000000000000000000000000000000000000000000000000B000127010001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001900012A00000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F000000000D0001405F001D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000250001410100008001000080000000002600014500000000000000000F00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000002700010000000000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C0000389C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +A: consistent_dma_mask_bits=32\n +A: current_link_speed=16.0 GT/s PCIe\n +A: current_link_width=16\n +A: d3cold_allowed=1\n +A: device=0x14eb\n +A: devspec= +A: dma_mask_bits=32\n +L: driver=../../../bus/pci/drivers/pcieport +A: driver_override=(null)\n +A: enable=2\n +L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:1b +L: iommu=../0000:00:00.2/iommu/ivhd0 +L: iommu_group=../../../kernel/iommu_groups/9 +A: irq=44\n +A: local_cpulist=0-15\n +A: local_cpus=ffff\n +A: max_link_speed=16.0 GT/s PCIe\n +A: max_link_width=16\n +A: modalias=pci:v00001022d000014EBsv00000005sd0000F111bc06sc04i00\n +A: msi_bus=1\n +A: msi_irqs/44=msi\n +A: numa_node=-1\n +A: power/async=enabled\n +A: power/autosuspend_delay_ms=100\n +A: power/control=auto\n +A: power/runtime_active_kids=4\n +A: power/runtime_active_time=4056739\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: power_state=D0\n +A: reset_method=pm\n +A: resource=0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000001000 0x0000000000001fff 0x0000000000000101\n0x0000000090000000 0x00000000905fffff 0x0000000000000200\n0x0000008e10000000 0x0000008e207fffff 0x0000000000102201\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n +A: revision=0x00\n +A: secondary_bus_number=197\n +A: subordinate_bus_number=197\n +A: subsystem_device=0xf111\n +A: subsystem_vendor=0x0005\n +A: vendor=0x1022\n diff --git a/tests/valgrind-python.supp b/tests/valgrind-python.supp index ff7d7797..65bcc51a 100644 --- a/tests/valgrind-python.supp +++ b/tests/valgrind-python.supp @@ -95,3 +95,24 @@ fun:realloc obj:/usr/lib/*/libpython3*.so.* } + +{ + ignore__pygobject_possible_leaks + Memcheck:Leak + match-leak-kinds: possible + ... + obj:/usr/lib*/python*/site-packages/gi/_gi.cpython-*.so + obj:/usr/lib*/libpython3.*.so.* +} + +{ + ignore__pygobject_instance_leaks + Memcheck:Leak + match-leak-kinds: definite + ... + fun:g_type_create_instance + fun:gi_info_new_full + ... + obj:/usr/lib*/python*/site-packages/gi/_gi.cpython-*.so + obj:/usr/lib*/libpython3.*.so.* +}