You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
138a:0097 (sensor type 0xdb) on ThinkPad T470 — second ENROLL capture resets the chip (Errno 5 → Errno 19) #295
Factory reset, pairing, fwext upload and calibration all succeed (calib-data.bin is 0 bytes, expected since calibration_iterations = 0 for 0xdb).
identify() from the playground works reliably, including two consecutive captures in the same session (returns Finger not recognized: 0500b304db as expected with an empty DB).
enroll() succeeds on the first capture (Enroll progress: 0100140000… is printed), but the second capture(CaptureMode.ENROLL) fails: tls.app(build_cmd_02(ENROLL)) → USBError Errno 5 on bulk read, then the device drops off the bus (Errno 19) and re-enumerates.
Ruled out:
USB autosuspend (forced power/control=on)
Timing (a 2 s sleep before each capture)
ENROLL-specific capture chunks (using the IDENTIFY 0x4e/0x2e chunks for ENROLL still fails on the second capture)
The per-iteration enrollment_update_end() (0x69 00) (removing it still fails)
Cold power cycle with the built-in battery disabled
So the chip seems to accept captures fine, except after enrollment_update_start (0x68) + append_new_image (0x6b ×2) on type 0xdb. Happy to run further tests or provide USB traces.
Same sensor on a ThinkPad X270: enroll and identify work
I got the fingerprint sensor working on my X270, so I am leaving this comment in case it helps. However, I did this with Claude Code (Claude Opus 5.5). Claude investigated and gave me commands; I ran them in my terminal on my X270. The part below is Claude's explanation, which I do not fully understand. What I confirmed myself: after these steps, fingerprint recognition works on my X270.
Claude's notes
Same sensor as here (138a:0097, FM209-001, type 0xdb, ROM 6.7 build 164), Ubuntu 26.04. Enrollment works on this machine in two ways:
python-validity master with the usb.py part of PR Fix 0090 unsigned partition table #294, after a full power-off: enroll() completed (8 captures) and identify() matched. Without that change the first command failed (0304, then a timeout on the next run). The PR explains this as lost USB responses. This is a guess, but lost responses could also explain the reset on your second capture, so the change may be worth trying.
Without python-validity: factory reset, then libfprint MR !626 with a small patch for type 0xdb (ported from python-validity), used with stock fprintd.
Another working route for this sensor is sudo-ritvik's guide in #264 (Windows provisioning, then python-validity with open-fprintd).
Activity
draupnir45 commentedon Oct 31, 2026
Same sensor on a ThinkPad X270: enroll and identify work
I got the fingerprint sensor working on my X270, so I am leaving this comment in case it helps. However, I did this with Claude Code (Claude Opus 5.5). Claude investigated and gave me commands; I ran them in my terminal on my X270. The part below is Claude's explanation, which I do not fully understand. What I confirmed myself: after these steps, fingerprint recognition works on my X270.
Claude's notes
Same sensor as here (
138a:0097, FM209-001, type0xdb, ROM 6.7 build 164), Ubuntu 26.04. Enrollment works on this machine in two ways:usb.pypart of PR Fix 0090 unsigned partition table #294, after a full power-off:enroll()completed (8 captures) andidentify()matched. Without that change the first command failed (0304, then a timeout on the next run). The PR explains this as lost USB responses. This is a guess, but lost responses could also explain the reset on your second capture, so the change may be worth trying.0xdb(ported from python-validity), used with stock fprintd.Another working route for this sensor is sudo-ritvik's guide in #264 (Windows provisioning, then python-validity with open-fprintd).