Firmware
--------

- implement I2C configuration options
  - disable keyboard matrix scanning

- only enable USB in stock FW upon request over I2C (idling USB stack takes
  about 0.6mA on top of 1.8mA baseline)

- first I2C TX after switch to USER firmware after flasging over I2C fails,
  subsequent ones work
  - also power consumption indicates power consumption of the sotck firmware
    so maybe we just sleep in stock instead of switching after flashing?

- power measurement / optimization
  - currently with no USB stack and in constant PD mode: 1.8mA
  - theoretical lower limit 0.5mA (no idea how they achieve it)


Charger behavior
----------------

- does the charger turn off VOUT after some period of low load?
- does it enable it again to see if there's a need for it?
- this auto-off behavior will kill the power to the keyboard
  controller, so we need a way to detect it and power the controller
  from the pinephone side by enabling VBUS.
  - tricky!
  - or make the user keep pressing the kb power button to use the
    keyboard for a while, like in a train conductor has to in a train :)
    - not good!


Userspace input device daemon
-----------------------------

- allow to read keymap config from a file instead of compiling it in

- improve combo key handling
  - sticky keys entry mode?

- add various modal modes:
  - show modal hints on the display 
    - write to linux console framebuffer directly
    - run a generic process/script (eg. to show mode in i3 status bar)

Modes:

- navigation mode arrows work as arrows without holding Fn key, holding
  Fn key inverts the meaning to primary (so Fn+Up types a 'dot')
- sticky Fn mode (all keys act as if Fn is being held)
- sticky keys mode (build a multi-key shortcut gradually, without having to
  hold multiple keys at once)
- ???

