Close

Q30 keyboard. Pinout fully mapped!!

A project log for reverse engineering BB Passport keyboard

Ended up sacrificed one keyboard for pinout. Probably one of the worst (layout on) keyboard I've ever seen but I want to use it!

tinlethaxTinLethax 07/31/2022 at 16:030 Comments

After couple months of finding. Finally, a complete pinout of Blackberry Q30 Keyboard !

Right now I'm working on the driver of Synaptics touch controller IC. It turned out that my previous keyboard has Synaptics S3501B and my current keyboard has Synaptics S3508A instead. These are RMI4 compliance chip from Synaptics. And I confirmed that S3508A works with RMI4 driver on Linux.

Above pic is Dmesg log from my F1C100s board. The driver has a problem parsing IRQ number from device tree, so I did some quick workaround patch in rmi_drive.c . pdata->irq = 39 is to request irq from irq number 39. Which is GPIO Port E interrupt number.


Some quick patch

Since this thing is work correctly. I did some logic analyzing on the I2C bus. Especially with the HID report.

I was able to decode the HID report of the Synaptics IC. I'll update on this soon but this is what I got:

page number : 0x00

function : 0x12

HID report : 0x05 for finger detection, 0x06 for HID report

0x06 report : 88 bytes with following format

// Finger 1
// F12_report[0] -> Finger 1 present (1/0)
// F12_report[1] -> ABS_X LSB
// F12_report[2] -> ABS_X MSB
// F12_report[3] -> ABS_Y LSB
// F12_report[4] -> ABS_Y MSB
// F12_report[5] -> pressure 
// F12_report[6] -> ABS_MT_TOUCH_MINOR
// F12_report[7] -> ABS_MT_TOUCH_MAJOR

// Finger 2
// F12_report[8] -> Finger 2 present (1/0)
// F12_report[9] -> ABS_X LSB
// F12_report[10] -> ABS_X MSB
// F12_report[11] -> ABS_Y LSB
// F12_report[12] -> ABS_Y MSB
// F12_report[13] -> pressure 
// F12_report[14] -> ABS_MT_TOUCH_MINOR
// F12_report[15] -> ABS_MT_TOUCH_MAJOR

// F12_report[16] to F12_report[85] are all at 0x00

// F12_report[86] -> BTN_TOUCH single finger == 1, 2 fingers == 3
// F12_report[87] is 0x00

For now I have to port the code to STM8 and STM32. So please stay tuned for next update!

Discussions