Embedded design does not necessarily require coding skills (it depends on whether one has software engineers for that).
That said, most embedded designers (indeed, most designers in general) do have significant programming skills, simply because it is necessary to understand how to connect everything together such that software may be effectively written for the system (assuming it has a processor, of course).
As an example, let's say I was designing a memory interface (which I have done numerous times). One must thoroughly understand the nature of the memory controller to attach memory to it. For a DDR interface that includes numerous programmable options that must be taken into account when calculating the timing budget and how (if at all) to terminate the address/data/clock/control system. The last DDR interface I designed was not a stick, but the devices soldered onto my board, running at 200MHz / 400M/s burst data rates and I ended up with less than 100psec of guaranteed margin.
When at this level, a thorough knowledge of driver characteristics (amongst a lot of other things) is a requirement.
"The art of electronics" is an excellent source book for many of the issues involved.
DSP is not necessarily a requirement: it depends on just what you are trying to achieve in embedded design. Should you need it, I would suggest looking at TI's DSP section
formatting link
DSP is a subject in it's own right, of course, and there are newsgroups devoted to nothing else (comp.dsp for instance).
Apart from that, you will need the standard skills of all hardware designers, from the seemingly mundane of choosing the correct bypass capacitors to switch mode power supplies and perhaps FPGAs (comp.arch.fpga).
If the list sounds long, it's because embedded design is evolving and there's always something new to learn.
So, good luck and have fun
Cheers
PeteS