[Driver Request] 04f3:0c57 Elan Microelectronics Corp. ELAN:Fingerprint
I'm running Arch Linux on Lenovo IdeaPad 3-15ARE05 (81W40053CK - Czeck/Slovak SKU). The output of lsusb -v
for the fingerprint sensor is:
Bus 003 Device 003: ID 04f3:0c57 Elan Microelectronics Corp. ELAN:Fingerprint
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x04f3 Elan Microelectronics Corp.
idProduct 0x0c57
bcdDevice 2.13
iManufacturer 1 ELAN
iProduct 2 ELAN:Fingerprint
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x003e
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 5
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
** UNRECOGNIZED: 09 21 10 01 00 01 22 15 00
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
I tried patching the elan_id_table
array in libfprint/drivers/elan.h with the following entries one after another:
{.vid = ELAN_VEND_ID, .pid = 0x0c57, .driver_data = ELAN_ALL_DEV},
{.vid = ELAN_VEND_ID, .pid = 0x0c57, .driver_data = ELAN_0907},
{.vid = ELAN_VEND_ID, .pid = 0x0c57, .driver_data = ELAN_0C03},
{.vid = ELAN_VEND_ID, .pid = 0x0c57, .driver_data = ELAN_0C42},
For all these entries, the outcome was almost the same:
$ fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-disconnected
$ fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-remove-and-retry
Enroll result: enroll-disconnected
$ fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-stage-passed
Enroll result: enroll-disconnected
The light around the fingerprint reader started blinking, signifying that it's accepting the fingerprint. If it got to this stage, it always failed immediately after I removed my finger from the sensor, either with "enroll-disconnected" or "enroll-unknown-error".
I was able to get the above outcome only on the first try after the fprintd
service was restarted. The following retries ended like this (the reader light didn't blink at all):
$ fprintd-enroll
Using device /net/reactivated/Fprint/Device/0
Enrolling right-index-finger finger.
Enroll result: enroll-unknown-error
... when using the terminal; when using the GNOME fingerprint GUI, it failed immediately with "Enrollment already in progress".