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

Reply via email to