This is conflating two things. The license and the cost. Companies generally choose linux because it costs them nothing to grab and go. Developing an OS for your product is far more costly than not developing an OS. The reason companies give back to the GPL is because they are forced to. This is a legal requirement, they are not doing it out of some nebulous concept of 'good will'. For a company that's fighting to set themselves apart from their competitors, they would prefer to keep changes to themselves than give their competition an advantage. The GPL actually causes some companies to not choose Linux, for this very reason. Some companies want to remain competitive and not give their competitors access to how their product works. it depends on what code a company is going to be editing. If they need to tweak base system utilities to give themselves an edge, they may want to keep that to themselves... ie what Sony did with the Playstation.
Also, it's worth nothing for others that the GPL that covers Linux does not cover all of the software that is on a device. Sony Digital Cameras for example, run Linux, but the Sony processing engine and UI is proprietary. Sony decided to use linux in this case, because they didn't want to have to develop an ARM based OS to use... so they grabbed Linux and ran with it. The GPL only covers the kernel and the userland though, so all of the Sony written applications can be closed source. In this situation it made business sense for Sony to use Linux, because they weren't needing to edit the userland or the kernel... and BSD wasn't as strong in the ARM arena as Linux was/is.
As danboid stated, Companies primary motivation is making money. Period. Full Stop. Companies will use whatever technology helps them to accomplish that. Sometimes that will be Linux, sometimes that will be BSD, sometimes that will be QNX, etc. Companies do not make business decisions out of some desire for Utopian good for society.
Personally for myself as an ex Linux developer, I licensed my code as MIT because I want to allow anyone downstream to do whatever they want with the code that I'm giving away. I don't feel I have the right to tell you what you can and can't do with the code I'm giving away. You don't give someone a christmas/birthday gift and then stipulate the situations they are allowed to use it.
I find most developers just want to get something done, so they will use whatever they can. The BSD license does not include a threat of force to follow... the GPL does. I prefer the MIT/BSD license when I'm looking for code, because I know I dont have to worry about getting sued, or worry about rabid fanboys wanting to make an issue.
The argument can be made that GPL has helped GPL licensed code grow because it's cancerous. I know people that have licensed their code as GPL because they were afraid that they'd be sued because it got coze with other GPL code. When people choose a license out of fear of being sued... that's not a good license as far as i'm concerned.
I would argue it's less a matter of honor and more a matter of 'i don't want to pay to maintain this code'.