Skip to content

138a:0097 (sensor type 0xdb) on ThinkPad T470 — second ENROLL capture resets the chip (Errno 5 → Errno 19) #295

Open

Description

@cnintzel-hash

Environment: ThinkPad T470, 138a:0097 "VSI 55E FM209-001", sensor type 0xdb, ROM product 0x30, lines_per_frame 144, bytes_per_line 152, FWExt 1.2 (6_07f_lenovo_mis_qm). python3-validity 0.14ppa1, open-fprintd 0.6ppa1, Python 3.14.4. Kernel/distro: Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic

Behaviour:

  • 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.

Activity

  1. draupnir45 commented on Oct 31, 2026

    @draupnir45

    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:

    1. 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.
    2. 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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions