I'm not sure it makes sense to have kernel drivers for the embedded hardware at all, let alone have them in the mainline kernel; these aren't drivers for a printer, they're drivers for a collections of motors, valves, and sensors arranged to be useful for printing. I think it would make most sense to have a userspace daemon that knows how to use the particular arrangement in this box to print things, and have the kernel consider it all a bunch of uninteresting GPIO. (Uninteresting in that it doesn't even reflect or affect kernel state, so it's less relevant to the kernel than a caps lock LED or a battery voltage indicator.) This would also be the key to allowing the kernel (and other userspace programs) to be replaced separately from the device-specific stuff. Sure, someone might be able to improve the quality of the printing by replacing this code, but it's orthogonal to improving the network stack or UI. It's important that I am able to change some code to be able to solve my problem; it's even more important that solving my problem doesn't require me to change all of the code that there is.