Here's the modified dts file. It requires the tca8418_keypad kernel module to be compiled and installed. I'll get instructions up for that eventually. Right now no interrupt pin is connected and the tca8418 interrupt is set to gpio 11 (the i2c clock line). I'd pick a different pin but there's no other ones available on the hyperpixel4 pinout. I'm also not using the touch version of the hyperpixel4 which also uses the same i2c bus. That may cause conflicts so I'll have to try that next.
Edit 2019-06-29: The keyboard and touch screen both seem to work, just not at the same time. Keys will not register if you are touching the screen / moving the cursor continuously. Likewise if you are pressing/holding keys down then touching the screen will not work. One at a time works just fine though!
Good news everyone! I'm working on a version 2.0 board that operates over i2c using the TCA8418. This will be my first project using SMD parts and so far so good.
For switches I picked the EVQ-Q2B03W. They are more pricey than your typical tactile switch but are worth the cost in my opinion. The datasheet says they require 0.5 N of force to press, are 3.1 mm tall and are rated at 2,000,000 presses. They are VERY light touch, it really doesn't require much more force than just typing on your phone screen.
It breaks out all the usual bits and includes a JST-PH connector for i2c that is compatible with Adafruit's PyBadge and PyGamer.
Looks good so far. Some parts of the silkscreen didn't come out great. The lines between connected pads in the proto area are hard to make out. I'll have to update that in a later version. Electrically everything seems connected. I'll solder one up and test soon.
Turns out having an additional microcontroller in a raspberry pi project is pretty useful. I was able add backlight control and low battery monitoring to the keyboard with these connections. The Teensy is happy to output a PWM signal for backlight control. You can bind any key combination to change the PWM duty cycle and change the backlight brightness without any RPi intervention.
Low battery monitoring currently looks at the LBO pin that is pulled low if the battery dips below 3.2v. Alternative would be to have a voltage divider monitoring the BATT pin directly to get the full range of battery voltages similar to https://jeelabs.org/2013/05/16/measuring-the-battery-without-draining-it When the the LBO pin is low the Teensy can output serial message (over the default USB serial) that the RPi could monitor and then display a notification to the user.
Everything looks good! All that's missing is a hole for the sliding power switch on the back cover. I wired the low bat pin on the Adafriut PowerBoost to the Teensy. When the battery is running low the teensy can send a message over the serial USB to the RPi3 and pop up a notification to the user. Software and code are pending and will be added to github soon.
Keyboard behaves as a standard USB keyboard as expected using PJRC's excellent USB Keyboard and Mouse library: https://www.pjrc.com/teensy/td_keyboard.html There's some bonus functionality for using the D-pad to move the mouse cursor around. That turned out to be useful for the non-touch screen. By the way this really needs a touch screen, I've repeatedly tapped on the screen expecting something to happen despite knowing it doesn't work.
This was a challenging case to make. The hardest part was supporting the HyperPixel display and the RPi3 using only the mounting holes. I didn't want any pressure put onto the display to prevent cracks.
When I ordered the parts only the non-touch version of the HyperPixel was in stock so thats what I've modeled the case on. I've got a touch screen version on order and will make separate display bezels for each once that arrives.