Annotated references
Sources this project relies on, with a note on how much of each applies to the X240 specifically. “Era analogue” means a closely related ThinkPad that informs the design but whose numbers must not be copied into our pinout files.
Community projects
| Source | What it gives us | X240-specific? |
|---|---|---|
| delingren/thinkpad_keyboards | Reverse-engineering of the 04Y0819 (X1 Carbon Gen 1 era): 32-pin matrix FPC, 17 × 9 matrix, 20-pin TrackPoint/backlight FPC, QMK with the RP2040 PIO PS/2 driver, backlight current measurement, the TrackPoint reset-pulse finding, and the MCU pin-count comparison that rejected the Pico. | Era analogue — the pin-budget lesson transfers; the pinout does not. |
| hamishcoleman/thinkpad-usbkb | KiCad design of a ThinkPad-keyboard USB adapter on an EFM32; keyboard-thinkpad.pinout.txt has an 8 × 8 matrix map for an older (X220-era) connector. |
Era analogue — different connector and matrix. |
| thedalles77/USB_Laptop_Keyboard_Controller (Frank Adams) | The general method: Teensy/RP2040 matrix decoding, matrixgenerator.py, Eagle scanner boards, and worked examples for the T61, P15/P17 and older ThinkPads. Also the RP2350 Stamp XL version with 40 GPIO. |
Method only. |
| Frank Adams — touchpad/TrackPoint conversion | PS/2 touchpad and TrackPoint bring-up on Teensy/Pico, including level-shifting notes. | Method only. |
| Instructables — reverse-engineer any keyboard matrix with a Pico | The probing technique our matrix_probe.py implements. |
Method only. |
| sharktastica — TrackPoint wiki | Module generations; confirms the two-piece T440/X240-family module with four connections. | Yes, module family. |
| ThinkPads forum — X240 trackpoint/trackpad | Field reports on X240 ClickPad/TrackPoint behaviour. | Yes. |
| iFixit — X240 keyboard replacement | Photos of the connectors and disassembly order. | Yes. |
Manufacturer documentation
| Source | Used for |
|---|---|
| Raspberry Pi Pico datasheet | Pinout, test points TP1 = GND, TP2 = D−, TP3 = D+, power |
| RP2040 datasheet | UART/SPI pin muxing, PIO |
| Nexperia 74HC165 datasheet | Timing, supply range, pin functions |
| Nexperia 2N7002 · onsemi BS170 | Backlight switch |
| Hirose FH12 catalogue | Rev B FPC connectors |
Synaptics TouchPad Interfacing Guide (PN 511-000275; no longer hosted publicly — the working reference is the Linux driver drivers/input/mouse/synaptics.c) |
Absolute mode, packet format, pass-through |
| Lenovo ThinkPad X240 Hardware Maintenance Manual | FRU numbers, disassembly, screw positions |
| Adafruit 1436 product page | To show it is a solder-pad plate, not a ZIF breakout |
QMK
| Page | Used for |
|---|---|
| RP2040 platform | Bootloader, pin naming, PIO notes |
| PS/2 mouse | Driver table — usart is ATmega32u4-only; vendor = RP2040 PIO; clock = data + 1 |
| Pointing device | pointing_device_task_kb, report merging |
| Backlight | Driver table |
| Issue #24470 | RP2040 pwm backlight does not compile; software works |
| Custom matrix | CUSTOM_MATRIX = lite API |
| Bootmagic | Top-left-key bootloader entry |
| Hardware keyboard guidelines | VID/PID, layout metadata |
Linux kernel
drivers/input/mouse/synaptics.c and psmouse-base.c — the working reference for the
identify sequence, mode byte, packet resync and pass-through handling. The ArchWiki
Touchpad Synaptics page documents the
serio: Synaptics pass-through port behaviour seen on X240-class machines.
Suppliers referenced
DigiKey, Mouser, LCSC, Jameco, Tinkersphere, Adafruit, Pimoroni, BuyDisplay, Crystalfontz, JLCPCB, PCBWay, SendCutSend, Ponoko, Hammond Manufacturing, eBay, iFixit. Links are on the component reference and BOM pages.