One thing that wasn't mentioned in the discussion so far is the financial burden to a smaller development house. Sure, Google can afford to have a few highly paid kernel developers spend months, if not years, just trying to push upstream something which already is working. That would be suicide for a small company.
If I might venture a guess (well, it is more than a guess), small embedded vendors don't seriously consider upstreaming their development. It is simply outside of the realm of financial possibility.
It doesn't help that having a driver upstream can be an additional hassle rather than a benefit. It can actually make it harder to deliver updates to customers. (If your driver is already upstream and you need to deliver an urgent fix, what do you do, especially if your customers are not kernel developers?)
I am not sure there is a better way to handle these problems, but at least they ought to be acknowledged.