jollyjoggler wrote: > The teac UD-H01 has the Tenor TE8802 chipset. > > Have a look here > > http://pastebin.com/hiqpra58 > > the frquency is jumping in between 183994 Hz and 199994 Hz while playing > back a 192kHz file. So I assume this is the frequency corruption you are > talking about. > > Could your patch be applied to other kernels which are not for ARM based > machines like the SBT? > > Thank you!
Yes this looks similar. I did email Tenor, but they did not appear keen on fixing Linux for some unknown reason.. Anyway as they've not responded for a while, I thought I'm post my observations and the hack thats in kernel 11: Here's some logging we did with a Tenor device recording the feedback frequencies: Code: -------------------- Example at 44.1kHz sample rate feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058340 freq: 44102 Hz set feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00058340 freq: 44102 Hz set feedback raw: 00048330 freq: 36100 Hz ignored<---- this looks wrong raw value should be 00058330 feedback raw: 00048330 freq: 36100 Hz ignored<---- this looks wrong raw value should be 00058330 feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058330 freq: 44100 Hz set feedback raw: 00058340 freq: 44102 Hz set feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 feedback raw: 00068330 freq: 52100 Hz set <---- this looks wrong raw value should be 00058330 Example at 48kHz feedback raw: 00050000 freq: 40000 Hz ignored<---- this looks wrong raw value should be 00060000 feedback raw: 00050000 freq: 40000 Hz ignored<---- this looks wrong raw value should be 00060000 feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00070010 freq: 56002 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00070010 freq: 56002 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00070010 freq: 56002 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00070010 freq: 56002 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060010 freq: 48002 Hz set feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00070000 freq: 56000 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00070000 freq: 56000 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00070000 freq: 56000 Hz set <---- this looks wrong raw value should be 00060000 feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00050010 freq: 40002 Hz ignored<---- this looks wrong raw value should be 00060000 feedback raw: 00050010 freq: 40002 Hz ignored<---- this looks wrong raw value should be 00060000 feedback raw: 00060000 freq: 48000 Hz set feedback raw: 00060000 freq: 48000 Hz set Example at 96 KHz feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0010 freq: 96002 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000c0020 freq: 96004 Hz set feedback raw: 000d0020 freq: 104004 Hz set feedback raw: 000d0020 freq: 104004 Hz set -------------------- Essentially this mean that the 3rd byte of the feadback value is getting corrupted and probably changing when it should not. I suspect this can be made more general, but this is essentially what kernel 11 is doing - it reads the feadback frequency in /sound/usb/urb.c retire_playback_sync_urb and then modifies it to try to get around the corruption after f is read: Code: -------------------- if (IS_TENOR) { // 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; } } -------------------- ------------------------------------------------------------------------ Triode's Profile: http://forums.slimdevices.com/member.php?userid=17 View this thread: http://forums.slimdevices.com/showthread.php?t=93310
_______________________________________________ Touch mailing list Touch@lists.slimdevices.com http://lists.slimdevices.com/mailman/listinfo/touch