It’s been a fun summer to work on this project and I want to thank everyone in Microsoft and RCOS that helped to support us!
My main takeaway is that OS dev is really hard and that after this project, I don’t really want to touch it again. I did, however, learn an incredible amount about a variety of things in the kernel including how drivers work, how devices communicate, SPI interfaces, and much more.
I agree with Max that Arch Linux may have been a poor choice to start with. During the summer, I’ll continue working on this to both add additional functionality and to document the install process on other flavors of Linux.
I’m glad that we were able to work with external contributors (cb22, roadrunner2, and more) to get the keyboard and trackpad working as that really sets the stage for further work. There are still quite a few things left that aren’t working: suspend/resume, speakers, bluetooth, and webcam, with the first being miles more important than the rest.
Here are all of the loops that we have left to close:
- How do we eliminate the need to recompile the kernel when fiddling with DSDT?
- What are the side effects of disable LPSS? Can we rework something in LPSS so that it doesn’t hijack the keyboard output?
- What are the steps to getting patches added to the upstream kernel? What do we need to change to get it accepted?
- Where in the keyboard drivers is rollover handled? Why is it not correctly dealing with our keyboard?
- How is keyboard backlighting handled on other laptops in the kernel? Is there any major difference in the hardware (besides SPI) between our keyboard and others?
- What are those custom op-codes doing? Are they even relevant?
- Is LPSS being disabled effecting suspend?
- Could it be that suspend is working, but there is a problem with resume?
- At what level of the audio stack is communication to the speaker breaking down?
For now, I’ll be focusing on suspend/resume and Max will be working to get our work so far merged upstream.
Again, thank you to everyone who helped us along the way!