--- /dev/null
+Index: asterisk11-chan-dongle-1.1r35/channel.c
+===================================================================
+--- asterisk11-chan-dongle-1.1r35.orig/channel.c
++++ asterisk11-chan-dongle-1.1r35/channel.c
+@@ -495,6 +495,19 @@ again:
+ }
+ }
+
++// see https://github.com/openwrt/telephony/issues/7
++static inline void change_audio_endianness_to_le(struct iovec *iov, int iovcnt)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ return; // nothing to do
++#else
++ for(;iovcnt-->0;iov++)
++ {
++ ast_swapcopy_samples(iov->iov_base, iov->iov_base, iov->iov_len/2);
++ }
++#endif
++}
++
+ #/* */
+ static void timing_write (struct pvt* pvt)
+ {
+@@ -522,6 +535,7 @@ static void timing_write (struct pvt* pv
+ iovcnt = mixb_read_n_iov (&pvt->a_write_mixb, iov, FRAME_SIZE);
+ mixb_read_n_iov (&pvt->a_write_mixb, iov, FRAME_SIZE);
+ mixb_read_upd (&pvt->a_write_mixb, FRAME_SIZE);
++ change_audio_endianness_to_le(iov, iovcnt);
+ }
+ else if (used > 0)
+ {
+@@ -535,6 +549,7 @@ static void timing_write (struct pvt* pv
+ iov[iovcnt].iov_base = silence_frame;
+ iov[iovcnt].iov_len = FRAME_SIZE - used;
+ iovcnt++;
++ change_audio_endianness_to_le(iov, iovcnt);
+ }
+ else
+ {
+@@ -544,6 +559,7 @@ static void timing_write (struct pvt* pv
+ iov[0].iov_base = silence_frame;
+ iov[0].iov_len = FRAME_SIZE;
+ iovcnt = 1;
++ // ignore endianness for zeros
+ // continue;
+ }
+