Unfortunately, the "uac_clock_selector_set_val()" call does not seem to change anything. >From doing some more testing, I think that the references to clock id "40" are ok - it has "40" stored in fmt->clock, but when it uses it, "__uac_clock_find_source()" gets called and it resolved to the actual clock source - "41". Not sure about the "No valid sample rate available for 1:1, assuming a firmware bug" error, but I suspect it is spurious. "check_valid_altsetting_v2v3()" is failing for some reason, but it is ignoring the error. Playback is completely silent, but the system seems to think it is working. No apparent errors, and a play operation seems to take the correct amount of time. Just no audio. Maybe it is a mixer issue? mixer.c is putting out "RANGE setting not yet supported" errors on startup. Here is a sample of dmesg output for a playback session: [ 4748.260975] usb 1-1.3: Open EP 0x1, iface=1:1, idx=0 [ 4748.260983] usb 1-1.3: channels=2, rate=48000, format=S32_LE, period_bytes=48000, periods=4, implicit_fb=0 [ 4748.260988] usb 1-1.3: Open EP 0x81, iface=1:1, idx=1 [ 4748.260992] usb 1-1.3: channels=2, rate=48000, format=S32_LE, period_bytes=48000, periods=4, implicit_fb=0 [ 4748.260996] usb 1-1.3: Setting usb interface 1:0 for EP 0x1 [ 4748.261320] usb 1-1.3: 1:1 Set sample rate 48000, clock 40 [ 4748.261873] usb 1-1.3: Setting params for data EP 0x1, pipe 0x9d00 [ 4748.261890] usb 1-1.3: Set up 12 URBS, ret=0 [ 4748.261897] usb 1-1.3: Setting usb interface 1:1 for EP 0x1 [ 4748.262097] usb 1-1.3: Setting params for sync EP 0x81, pipe 0x9d80 [ 4748.262105] usb 1-1.3: Set up 4 URBS, ret=0 [ 4748.262147] usb 1-1.3: Starting data EP 0x1 (running 0) [ 4748.262180] usb 1-1.3: 12 URBs submitted for EP 0x1 [ 4748.262183] usb 1-1.3: Starting sync EP 0x81 (running 0) [ 4748.262193] usb 1-1.3: 4 URBs submitted for EP 0x81 [ 4748.262311] usb 1-1.3: 1:1 Start Playback PCM [ 4762.887812] usb 1-1.3: Stopping sync EP 0x81 (running 1) [ 4762.887836] usb 1-1.3: Stopping data EP 0x1 (running 1) [ 4762.887849] usb 1-1.3: 1:1 Stop Playback PCM [ 4762.902542] usb 1-1.3: Closing EP 0x1 (count 1) [ 4762.902549] usb 1-1.3: Setting usb interface 1:0 for EP 0x1 [ 4762.902915] usb 1-1.3: EP 0x1 closed [ 4762.902928] usb 1-1.3: Closing EP 0x81 (count 1) [ 4762.902935] usb 1-1.3: Setting usb interface 1:0 for EP 0x81 [ 4762.903179] usb 1-1.3: EP 0x81 closed On Mon, Jan 18, 2021 at 1:59 PM Takashi Iwai <tiwai@xxxxxxx> wrote: > On Mon, 18 Jan 2021 22:15:26 +0100, > Mike Oliphant wrote: > > > > Progress - thanks for the patch! > > > > That got rid of the clock errors, and the the device now reports a 48000 > > sample rate, which is correct. > > > > Unfortunately, it still isn't working properly. Playback doesn't seem to > work > > at all. Capture kind of works - it does record, but the audio is > extremely > > noisy. > > > > Here is the current dmesg output when the device is connected. > > > > Notable is the error "No valid sample rate available for 1:1, assuming a > > firmware bug". > > > > Also notable is "1:1 Set sample rate 48000, clock 40" - where "40" is > the id > > of the clock selector - "41" is the id of the actual clock source. So > maybe > > something is still getting wired up wrong? > > OK, how about the one below instead? > > > Takashi > > --- a/sound/usb/clock.c > +++ b/sound/usb/clock.c > @@ -298,6 +298,12 @@ static int __uac_clock_find_source(struct > snd_usb_audio *chip, > if (selector) { > int ret, i, cur; > > + if (selector->bNrInPins == 1) { > + uac_clock_selector_set_val(chip, > selector->bClockID, 1); > + ret = 1; > + goto find_source; > + } > + > /* the entity ID we are looking for is a selector. > * find out what it currently selects */ > ret = uac_clock_selector_get_val(chip, selector->bClockID); > @@ -314,6 +320,7 @@ static int __uac_clock_find_source(struct > snd_usb_audio *chip, > return -EINVAL; > } > > + find_source: > cur = ret; > ret = __uac_clock_find_source(chip, fmt, > selector->baCSourceID[ret - > 1], >