diff --git a/debian/patches/Added-ELAN-0c6e-from-ROG-Flow-X13.patch b/debian/patches/Added-ELAN-0c6e-from-ROG-Flow-X13.patch new file mode 100644 index 00000000..c2ee7eab --- /dev/null +++ b/debian/patches/Added-ELAN-0c6e-from-ROG-Flow-X13.patch @@ -0,0 +1,33 @@ +From: Liran Piade +Date: Mon, 5 Jul 2021 14:18:42 +0000 +Subject: Added ELAN 0c6e (from ROG Flow X13) + +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/elan.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index afc86f4..b9ec5da 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -123,6 +123,7 @@ usb:v04F3p0C42* + usb:v04F3p0C4D* + usb:v04F3p0C4F* + usb:v04F3p0C63* ++usb:v04F3p0C6E* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver etes603 +diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h +index 00afe79..e14977e 100644 +--- a/libfprint/drivers/elan.h ++++ b/libfprint/drivers/elan.h +@@ -218,6 +218,7 @@ static const FpIdEntry elan_id_table[] = { + {.vid = ELAN_VEND_ID, .pid = 0x0c4d, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c4f, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c63, .driver_data = ELAN_ALL_DEV}, ++ {.vid = ELAN_VEND_ID, .pid = 0x0c6e, .driver_data = ELAN_ALL_DEV}, + {.vid = 0, .pid = 0, .driver_data = 0}, + }; + diff --git a/debian/patches/elan-Add-PID-0c3d.patch b/debian/patches/elan-Add-PID-0c3d.patch new file mode 100644 index 00000000..317a55de --- /dev/null +++ b/debian/patches/elan-Add-PID-0c3d.patch @@ -0,0 +1,36 @@ +From: Benjamin Berg +Date: Wed, 28 Apr 2021 15:23:49 +0200 +Subject: elan: Add PID 0c3d + +Users are reporting that the sensor works fine. + +Closes: #214 +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/elan.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 98f391a..b763f80 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -118,6 +118,7 @@ usb:v04F3p0C30* + usb:v04F3p0C31* + usb:v04F3p0C32* + usb:v04F3p0C33* ++usb:v04F3p0C3D* + usb:v04F3p0C42* + usb:v04F3p0C4D* + ID_AUTOSUSPEND=1 +diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h +index 989778e..4b93cab 100644 +--- a/libfprint/drivers/elan.h ++++ b/libfprint/drivers/elan.h +@@ -213,6 +213,7 @@ static const FpIdEntry elan_id_table[] = { + {.vid = ELAN_VEND_ID, .pid = 0x0c31, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c32, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c33, .driver_data = ELAN_ALL_DEV}, ++ {.vid = ELAN_VEND_ID, .pid = 0x0c3d, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c42, .driver_data = ELAN_0C42}, + {.vid = ELAN_VEND_ID, .pid = 0x0c4d, .driver_data = ELAN_ALL_DEV}, + {.vid = 0, .pid = 0, .driver_data = 0}, diff --git a/debian/patches/elan-Add-PID-0c4f.patch b/debian/patches/elan-Add-PID-0c4f.patch new file mode 100644 index 00000000..ccc77ace --- /dev/null +++ b/debian/patches/elan-Add-PID-0c4f.patch @@ -0,0 +1,55 @@ +From: Benjamin Berg +Date: Wed, 28 Apr 2021 15:43:14 +0200 +Subject: elan: Add PID 0c4f + +Users are reporting that the sensor works fine. +--- + data/autosuspend.hwdb | 2 +- + libfprint/drivers/elan.h | 1 + + libfprint/fprint-list-udev-hwdb.c | 1 - + 3 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index b763f80..8aad795 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -121,6 +121,7 @@ usb:v04F3p0C33* + usb:v04F3p0C3D* + usb:v04F3p0C42* + usb:v04F3p0C4D* ++usb:v04F3p0C4F* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver etes603 +@@ -209,7 +210,6 @@ usb:v04F3p036B* + usb:v04F3p0C00* + usb:v04F3p0C4B* + usb:v04F3p0C4C* +-usb:v04F3p0C4F* + usb:v04F3p0C57* + usb:v04F3p2706* + usb:v06CBp0081* +diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h +index 4b93cab..b6a0fc1 100644 +--- a/libfprint/drivers/elan.h ++++ b/libfprint/drivers/elan.h +@@ -216,6 +216,7 @@ static const FpIdEntry elan_id_table[] = { + {.vid = ELAN_VEND_ID, .pid = 0x0c3d, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c42, .driver_data = ELAN_0C42}, + {.vid = ELAN_VEND_ID, .pid = 0x0c4d, .driver_data = ELAN_ALL_DEV}, ++ {.vid = ELAN_VEND_ID, .pid = 0x0c4f, .driver_data = ELAN_ALL_DEV}, + {.vid = 0, .pid = 0, .driver_data = 0}, + }; + +diff --git a/libfprint/fprint-list-udev-hwdb.c b/libfprint/fprint-list-udev-hwdb.c +index 2a78e81..8f651c0 100644 +--- a/libfprint/fprint-list-udev-hwdb.c ++++ b/libfprint/fprint-list-udev-hwdb.c +@@ -33,7 +33,6 @@ static const FpIdEntry whitelist_id_table[] = { + { .vid = 0x04f3, .pid = 0x0c00 }, + { .vid = 0x04f3, .pid = 0x0c4b }, + { .vid = 0x04f3, .pid = 0x0c4c }, +- { .vid = 0x04f3, .pid = 0x0c4f }, + { .vid = 0x04f3, .pid = 0x0c57 }, + { .vid = 0x04f3, .pid = 0x2706 }, + { .vid = 0x06cb, .pid = 0x0081 }, diff --git a/debian/patches/elan-Add-PID-0c63.patch b/debian/patches/elan-Add-PID-0c63.patch new file mode 100644 index 00000000..5ab3bf98 --- /dev/null +++ b/debian/patches/elan-Add-PID-0c63.patch @@ -0,0 +1,36 @@ +From: Benjamin Berg +Date: Wed, 28 Apr 2021 15:47:18 +0200 +Subject: elan: Add PID 0c63 + +Users are reporting that the sensor works fine. + +Closes: #357 +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/elan.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 8aad795..afc86f4 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -122,6 +122,7 @@ usb:v04F3p0C3D* + usb:v04F3p0C42* + usb:v04F3p0C4D* + usb:v04F3p0C4F* ++usb:v04F3p0C63* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver etes603 +diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h +index b6a0fc1..00afe79 100644 +--- a/libfprint/drivers/elan.h ++++ b/libfprint/drivers/elan.h +@@ -217,6 +217,7 @@ static const FpIdEntry elan_id_table[] = { + {.vid = ELAN_VEND_ID, .pid = 0x0c42, .driver_data = ELAN_0C42}, + {.vid = ELAN_VEND_ID, .pid = 0x0c4d, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c4f, .driver_data = ELAN_ALL_DEV}, ++ {.vid = ELAN_VEND_ID, .pid = 0x0c63, .driver_data = ELAN_ALL_DEV}, + {.vid = 0, .pid = 0, .driver_data = 0}, + }; + diff --git a/debian/patches/elan-Add-PID-0x0c58.patch b/debian/patches/elan-Add-PID-0x0c58.patch new file mode 100644 index 00000000..3375834d --- /dev/null +++ b/debian/patches/elan-Add-PID-0x0c58.patch @@ -0,0 +1,33 @@ +From: mozgovoy +Date: Thu, 29 Jul 2021 20:40:07 +0300 +Subject: elan: Add PID 0x0c58 + +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/elan.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index b9ec5da..e46f172 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -124,6 +124,7 @@ usb:v04F3p0C4D* + usb:v04F3p0C4F* + usb:v04F3p0C63* + usb:v04F3p0C6E* ++usb:v04F3p0C58* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver etes603 +diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h +index e14977e..33f3aef 100644 +--- a/libfprint/drivers/elan.h ++++ b/libfprint/drivers/elan.h +@@ -219,6 +219,7 @@ static const FpIdEntry elan_id_table[] = { + {.vid = ELAN_VEND_ID, .pid = 0x0c4f, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c63, .driver_data = ELAN_ALL_DEV}, + {.vid = ELAN_VEND_ID, .pid = 0x0c6e, .driver_data = ELAN_ALL_DEV}, ++ {.vid = ELAN_VEND_ID, .pid = 0x0c58, .driver_data = ELAN_ALL_DEV}, + {.vid = 0, .pid = 0, .driver_data = 0}, + }; + diff --git a/debian/patches/goodixmoc-Add-PID-6A94.patch b/debian/patches/goodixmoc-Add-PID-6A94.patch new file mode 100644 index 00000000..9054c0ee --- /dev/null +++ b/debian/patches/goodixmoc-Add-PID-6A94.patch @@ -0,0 +1,33 @@ +From: Nelson Jeppesen +Date: Fri, 7 May 2021 13:02:11 -0700 +Subject: goodixmoc: Add PID 6A94 + +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/goodixmoc/goodix.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 14f4518..7d03dba 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -133,6 +133,7 @@ usb:v27C6p60A2* + usb:v27C6p63AC* + usb:v27C6p639C* + usb:v27C6p6594* ++usb:v27C6p6A94* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver synaptics +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 77278c6..d67d392 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1554,6 +1554,7 @@ static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, + { .vid = 0x27c6, .pid = 0x6594, }, ++ { .vid = 0x27c6, .pid = 0x6A94, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; + diff --git a/debian/patches/goodixmoc-Remove-internal-cancellable.patch b/debian/patches/goodixmoc-Remove-internal-cancellable.patch new file mode 100644 index 00000000..845e8a75 --- /dev/null +++ b/debian/patches/goodixmoc-Remove-internal-cancellable.patch @@ -0,0 +1,79 @@ +From: Benjamin Berg +Date: Fri, 23 Apr 2021 10:58:46 +0200 +Subject: goodixmoc: Remove internal cancellable + +The driver has an internal cancellable that simply forwards the external +cancellation in the cancel callback. This is not really needed, we can +instead just use the external cancellable directly by fetching it using +fpi_device_get_cancellable(). +--- + libfprint/drivers/goodixmoc/goodix.c | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index d67d392..38b6ff4 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -54,7 +54,6 @@ struct _FpiDeviceGoodixMoc + gint enroll_stage; + gint max_enroll_stage; + gint max_stored_prints; +- GCancellable *cancellable; + GPtrArray *list_result; + guint8 template_id[TEMPLATE_ID_SIZE]; + gboolean is_enroll_identify; +@@ -220,7 +219,7 @@ fp_cmd_run_state (FpiSsm *ssm, + fpi_usb_transfer_fill_bulk (transfer, EP_IN, EP_IN_MAX_BUF_SIZE); + fpi_usb_transfer_submit (transfer, + self->cmd_cancelable ? 0 : DATA_TIMEOUT, +- self->cmd_cancelable ? self->cancellable : NULL, ++ self->cmd_cancelable ? fpi_device_get_cancellable (dev) : NULL, + fp_cmd_receive_cb, + fpi_ssm_get_data (ssm)); + break; +@@ -1348,8 +1347,6 @@ gx_fp_init (FpDevice *device) + self->max_stored_prints = FP_MAX_FINGERNUM; + self->is_power_button_shield_on = false; + +- self->cancellable = g_cancellable_new (); +- + self->sensorcfg = g_new0 (gxfp_sensor_cfg_t, 1); + + ret = gx_proto_init_sensor_config (self->sensorcfg); +@@ -1387,7 +1384,6 @@ gx_fp_release_interface (FpiDeviceGoodixMoc *self, + { + g_autoptr(GError) release_error = NULL; + +- g_clear_object (&self->cancellable); + g_clear_pointer (&self->sensorcfg, g_free); + + /* Release usb interface */ +@@ -1533,20 +1529,6 @@ fpi_device_goodixmoc_init (FpiDeviceGoodixMoc *self) + + } + +-static void +-gx_fp_cancel (FpDevice *device) +-{ +- FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device); +- +- /* Cancel any current interrupt transfer (resulting us to go into +- * response reading mode again); then create a new cancellable +- * for the next transfers. */ +- g_cancellable_cancel (self->cancellable); +- g_clear_object (&self->cancellable); +- self->cancellable = g_cancellable_new (); +- +-} +- + static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x5840, }, + { .vid = 0x27c6, .pid = 0x6496, }, +@@ -1577,7 +1559,6 @@ fpi_device_goodixmoc_class_init (FpiDeviceGoodixMocClass *klass) + dev_class->enroll = gx_fp_enroll; + dev_class->delete = gx_fp_template_delete; + dev_class->list = gx_fp_template_list; +- dev_class->cancel = gx_fp_cancel; + dev_class->verify = gx_fp_verify_identify; + dev_class->identify = gx_fp_verify_identify; + } diff --git a/debian/patches/goodixmoc-Returned-device-print-matched-by-verify-identif.patch b/debian/patches/goodixmoc-Returned-device-print-matched-by-verify-identif.patch new file mode 100644 index 00000000..fbfdd135 --- /dev/null +++ b/debian/patches/goodixmoc-Returned-device-print-matched-by-verify-identif.patch @@ -0,0 +1,153 @@ +From: Benjamin Berg +Date: Fri, 17 Sep 2021 18:11:48 +0200 +Subject: goodixmoc: Returned device print matched by verify/identify + +This is needed for the fprintd duplicate checking code. The information +is needed to delete stale prints automatically from the device. + +Related: #415 +--- + libfprint/drivers/goodixmoc/goodix.c | 90 ++++++++++++++++++------------------ + 1 file changed, 46 insertions(+), 44 deletions(-) + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 96e7157..5de8932 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -79,6 +79,44 @@ static gboolean parse_print_data (GVariant *data, + gsize *tid_len, + const guint8 **user_id, + gsize *user_id_len); ++ ++static FpPrint * ++fp_print_from_template (FpiDeviceGoodixMoc *self, template_format_t *template) ++{ ++ FpPrint *print; ++ GVariant *data; ++ GVariant *tid; ++ GVariant *uid; ++ g_autofree gchar *userid = NULL; ++ ++ userid = g_strndup ((gchar *) template->payload.data, template->payload.size); ++ ++ print = fp_print_new (FP_DEVICE (self)); ++ ++ tid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, ++ template->tid, ++ TEMPLATE_ID_SIZE, ++ 1); ++ ++ uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, ++ template->payload.data, ++ template->payload.size, ++ 1); ++ ++ data = g_variant_new ("(y@ay@ay)", ++ template->finger_index, ++ tid, ++ uid); ++ ++ fpi_print_set_type (print, FPI_PRINT_RAW); ++ fpi_print_set_device_stored (print, TRUE); ++ g_object_set (print, "fpi-data", data, NULL); ++ g_object_set (print, "description", userid, NULL); ++ fpi_print_fill_from_user_id (print, userid); ++ ++ return print; ++} ++ + /****************************************************************************** + * + * fp_cmd_xxx Function +@@ -385,6 +423,7 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, + { + g_autoptr(GPtrArray) templates = NULL; + FpDevice *device = FP_DEVICE (self); ++ FpPrint *match = NULL; + FpPrint *print = NULL; + gint cnt = 0; + gboolean find = false; +@@ -396,6 +435,8 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, + } + if (resp->verify.match) + { ++ match = fp_print_from_template (self, &resp->verify.template); ++ + if (fpi_device_get_current_action (device) == FPI_DEVICE_ACTION_VERIFY) + { + templates = g_ptr_array_sized_new (1); +@@ -409,22 +450,9 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, + } + for (cnt = 0; cnt < templates->len; cnt++) + { +- g_autoptr(GVariant) data = NULL; +- guint8 finger; +- const guint8 *user_id; +- gsize user_id_len = 0; +- const guint8 *tid; +- gsize tid_len = 0; + print = g_ptr_array_index (templates, cnt); +- g_object_get (print, "fpi-data", &data, NULL); +- if (!parse_print_data (data, &finger, &tid, &tid_len, &user_id, &user_id_len)) +- { +- fpi_ssm_mark_failed (self->task_ssm, +- fpi_device_error_new_msg (FP_DEVICE_ERROR_DATA_INVALID, +- "Parse print error")); +- return; +- } +- if (memcmp (&resp->verify.template.tid, tid, TEMPLATE_ID_SIZE) == 0) ++ ++ if (fp_print_equal (print, match)) + { + find = true; + break; +@@ -434,9 +462,9 @@ fp_verify_cb (FpiDeviceGoodixMoc *self, + if (find) + { + if (fpi_device_get_current_action (device) == FPI_DEVICE_ACTION_VERIFY) +- fpi_device_verify_report (device, FPI_MATCH_SUCCESS, NULL, error); ++ fpi_device_verify_report (device, FPI_MATCH_SUCCESS, match, error); + else +- fpi_device_identify_report (device, print, print, error); ++ fpi_device_identify_report (device, print, match, error); + } + } + +@@ -1224,36 +1252,10 @@ fp_template_list_cb (FpiDeviceGoodixMoc *self, + + for (int n = 0; n < resp->finger_list_resp.finger_num; n++) + { +- GVariant *data = NULL; +- GVariant *tid = NULL; +- GVariant *uid = NULL; + FpPrint *print; +- gchar *userid; +- +- userid = (gchar *) resp->finger_list_resp.finger_list[n].payload.data; +- +- print = fp_print_new (FP_DEVICE (self)); +- +- tid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, +- resp->finger_list_resp.finger_list[n].tid, +- TEMPLATE_ID_SIZE, +- 1); +- +- uid = g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, +- resp->finger_list_resp.finger_list[n].payload.data, +- resp->finger_list_resp.finger_list[n].payload.size, +- 1); + +- data = g_variant_new ("(y@ay@ay)", +- resp->finger_list_resp.finger_list[n].finger_index, +- tid, +- uid); ++ print = fp_print_from_template (self, &resp->finger_list_resp.finger_list[n]); + +- fpi_print_set_type (print, FPI_PRINT_RAW); +- fpi_print_set_device_stored (print, TRUE); +- g_object_set (print, "fpi-data", data, NULL); +- g_object_set (print, "description", userid, NULL); +- fpi_print_fill_from_user_id (print, userid); + g_ptr_array_add (self->list_result, g_object_ref_sink (print)); + } + diff --git a/debian/patches/goodixmoc-add-PID-609C-6584-658C-6592-659C.patch b/debian/patches/goodixmoc-add-PID-609C-6584-658C-6592-659C.patch new file mode 100644 index 00000000..27a18e15 --- /dev/null +++ b/debian/patches/goodixmoc-add-PID-609C-6584-658C-6592-659C.patch @@ -0,0 +1,71 @@ +From: boger +Date: Wed, 23 Jun 2021 15:14:33 +0800 +Subject: goodixmoc: add PID 609C/6584/658C/6592/659C + +add some new PID support, +609C: Framework fingerprint sensor +65xx: Thinkpad series fingerprint sensor + +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/1945296 +--- + data/autosuspend.hwdb | 9 +++++++-- + libfprint/drivers/goodixmoc/goodix.c | 13 +++++++++++-- + 2 files changed, 18 insertions(+), 4 deletions(-) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 7d03dba..38e9d17 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -128,11 +128,16 @@ usb:v1C7Ap0603* + + # Supported by libfprint driver goodixmoc + usb:v27C6p5840* +-usb:v27C6p6496* ++usb:v27C6p609C* + usb:v27C6p60A2* +-usb:v27C6p63AC* + usb:v27C6p639C* ++usb:v27C6p63AC* ++usb:v27C6p6496* ++usb:v27C6p6584* ++usb:v27C6p658C* ++usb:v27C6p6592* + usb:v27C6p6594* ++usb:v27C6p659C* + usb:v27C6p6A94* + ID_AUTOSUSPEND=1 + +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 38b6ff4..667efb0 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1317,6 +1317,10 @@ gx_fp_probe (FpDevice *device) + { + case 0x6496: + case 0x60A2: ++ case 0x609C: ++ case 0x639C: ++ case 0x63AC: ++ case 0x6A94: + self->max_enroll_stage = 12; + break; + +@@ -1531,11 +1535,16 @@ fpi_device_goodixmoc_init (FpiDeviceGoodixMoc *self) + + static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x5840, }, +- { .vid = 0x27c6, .pid = 0x6496, }, ++ { .vid = 0x27c6, .pid = 0x609C, }, + { .vid = 0x27c6, .pid = 0x60A2, }, +- { .vid = 0x27c6, .pid = 0x63AC, }, + { .vid = 0x27c6, .pid = 0x639C, }, ++ { .vid = 0x27c6, .pid = 0x63AC, }, ++ { .vid = 0x27c6, .pid = 0x6496, }, ++ { .vid = 0x27c6, .pid = 0x6584, }, ++ { .vid = 0x27c6, .pid = 0x658C, }, ++ { .vid = 0x27c6, .pid = 0x6592, }, + { .vid = 0x27c6, .pid = 0x6594, }, ++ { .vid = 0x27c6, .pid = 0x659C, }, + { .vid = 0x27c6, .pid = 0x6A94, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; diff --git a/debian/patches/goodixmoc-add-PID-63BC.patch b/debian/patches/goodixmoc-add-PID-63BC.patch new file mode 100644 index 00000000..6350edf3 --- /dev/null +++ b/debian/patches/goodixmoc-add-PID-63BC.patch @@ -0,0 +1,42 @@ +From: boger +Date: Fri, 17 Sep 2021 19:28:51 +0800 +Subject: goodixmoc: add PID 63BC 63BC: Dell XPS series fingerprint sensor + +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libfprint/+bug/1945298 +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/goodixmoc/goodix.c | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 38e9d17..a09ed91 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -132,6 +132,7 @@ usb:v27C6p609C* + usb:v27C6p60A2* + usb:v27C6p639C* + usb:v27C6p63AC* ++usb:v27C6p63BC* + usb:v27C6p6496* + usb:v27C6p6584* + usb:v27C6p658C* +diff --git a/libfprint/drivers/goodixmoc/goodix.c b/libfprint/drivers/goodixmoc/goodix.c +index 667efb0..96e7157 100644 +--- a/libfprint/drivers/goodixmoc/goodix.c ++++ b/libfprint/drivers/goodixmoc/goodix.c +@@ -1320,6 +1320,7 @@ gx_fp_probe (FpDevice *device) + case 0x609C: + case 0x639C: + case 0x63AC: ++ case 0x63BC: + case 0x6A94: + self->max_enroll_stage = 12; + break; +@@ -1539,6 +1540,7 @@ static const FpIdEntry id_table[] = { + { .vid = 0x27c6, .pid = 0x60A2, }, + { .vid = 0x27c6, .pid = 0x639C, }, + { .vid = 0x27c6, .pid = 0x63AC, }, ++ { .vid = 0x27c6, .pid = 0x63BC, }, + { .vid = 0x27c6, .pid = 0x6496, }, + { .vid = 0x27c6, .pid = 0x6584, }, + { .vid = 0x27c6, .pid = 0x658C, }, diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000..fcb605d9 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,15 @@ +goodixmoc-Add-PID-6A94.patch +goodixmoc-Remove-internal-cancellable.patch +goodixmoc-add-PID-609C-6584-658C-6592-659C.patch +goodixmoc-add-PID-63BC.patch +goodixmoc-Returned-device-print-matched-by-verify-identif.patch +synaptics-Remove-usb-reset.patch +synaptics-add-new-PID-0x100-and-remove-PID-0xE7.patch +synaptics-Keep-supporting-0xE7.patch +synaptics-Send-a-cancel-to-sensor-if-it-returns-busy.patch +synaptics-Fix-warning-about-missing-initialization.patch +elan-Add-PID-0c3d.patch +elan-Add-PID-0c4f.patch +elan-Add-PID-0c63.patch +Added-ELAN-0c6e-from-ROG-Flow-X13.patch +elan-Add-PID-0x0c58.patch diff --git a/debian/patches/synaptics-Fix-warning-about-missing-initialization.patch b/debian/patches/synaptics-Fix-warning-about-missing-initialization.patch new file mode 100644 index 00000000..9eb0e477 --- /dev/null +++ b/debian/patches/synaptics-Fix-warning-about-missing-initialization.patch @@ -0,0 +1,23 @@ +From: Benjamin Berg +Date: Wed, 30 Jun 2021 15:56:45 +0200 +Subject: synaptics: Fix warning about missing initialization + +The compiler seems to (incorrectly) think that cleanup might happen +before the variable has been initialized. +--- + libfprint/drivers/synaptics/synaptics.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c +index 85de41f..fe66f03 100644 +--- a/libfprint/drivers/synaptics/synaptics.c ++++ b/libfprint/drivers/synaptics/synaptics.c +@@ -461,7 +461,7 @@ create_print (FpiDeviceSynaptics *self, + guint8 finger_id) + { + FpPrint *print; +- g_autofree gchar *user_id_safe; ++ g_autofree gchar *user_id_safe = NULL; + GVariant *data = NULL; + GVariant *uid = NULL; + diff --git a/debian/patches/synaptics-Keep-supporting-0xE7.patch b/debian/patches/synaptics-Keep-supporting-0xE7.patch new file mode 100644 index 00000000..c8503c88 --- /dev/null +++ b/debian/patches/synaptics-Keep-supporting-0xE7.patch @@ -0,0 +1,34 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Mon, 11 Oct 2021 05:04:29 -0400 +Subject: synaptics: Keep supporting 0xE7 + +It will make things easier to backport +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/synaptics/synaptics.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 10cb8cf..98f391a 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -150,6 +150,7 @@ usb:v06CBp00F9* + usb:v06CBp00FC* + usb:v06CBp00C2* + usb:v06CBp00C9* ++usb:v06CBp00E7* + usb:v06CBp0100* + ID_AUTOSUSPEND=1 + +diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c +index bb113cb..54badd6 100644 +--- a/libfprint/drivers/synaptics/synaptics.c ++++ b/libfprint/drivers/synaptics/synaptics.c +@@ -38,6 +38,7 @@ static const FpIdEntry id_table[] = { + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C9, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00E7, }, + { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; diff --git a/debian/patches/synaptics-Remove-usb-reset.patch b/debian/patches/synaptics-Remove-usb-reset.patch new file mode 100644 index 00000000..94aca518 --- /dev/null +++ b/debian/patches/synaptics-Remove-usb-reset.patch @@ -0,0 +1,44 @@ +From: Aris Lin +Date: Thu, 25 Feb 2021 17:13:56 +0800 +Subject: synaptics: Remove usb reset + +It will trigger firmware to do some activities, remove it in device open +and device probe. +--- + libfprint/drivers/synaptics/synaptics.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c +index b2db9bd..0de54a1 100644 +--- a/libfprint/drivers/synaptics/synaptics.c ++++ b/libfprint/drivers/synaptics/synaptics.c +@@ -1158,7 +1158,8 @@ prob_msg_cb (FpiDeviceSynaptics *self, + g_usb_device_get_serial_number_index (usb_dev), + &error); + +- if (resp->result == BMKT_SUCCESS) ++ /* BMKT_OPERATION_DENIED is returned if the sensor is already initialized */ ++ if (resp->result == BMKT_SUCCESS || resp->result == BMKT_OPERATION_DENIED) + { + g_usb_device_close (usb_dev, NULL); + fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, error); +@@ -1196,9 +1197,6 @@ dev_probe (FpDevice *device) + return; + } + +- if (!g_usb_device_reset (usb_dev, &error)) +- goto err_close; +- + if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error)) + goto err_close; + +@@ -1342,9 +1340,6 @@ dev_init (FpDevice *device) + + self->interrupt_cancellable = g_cancellable_new (); + +- if (!g_usb_device_reset (fpi_device_get_usb_device (device), &error)) +- goto error; +- + /* Claim usb interface */ + if (!g_usb_device_claim_interface (fpi_device_get_usb_device (device), 0, 0, &error)) + goto error; diff --git a/debian/patches/synaptics-Send-a-cancel-to-sensor-if-it-returns-busy.patch b/debian/patches/synaptics-Send-a-cancel-to-sensor-if-it-returns-busy.patch new file mode 100644 index 00000000..b3bc5be9 --- /dev/null +++ b/debian/patches/synaptics-Send-a-cancel-to-sensor-if-it-returns-busy.patch @@ -0,0 +1,75 @@ +From: Aris Lin +Date: Fri, 14 May 2021 16:55:24 +0800 +Subject: synaptics: Send a cancel to sensor if it returns busy + +fix #380 +--- + libfprint/drivers/synaptics/synaptics.c | 23 +++++++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c +index 54badd6..85de41f 100644 +--- a/libfprint/drivers/synaptics/synaptics.c ++++ b/libfprint/drivers/synaptics/synaptics.c +@@ -1141,14 +1141,18 @@ prob_msg_cb (FpiDeviceSynaptics *self, + { + GUsbDevice *usb_dev = NULL; + g_autofree gchar *serial = NULL; ++ GError *err = NULL; + + usb_dev = fpi_device_get_usb_device (FP_DEVICE (self)); + + if (error) + { ++ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ err = fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, "unsupported firmware version"); ++ + g_usb_device_close (usb_dev, NULL); +- fpi_device_probe_complete (FP_DEVICE (self), NULL, NULL, +- fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, "unsupported firmware version")); ++ fpi_device_probe_complete (FP_DEVICE (self), NULL, NULL, err); ++ g_clear_error (&error); + return; + } + +@@ -1157,13 +1161,17 @@ prob_msg_cb (FpiDeviceSynaptics *self, + else + serial = g_usb_device_get_string_descriptor (usb_dev, + g_usb_device_get_serial_number_index (usb_dev), +- &error); ++ &err); + + /* BMKT_OPERATION_DENIED is returned if the sensor is already initialized */ + if (resp->result == BMKT_SUCCESS || resp->result == BMKT_OPERATION_DENIED) + { + g_usb_device_close (usb_dev, NULL); +- fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, error); ++ fpi_device_probe_complete (FP_DEVICE (self), serial, NULL, err); ++ } ++ else if (resp->result == BMKT_FP_SYSTEM_BUSY) ++ { ++ synaptics_sensor_cmd (self, self->cmd_seq_num, BMKT_CMD_CANCEL_OP, NULL, 0, NULL); + } + else + { +@@ -1286,6 +1294,9 @@ fps_init_msg_cb (FpiDeviceSynaptics *self, + { + if (error) + { ++ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ g_clear_error (&error); ++ + fpi_device_open_complete (FP_DEVICE (self), error); + return; + } +@@ -1295,6 +1306,10 @@ fps_init_msg_cb (FpiDeviceSynaptics *self, + { + fpi_device_open_complete (FP_DEVICE (self), NULL); + } ++ else if (resp->result == BMKT_FP_SYSTEM_BUSY) ++ { ++ synaptics_sensor_cmd (self, self->cmd_seq_num, BMKT_CMD_CANCEL_OP, NULL, 0, NULL); ++ } + else + { + g_warning ("Initializing fingerprint sensor failed with %d!", resp->result); diff --git a/debian/patches/synaptics-add-new-PID-0x100-and-remove-PID-0xE7.patch b/debian/patches/synaptics-add-new-PID-0x100-and-remove-PID-0xE7.patch new file mode 100644 index 00000000..f3cacd6b --- /dev/null +++ b/debian/patches/synaptics-add-new-PID-0x100-and-remove-PID-0xE7.patch @@ -0,0 +1,49 @@ +From: Aris Lin +Date: Thu, 18 Mar 2021 18:29:10 +0800 +Subject: synaptics: add new PID 0x100 and remove PID 0xE7 + +--- + data/autosuspend.hwdb | 2 +- + libfprint/drivers/synaptics/synaptics.c | 16 ++++++++-------- + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index a09ed91..10cb8cf 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -150,7 +150,7 @@ usb:v06CBp00F9* + usb:v06CBp00FC* + usb:v06CBp00C2* + usb:v06CBp00C9* +-usb:v06CBp00E7* ++usb:v06CBp0100* + ID_AUTOSUSPEND=1 + + # Supported by libfprint driver upeksonly +diff --git a/libfprint/drivers/synaptics/synaptics.c b/libfprint/drivers/synaptics/synaptics.c +index 0de54a1..bb113cb 100644 +--- a/libfprint/drivers/synaptics/synaptics.c ++++ b/libfprint/drivers/synaptics/synaptics.c +@@ -31,14 +31,14 @@ static void init_identify_msg (FpDevice *device); + static void compose_and_send_identify_msg (FpDevice *device); + + static const FpIdEntry id_table[] = { +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xBD, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xE9, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xDF, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xF9, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xFC, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xC2, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xC9, }, +- { .vid = SYNAPTICS_VENDOR_ID, .pid = 0xE7, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00BD, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00E9, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00DF, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00F9, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00FC, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C2, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x00C9, }, ++ { .vid = SYNAPTICS_VENDOR_ID, .pid = 0x0100, }, + { .vid = 0, .pid = 0, .driver_data = 0 }, /* terminating entry */ + }; +