So this situation has persisted for years, across the entire Android ecosystem. You're not going to just fix it with "one simple trick".
> Yup, and to that point, the fix is really stupid simple, push the drivers into the linux kernel mainline and give google (or whoever) a kernel build profile for your device.
Yeaaaaahhh... I don't see most companies doing that.
1. It is a lot of work to clean up your driver (that will only ever be used on one product) enough to be accepted into the mainline kernel. It takes time, effort and skill. Companies don't want to pay for that, because it doesn't contribute to bottom line. The MO is: get the product out... yesterday so we can sell it and make some money.
2. Even if it was accepted, does that mean it is going to work forever afterwards because the Linux kernel fairies / pixies / whatever will maintain it? No. If you're going push out a new release to end users, you'd better make damn sure it works. So that means each Android release has to go through a long round of QA. Who's going to pay for that?
There's only a couple ways out of the current mess we are in. Only one is likely to actually work.
Option 1: Release the IP! Have basically all phone SoCs (system on chip) use the same IP blocks for the display, I2C, SPI, memory controllers, GPIO, various sensors, power management, etc. Then you can be more like a PC where the system can basically boot up, and you can then download additional drivers as needed. This will never happen.
Option 2: Fuchsia style microkernel. Create a device driver API for the various SoC hardware blocks, and make it good and flexible enough that you never, ever have to change the API. The device driver binary is written once during initial product development, and can be carried into newer OS updates with no changes at all.
People need to realize that the SoC world is not like the PC world. Hardware interfaces change all the time, with every release of a new family member. Some stuff doesn't change much, like a USB host controller, because the SoC world has standardized that somewhat. Other stuff like power management is a total pain.