<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">Hello all,</p>
<p style="margin:0px 0px 1.2em!important">I would like to develop a driver for the Validity 0091 sensor available on the Dell XPS13/15 9X60.</p>
<p style="margin:0px 0px 1.2em!important">I would say I have the driver reverse engineered to 95% (There might be a few things I still don’t understand from the internal state machine).<br><a href="https://github.com/hmaarrfk/Validity91">https://github.com/hmaarrfk/Validity91</a><br>WIP: <a href="https://github.com/freedesktop/libfprint">https://github.com/freedesktop/libfprint</a></p>
<p style="margin:0px 0px 1.2em!important">I found the libfprint source, can compile it, and started creating my own driver.</p>
<p style="margin:0px 0px 1.2em!important">However, I am confused about the internal workings of libfprint and the functions I need to define.<br>I tried to follow examples that were included, but it seemed that they were mostly “swipe”‘ sensors, and not capacitive style sensor.<br>Is there any good documentation about the state machines I need to implement with regards to the functions</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline;white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">    .open = dev_open,
    .close = dev_close,
    .activate = dev_activate,
    .deactivate = dev_deactivate,
    .change_state = dev_change_state,
</code></pre><p style="margin:0px 0px 1.2em!important">Thanks,</p>
<p style="margin:0px 0px 1.2em!important">Mark</p>
<div title="MDH:PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PkhlbGxvIGFsbCw8YnI+PGJy
PjwvZGl2Pkkgd291bGQgbGlrZSB0byBkZXZlbG9wIGEgZHJpdmVyIGZvciB0aGUgVmFsaWRpdHkg
MDA5MSBzZW5zb3IgYXZhaWxhYmxlIG9uIHRoZSBEZWxsIFhQUzEzLzE1IDlYNjAuPGJyPjxicj48
L2Rpdj5JIHdvdWxkIHNheSBJIGhhdmUgdGhlIGRyaXZlciByZXZlcnNlIGVuZ2luZWVyZWQgdG8g
OTUlIChUaGVyZSBtaWdodCBiZSBhIGZldyB0aGluZ3MgSSBzdGlsbCBkb24ndCB1bmRlcnN0YW5k
IGZyb20gdGhlIGludGVybmFsIHN0YXRlIG1hY2hpbmUpLjxicj5odHRwczovL2dpdGh1Yi5jb20v
aG1hYXJyZmsvVmFsaWRpdHk5MTxicj48L2Rpdj48ZGl2PldJUDogaHR0cHM6Ly9naXRodWIuY29t
L2ZyZWVkZXNrdG9wL2xpYmZwcmludDxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj5JIGZvdW5kIHRo
ZSBsaWJmcHJpbnQgc291cmNlLCBjYW4gY29tcGlsZSBpdCwgYW5kIHN0YXJ0ZWQgY3JlYXRpbmcg
bXkgb3duIGRyaXZlci48YnI+PC9kaXY+PGJyPkhvd2V2ZXIsIEkgYW0gY29uZnVzZWQgYWJvdXQg
dGhlIGludGVybmFsIHdvcmtpbmdzIG9mIGxpYmZwcmludCBhbmQgdGhlIGZ1bmN0aW9ucyBJIG5l
ZWQgdG8gZGVmaW5lLjxicj48L2Rpdj5JIHRyaWVkIHRvIGZvbGxvdyBleGFtcGxlcyB0aGF0IHdl
cmUgaW5jbHVkZWQsIGJ1dCBpdCBzZWVtZWQgdGhhdCB0aGV5IHdlcmUgbW9zdGx5ICJzd2lwZSIn
IHNlbnNvcnMsIGFuZCBub3QgY2FwYWNpdGl2ZSBzdHlsZSBzZW5zb3IuPGJyPjwvZGl2PklzIHRo
ZXJlIGFueSBnb29kIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIHN0YXRlIG1hY2hpbmVzIEkgbmVl
ZCB0byBpbXBsZW1lbnQgd2l0aCByZWdhcmRzIHRvIHRoZSBmdW5jdGlvbnM8YnI+PGJyPmBgYDxi
cj4mbmJzcDsmbmJzcDsmbmJzcDsgLm9wZW4gPSBkZXZfb3Blbiw8YnI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7IC5jbG9zZSA9IGRldl9jbG9zZSw8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IC5hY3RpdmF0ZSA9
IGRldl9hY3RpdmF0ZSw8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IC5kZWFjdGl2YXRlID0gZGV2X2Rl
YWN0aXZhdGUsPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAuY2hhbmdlX3N0YXRlID0gZGV2X2NoYW5n
ZV9zdGF0ZSw8YnI+YGBgPGJyPjxicj48L2Rpdj5UaGFua3MsPGJyPjxicj48L2Rpdj5NYXJrPGJy
Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>