Bug 99462 - 138a:0091 Validity Sensors not recognized
Summary: 138a:0091 Validity Sensors not recognized
Status: RESOLVED MOVED
Alias: None
Product: libfprint
Classification: Unclassified
Component: libfprint (show other bugs)
Version: unspecified
Hardware: x86-64 (AMD64) Linux (All)
: medium enhancement
Assignee: libfprint-bugs
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-01-19 21:36 UTC by David Farrell
Modified: 2018-05-31 08:56 UTC (History)
11 users (show)

See Also:
i915 platform:
i915 features:


Attachments
vfs7552 (0091) patch (185.32 KB, patch)
2018-03-10 09:24 UTC, Mark Harfouche
Details | Splinter Review

Note You need to log in before you can comment on or make changes to this bug.
Description David Farrell 2017-01-19 21:36:49 UTC
I have a Dell XPS 13 9365, running upstream 4.10-rc4 on Fedora, and the fingerprint reader is not recognized. I expect this is the same dire situation as bugid:94536, but I figure it's useful to record the issue nonetheless.

lsusb -d 138a:0091 -v
Bus 001 Device 003: ID 138a:0091 Validity Sensors, Inc. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass        16 
  bDeviceProtocol       255 
  bMaxPacketSize0         8
  idVendor           0x138a Validity Sensors, Inc.
  idProduct          0x0091 
  bcdDevice            1.64
  iManufacturer           0 
  iProduct                0 
  iSerial                 1 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           53
    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 
      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               0
      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               0
      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               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              10
Comment 1 Dean Smith 2017-02-23 00:41:13 UTC
I have the same issue - Dell XPS 13 with the device 138a:0091.
Comment 2 Matt 2017-03-18 23:53:57 UTC
I have this sensor and issue also on a Dell XPS 13
Comment 3 Martin Lindquist 2017-04-03 12:49:29 UTC
Confirmed 138a:0091 for Dell XPS 15 9560 as well.
Comment 4 Jingles 2017-07-24 18:18:27 UTC
Confirmed for Dell XPS 13 

Nikita Mikhailov creates a driver for 90,94,97 sensors (https ://gitter.im/Validity90/Lobby). He said the following about the 91 sensor based upon a windows wireshark dump:

1. Device sends fingerprint image scans.
2. It send them unencrypted, probably in several parts roughly 106x106 pixel size
3. So there is no need for reverse engineering and implementing cryptography for that device. Which is a 99% of time spent in this project. Creating a driver would be much easier without it.

Maybe there is a generic driver with no encryption someone can build upon?
Comment 5 nidget 2017-09-05 09:33:42 UTC
Confirmed for Dell XPS15 9560 (model 2017). Not recognized either.

Bus 001 Device 003: ID 138a:0091 Validity Sensors, Inc. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass        16 
  bDeviceProtocol       255 
  bMaxPacketSize0         8
  idVendor           0x138a Validity Sensors, Inc.
  idProduct          0x0091 
  bcdDevice            1.64
  iManufacturer           0 
  iProduct                0 
  iSerial                 1 c81aa800a52d
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           53
    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 
      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               0
      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               0
      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               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval              10
Device Status:     0x0000
  (Bus Powered)
Comment 6 Marcos M. 2018-01-01 01:30:31 UTC
Confirmed for Dell XPS15 9560 (model 2017). Not recognized either on OpenSuse.
Comment 7 Mark Harfouche 2018-03-04 06:49:13 UTC
Hey guys,

I'm working on reverse engineering the driver for the fingerprint sensor on the XPS 9560.

Work in progress found here: https://github.com/hmaarrfk/Validity91
Comment 8 Mark Harfouche 2018-03-04 06:50:05 UTC
I actually know nothing about how to integrate my findings with the linux fingerprint reader stack.

Some pointers on which stub functions to rewrite would be nice.
Comment 9 Mark Harfouche 2018-03-10 09:24:26 UTC
Created attachment 137960 [details] [review]
vfs7552 (0091) patch

Here is a patch for a working driver.

Now the driver works. That doesn't mean that it can actually detect your fingerprint.

A 112x112 image gets sent to the computer. But libfprint is used to much larger images. So it actually just takes the liberty to prune it down to 96x96 (don't know why yet), and that doesn't give it a large enough image to detect anything.

I think as far as this driver goes, basic functionality is there. But to get it to work, I think it needs more TLC from the rest of the library. It isn't something I want to work on now, but I figured maybe by integrating my contributions upstream, somebody else can take the lead, goodluck.

This patch includes what I submitted in #105427
https://bugs.freedesktop.org/show_bug.cgi?id=105427
Comment 10 GitLab Migration User 2018-05-31 08:56:10 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/libfprint/libfprint/issues/52.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.