And even if the manufacturer publishes source trees for drivers, they're based on year-old kernel versions. Same goes for bootloaders.
And that's a problem for the entire embedded Linux ecosystem, not just phones.
I wonder what prevents the vendors from committing their drivers upstream? Can that be worked against, i.e. by the manufacturers or independent organisations financing people to integrate and maintain the drivers?
It 'd be a huge benefit for the entire embedded ecosystem if people could find and fix bugs in out-of-mainline drivers, there are a shitload of bugs in them.
edit: oh, and another thing, mainly concerning Android phones: the refusal of the Linux userland community to learn from Android and cut the craft accumulated in decades (x-server! the need for autotools which check for stuff that's been standardized for 10 years or longer without a way to cache certain tests systemwide! lack of really deep sleep, central to embedded systems! a shitload of "sound servers" resulting in 100+ms latencies!) to keep compatibility with even OLDER systems certainly does not help developers of alternative OSes.