Salsa20 / ChaCha with 128 bit keys
As Luis Casillas said in his comment, the spec of Salsa is short and well explained. Namely, if you are interested in the expansion function, you can find a description with two examples (one with a 32-byte key, and one with a 16-byte key).

Short answer: when dealing with a 16-byte key, you only have to change a constant and append the key to itself.

More details bellow.



Salsa keystream generator, noted $Salsa20_k(n)$ for a key $k$ and a nonce $n$, is based on a hash function : $hSalsa20$ (called $Salsa20$ in the spec). This hash function works as follow : 
if $x$ is a 64-byte sequence, $hSalsa20(x)$ is a 64-byte sequence.

Now, let's see the role of the key and how it is managed. Whether you're using a 32-byte key or a 16-byte key, there is no real key expansion as you can find in Blowfish. Instead, the key $k$ is divided in two 16-bytes subkeys $k_0$ and $k_1$ (if $k$ is 16 bytes long, $k_1 = k_0$). Then, a 16-byte constant is added to the state, and that's where there is a difference : the value is not the same depending on the key size:


for a 16-byte key, this constant is "expand 16-byte k"
for a 32-byte key, this constant is "expand 32-byte k"


This constant is divided into 4 equal part, let's call them $\sigma_0,\sigma_1,\sigma_2$ and $\sigma_3$, 4-byte each.

The keystream is produced as follow :
$$Salsa20_k(n) = hSalsa20(\sigma_0\ ||\ k_0\ ||\ \sigma_1\ ||\ n\ ||\ \sigma_2\ ||\ k_1 || \sigma_3)$$
 where $||$ denotes the concatenation.

Notice that in both case, the argument of $hSalsa20$ is 64-byte, so 64-byte of keystream is produced. You only have to increment the nonce, and start over to generate more keystream.