For anyone with the same problem as jollyjoggler with the Teac UD-H01:
I complied a kernel, you can get it here:
http://cowboycoders.org/uploads/udh01.tar.gz
Contains kernel headers, kernel image, and initramfs.
instructions:
install kernel-image, kernel-headers, recompile emgd for new kernel (http://askubuntu.com/questions/53364/co ... ed-kernels)
On EFI (backup first):
replace intrd with included initramfs (or roll your own),
replace vmlinuz with that from /boot after installing
Maybe best to try with usb stick os - in case it fails to boot .
The patch (all credit to triode) which is untested (as JollyJoggler seems to have dissappeared):
Code: Select all
From 61dd420e034512a2706e2a5dad83a9d71db0a95e Mon Sep 17 00:00:00 2001
From: Will Szumski <will@cowboycoders.org>
Date: Thu, 15 Nov 2012 03:52:42 +0000
Subject: [PATCH] teac udh01 hack
forgot semi colon
---
sound/usb/endpoint.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c
index 08dcce5..8004e9d 100644
--- a/sound/usb/endpoint.c
+++ b/sound/usb/endpoint.c
@@ -554,7 +554,19 @@ static int retire_playback_sync_urb(struct snd_usb_substream *subs,
return 0;
f = le32_to_cpup(urb->transfer_buffer);
- if (urb->iso_frame_desc[0].actual_length == 3)
+
+ // teac ud-h01 hack
+ if (le16_to_cpu(urb->dev->descriptor.idVendor) == 0x0644 && le16_to_cpu(urb->dev->descriptor.idProduct) == 0x8038) {
+ // automatic frequency detection can get this wrong at start of a new sample rate – so force to 0 which is the value for uac2
+ subs->freqshift = 0;
+ // Tenor 8802 corrupts high order feedback bytes – assume only low order 2 bytes change and use nominal frequency for high order bytes
+ f &= 0x0000ffff;
+ f |= (subs->freqn & 0xffff0000);
+ if (unlikely(f > subs->freqn && f - subs->freqn > 0x8000)) {
+ f -= 0x10000;
+ }
+ }
+ else if (urb->iso_frame_desc[0].actual_length == 3)
f &= 0x00ffffff;
else
f &= 0x0fffffff;
--
1.7.7.6