One of the most frustrating parts of interacting with the upstream kernel community is the seemingly-infinite number of people who can say "no" or can at least cause enough noise to derail forward progress.
To take the wakelock situation as an example, every time things were explained, patches were rewritten (10+ times with massive discussion and often extensive arguments about naming, etc, which we weren't terribly picky about), some other group of people jumped in and suddenly there were *different* objections or requirements.
Finally, a "solution" that doesn't actually address our concerns is pushed through, which *nobody* uses because it doesn't meet our needs (so we use our existing one) and nobody else appears to be interested, and now we're simply told "oh the problem has been solved, go rewrite your userspace to use this new interface".
At a certain point, it's easy to get the impression that your time is intentionally being wasted by people who have no interest in ever accepting your work.
On the upside, though the userspace interface for the code that eventually hit mainline doesn't meet our needs, a kernel API now exists that we can make use of to communicate with our own userspace interface without needing #ifdefs or a non-mainline API in drivers. So, that's progress at least.