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@suse.de 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],