static int snd_soc_4_12_write(struct snd_soc_codec *codec, unsigned int reg,
                              unsigned int value)
 {
-       u8 data[2];
+       u16 data;
 
-       data[0] = (reg << 4) | ((value >> 8) & 0x000f);
-       data[1] = value & 0x00ff;
+       data = cpu_to_be16((reg << 12) | (value & 0xffffff));
 
-       return do_hw_write(codec, reg, value, data, 2);
+       return do_hw_write(codec, reg, value, &data, 2);
 }
 
 #if defined(CONFIG_SPI_MASTER)
 {
        u8 msg[2];
 
-       msg[0] = data[1];
-       msg[1] = data[0];
+       msg[0] = data[0];
+       msg[1] = data[1];
 
        return do_spi_write(control_data, msg, len);
 }