On Tue, Nov 04, 2014 at 02:16:13PM +0100, Tobias Hoffmann wrote: <snip>
@Chris: The original get_ctl_value (after cleanup: snd_usb_get_cur_mix_value) contained this:
// quirk: write 2bytes, but read 1byte if ( (elem->index == 0x01)|| // input impedance and
input pad switch ((elem->index == 0x0a)&&(elem->wValue < 0x0200))|| // bus mutes (elem->index == 0x32)||(elem->index == 0x33) ) { // mux val_len = 1; }
Is it removed(AFAICT) intentionally in your patches? The windows mixer software did read-back some values (but only after they had been written once, IIRC), and had this asymmetry that certain registers used 2-byte writes but 1-byte reads... I'm quite unsure about just reading 2 bytes, i.e. whether the device would actually return the correct values. OTOH, we should only hit the cache because of the zero-initialization(?).
Tobias
Tobias, I've notcied that the controls work just fine without this hack (at least on my 18i8); however I can look more closely into this to see what the extra byte that's being read actually is. --chris