Personally I think something like Electrical Engineering is more valuable. At my company EE folks are often competent in both hardware and software, but the CS folks are completely incompetent at hardware and don't even understand basic GPIO usage.
A lot of EE folks I've met _think_ they are competent in software, but I'd beg to differ. Similarly, I've met plenty of CS majors who know their way round hardware.
Depends on definition of "software competency". Lofty functional programming in Haskell is quite different from low level driver programming in C. I doubt you could take a world class Haskell programmer and throw them in linux usb driver land and expect them to perform well.