You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Ondrej Jirman aaffb9940a Update README 3 months ago
docs Update keyboard schematic 3 months ago
firmware Pull-up port 8 upper nibble of pins and keep them as inputs 3 months ago
keymaps Make kmap.h build more resilient 1 year ago
.gitignore Implement flashing over I2C and user/stock firmware support 2 years ago
COPYING Initial commit 2 years ago
HACKING Add HACKING file 2 years ago
Makefile Add firmware build target shortcut 3 months ago
README Update README 3 months ago
README.flashing README.flashing: fix few typos 2 years ago
README.i2c-intf firmware: Post-revert fixup 2 years ago
README.testing Update TODO and I2C interface description 2 years ago
TODO Update TODO 1 year ago
bin2pgd.c Add bin2pgd tool 2 years ago
common.c ENOENT means the i2c userspace device driver is missing 1 year ago
i2c-charger-ctl.c Add more bit definitions to cahrger ctl register map 10 months ago
i2c-debugger.c Don't exit the debugger on I2C communication errors, just report them 1 year ago
i2c-flasher.c Make i2c flasger reset the app block flag 2 years ago
i2c-inputd.c Fix issue with ppkb inputd not working after using the kernel driver 10 months ago
usb-debugger.c Implement flashing over I2C and user/stock firmware support 2 years ago
usb-flasher.c Dump option ROM when reading flash over USB 2 years ago


FOSS firmware for pinephone keyboard


- Dual firmware architecture: stock firmware + optional user firmware.
- Stock firmware implements the full functionality of the keyboard.
  - Stock firmware is layout independent, it reports the raw status
    of the whole keyboard matrix.
  - Key maps and combinations can be arbitrarily changed in the keyboard
    driver without re-flashing the firmware.
  - Stock firmware should be sufficient for most users who will not want
    to do HW modifications to their keyboard to add more peripherals to
    the keyboard MCU.
  - Power efficient implementation using power-down feature of the MCU
    to save power as much as possible. (currently: 700 uW when idle, 15mW
    in active scanning mode - with at least one key pressed)
- Stock firmware is flashed in factory and allows flashing user firmware
  from the pinephone itself over I2C interface.
- User firmware can be used either for updates or for customizations
  (SW support for HW modifications of the keyboard)
- USB stack and tools for stock firmware flashing using ELAN's original
  bootloader to ease development of the stock firmware.
- Self-testing features to quickly test for issues with the keyboard matrix.
- Fully based on FOSS software, with no dependencies. You only need
  sdcc 4.1+ to build the firmware.

See demo video and some technical overview

You can support the project via donations at

See also Samuel's kernel driver: