1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Clock domain and sample rate management functions
6 #include <linux/bitops.h>
7 #include <linux/init.h>
8 #include <linux/string.h>
10 #include <linux/usb/audio.h>
11 #include <linux/usb/audio-v2.h>
12 #include <linux/usb/audio-v3.h>
14 #include <sound/core.h>
15 #include <sound/info.h>
16 #include <sound/pcm.h>
24 union uac23_clock_source_desc
{
25 struct uac_clock_source_descriptor v2
;
26 struct uac3_clock_source_descriptor v3
;
29 union uac23_clock_selector_desc
{
30 struct uac_clock_selector_descriptor v2
;
31 struct uac3_clock_selector_descriptor v3
;
34 union uac23_clock_multiplier_desc
{
35 struct uac_clock_multiplier_descriptor v2
;
36 struct uac_clock_multiplier_descriptor v3
;
39 #define GET_VAL(p, proto, field) \
40 ((proto) == UAC_VERSION_3 ? (p)->v3.field : (p)->v2.field)
42 static void *find_uac_clock_desc(struct usb_host_interface
*iface
, int id
,
43 bool (*validator
)(void *, int, int),
48 while ((cs
= snd_usb_find_csint_desc(iface
->extra
, iface
->extralen
,
50 if (validator(cs
, id
, proto
))
57 static bool validate_clock_source(void *p
, int id
, int proto
)
59 union uac23_clock_source_desc
*cs
= p
;
61 return GET_VAL(cs
, proto
, bClockID
) == id
;
64 static bool validate_clock_selector(void *p
, int id
, int proto
)
66 union uac23_clock_selector_desc
*cs
= p
;
68 return GET_VAL(cs
, proto
, bClockID
) == id
;
71 static bool validate_clock_multiplier(void *p
, int id
, int proto
)
73 union uac23_clock_multiplier_desc
*cs
= p
;
75 return GET_VAL(cs
, proto
, bClockID
) == id
;
78 #define DEFINE_FIND_HELPER(name, obj, validator, type2, type3) \
79 static obj *name(struct snd_usb_audio *chip, int id, \
80 const struct audioformat *fmt) \
82 struct usb_host_interface *ctrl_intf = \
83 snd_usb_find_ctrl_interface(chip, fmt->iface); \
84 return find_uac_clock_desc(ctrl_intf, id, validator, \
85 fmt->protocol == UAC_VERSION_3 ? (type3) : (type2), \
89 DEFINE_FIND_HELPER(snd_usb_find_clock_source
,
90 union uac23_clock_source_desc
, validate_clock_source
,
91 UAC2_CLOCK_SOURCE
, UAC3_CLOCK_SOURCE
);
92 DEFINE_FIND_HELPER(snd_usb_find_clock_selector
,
93 union uac23_clock_selector_desc
, validate_clock_selector
,
94 UAC2_CLOCK_SELECTOR
, UAC3_CLOCK_SELECTOR
);
95 DEFINE_FIND_HELPER(snd_usb_find_clock_multiplier
,
96 union uac23_clock_multiplier_desc
, validate_clock_multiplier
,
97 UAC2_CLOCK_MULTIPLIER
, UAC3_CLOCK_MULTIPLIER
);
99 static int uac_clock_selector_get_val(struct snd_usb_audio
*chip
,
100 int selector_id
, int iface_no
)
102 struct usb_host_interface
*ctrl_intf
;
106 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, iface_no
);
107 ret
= snd_usb_ctl_msg(chip
->dev
, usb_rcvctrlpipe(chip
->dev
, 0),
109 USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
110 UAC2_CX_CLOCK_SELECTOR
<< 8,
111 snd_usb_ctrl_intf(ctrl_intf
) | (selector_id
<< 8),
120 static int uac_clock_selector_set_val(struct snd_usb_audio
*chip
,
121 int selector_id
, unsigned char pin
, int iface_no
)
123 struct usb_host_interface
*ctrl_intf
;
126 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, iface_no
);
127 ret
= snd_usb_ctl_msg(chip
->dev
, usb_sndctrlpipe(chip
->dev
, 0),
129 USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
130 UAC2_CX_CLOCK_SELECTOR
<< 8,
131 snd_usb_ctrl_intf(ctrl_intf
) | (selector_id
<< 8),
136 if (ret
!= sizeof(pin
)) {
138 "setting selector (id %d) unexpected length %d\n",
143 ret
= uac_clock_selector_get_val(chip
, selector_id
, iface_no
);
149 "setting selector (id %d) to %x failed (current: %d)\n",
150 selector_id
, pin
, ret
);
157 static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio
*chip
,
158 const struct audioformat
*fmt
,
164 struct usb_device
*dev
= chip
->dev
;
165 union uac23_clock_source_desc
*cs_desc
;
166 struct usb_host_interface
*ctrl_intf
;
168 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, fmt
->iface
);
169 cs_desc
= snd_usb_find_clock_source(chip
, source_id
, fmt
);
173 if (fmt
->protocol
== UAC_VERSION_2
) {
175 * Assume the clock is valid if clock source supports only one
176 * single sample rate, the terminal is connected directly to it
177 * (there is no clock selector) and clock type is internal.
178 * This is to deal with some Denon DJ controllers that always
179 * reports that clock is invalid.
181 if (fmt
->nr_rates
== 1 &&
182 (fmt
->clock
& 0xff) == cs_desc
->v2
.bClockID
&&
183 (cs_desc
->v2
.bmAttributes
& 0x3) !=
184 UAC_CLOCK_SOURCE_TYPE_EXT
)
190 * Sample rate changes takes more than 2 seconds for this device. Clock
191 * validity request returns false during that period.
193 if (chip
->usb_id
== USB_ID(0x07fd, 0x0004)) {
196 while ((!ret
) && (count
< 50)) {
201 err
= snd_usb_ctl_msg(dev
, usb_rcvctrlpipe(dev
, 0), UAC2_CS_CUR
,
202 USB_TYPE_CLASS
| USB_RECIP_INTERFACE
| USB_DIR_IN
,
203 UAC2_CS_CONTROL_CLOCK_VALID
<< 8,
204 snd_usb_ctrl_intf(ctrl_intf
) | (source_id
<< 8),
205 &data
, sizeof(data
));
208 "%s(): cannot get clock validity for id %d\n",
209 __func__
, source_id
);
221 static bool uac_clock_source_is_valid(struct snd_usb_audio
*chip
,
222 const struct audioformat
*fmt
,
227 struct usb_device
*dev
= chip
->dev
;
229 union uac23_clock_source_desc
*cs_desc
;
230 struct usb_host_interface
*ctrl_intf
;
232 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, fmt
->iface
);
233 cs_desc
= snd_usb_find_clock_source(chip
, source_id
, fmt
);
237 if (fmt
->protocol
== UAC_VERSION_3
)
238 bmControls
= le32_to_cpu(cs_desc
->v3
.bmControls
);
240 bmControls
= cs_desc
->v2
.bmControls
;
242 /* If a clock source can't tell us whether it's valid, we assume it is */
243 if (!uac_v2v3_control_is_readable(bmControls
,
244 UAC2_CS_CONTROL_CLOCK_VALID
))
247 err
= snd_usb_ctl_msg(dev
, usb_rcvctrlpipe(dev
, 0), UAC2_CS_CUR
,
248 USB_TYPE_CLASS
| USB_RECIP_INTERFACE
| USB_DIR_IN
,
249 UAC2_CS_CONTROL_CLOCK_VALID
<< 8,
250 snd_usb_ctrl_intf(ctrl_intf
) | (source_id
<< 8),
251 &data
, sizeof(data
));
255 "%s(): cannot get clock validity for id %d\n",
256 __func__
, source_id
);
263 return uac_clock_source_is_valid_quirk(chip
, fmt
, source_id
);
266 static int __uac_clock_find_source(struct snd_usb_audio
*chip
,
267 const struct audioformat
*fmt
, int entity_id
,
268 unsigned long *visited
, bool validate
)
270 union uac23_clock_source_desc
*source
;
271 union uac23_clock_selector_desc
*selector
;
272 union uac23_clock_multiplier_desc
*multiplier
;
273 int ret
, i
, cur
, err
, pins
, clock_id
;
275 int proto
= fmt
->protocol
;
276 bool readable
, writeable
;
281 if (test_and_set_bit(entity_id
, visited
)) {
283 "%s(): recursive clock topology detected, id %d.\n",
284 __func__
, entity_id
);
288 /* first, see if the ID we're looking at is a clock source already */
289 source
= snd_usb_find_clock_source(chip
, entity_id
, fmt
);
291 entity_id
= GET_VAL(source
, proto
, bClockID
);
292 if (validate
&& !uac_clock_source_is_valid(chip
, fmt
,
295 "clock source %d is not valid, cannot use\n",
302 selector
= snd_usb_find_clock_selector(chip
, entity_id
, fmt
);
304 pins
= GET_VAL(selector
, proto
, bNrInPins
);
305 clock_id
= GET_VAL(selector
, proto
, bClockID
);
306 sources
= GET_VAL(selector
, proto
, baCSourceID
);
309 if (proto
== UAC_VERSION_3
)
310 bmControls
= le32_to_cpu(*(__le32
*)(&selector
->v3
.baCSourceID
[0] + pins
));
312 bmControls
= *(__u8
*)(&selector
->v2
.baCSourceID
[0] + pins
);
314 readable
= uac_v2v3_control_is_readable(bmControls
,
315 UAC2_CX_CLOCK_SELECTOR
);
316 writeable
= uac_v2v3_control_is_writeable(bmControls
,
317 UAC2_CX_CLOCK_SELECTOR
);
324 /* for now just warn about buggy device */
327 "%s(): clock selector control is not readable, id %d\n",
330 /* the entity ID we are looking at is a selector.
331 * find out what it currently selects */
332 ret
= uac_clock_selector_get_val(chip
, clock_id
, fmt
->iface
);
334 if (!chip
->autoclock
)
339 /* Selector values are one-based */
341 if (ret
> pins
|| ret
< 1) {
343 "%s(): selector reported illegal value, id %d, ret %d\n",
344 __func__
, clock_id
, ret
);
346 if (!chip
->autoclock
)
353 ret
= __uac_clock_find_source(chip
, fmt
,
357 /* Skip setting clock selector again for some devices */
358 if (chip
->quirk_flags
& QUIRK_FLAG_SKIP_CLOCK_SELECTOR
||
361 err
= uac_clock_selector_set_val(chip
, entity_id
, cur
, fmt
->iface
);
365 "%s(): selector returned an error, "
366 "assuming a firmware bug, id %d, ret %d\n",
367 __func__
, clock_id
, err
);
374 if (!validate
|| ret
> 0 || !chip
->autoclock
)
381 /* The current clock source is invalid, try others. */
382 for (i
= 1; i
<= pins
; i
++) {
386 ret
= __uac_clock_find_source(chip
, fmt
,
392 err
= uac_clock_selector_set_val(chip
, entity_id
, i
, fmt
->iface
);
397 "found and selected valid clock source %d\n",
405 /* FIXME: multipliers only act as pass-thru element for now */
406 multiplier
= snd_usb_find_clock_multiplier(chip
, entity_id
, fmt
);
408 return __uac_clock_find_source(chip
, fmt
,
409 GET_VAL(multiplier
, proto
, bCSourceID
),
416 * For all kinds of sample rate settings and other device queries,
417 * the clock source (end-leaf) must be used. However, clock selectors,
418 * clock multipliers and sample rate converters may be specified as
419 * clock source input to terminal. This functions walks the clock path
420 * to its end and tries to find the source.
422 * The 'visited' bitfield is used internally to detect recursive loops.
424 * Returns the clock source UnitID (>=0) on success, or an error.
426 int snd_usb_clock_find_source(struct snd_usb_audio
*chip
,
427 const struct audioformat
*fmt
, bool validate
)
429 DECLARE_BITMAP(visited
, 256);
430 memset(visited
, 0, sizeof(visited
));
432 switch (fmt
->protocol
) {
435 return __uac_clock_find_source(chip
, fmt
, fmt
->clock
, visited
,
442 static int set_sample_rate_v1(struct snd_usb_audio
*chip
,
443 const struct audioformat
*fmt
, int rate
)
445 struct usb_device
*dev
= chip
->dev
;
446 unsigned char data
[3];
449 /* if endpoint doesn't have sampling rate control, bail out */
450 if (!(fmt
->attributes
& UAC_EP_CS_ATTR_SAMPLE_RATE
))
455 data
[2] = rate
>> 16;
456 err
= snd_usb_ctl_msg(dev
, usb_sndctrlpipe(dev
, 0), UAC_SET_CUR
,
457 USB_TYPE_CLASS
| USB_RECIP_ENDPOINT
| USB_DIR_OUT
,
458 UAC_EP_CS_ATTR_SAMPLE_RATE
<< 8,
459 fmt
->endpoint
, data
, sizeof(data
));
461 dev_err(&dev
->dev
, "%d:%d: cannot set freq %d to ep %#x\n",
462 fmt
->iface
, fmt
->altsetting
, rate
, fmt
->endpoint
);
466 /* Don't check the sample rate for devices which we know don't
468 if (chip
->quirk_flags
& QUIRK_FLAG_GET_SAMPLE_RATE
)
470 /* the firmware is likely buggy, don't repeat to fail too many times */
471 if (chip
->sample_rate_read_error
> 2)
474 err
= snd_usb_ctl_msg(dev
, usb_rcvctrlpipe(dev
, 0), UAC_GET_CUR
,
475 USB_TYPE_CLASS
| USB_RECIP_ENDPOINT
| USB_DIR_IN
,
476 UAC_EP_CS_ATTR_SAMPLE_RATE
<< 8,
477 fmt
->endpoint
, data
, sizeof(data
));
479 dev_err(&dev
->dev
, "%d:%d: cannot get freq at ep %#x\n",
480 fmt
->iface
, fmt
->altsetting
, fmt
->endpoint
);
481 chip
->sample_rate_read_error
++;
482 return 0; /* some devices don't support reading */
485 crate
= data
[0] | (data
[1] << 8) | (data
[2] << 16);
487 dev_info(&dev
->dev
, "failed to read current rate; disabling the check\n");
488 chip
->sample_rate_read_error
= 3; /* three strikes, see above */
493 dev_warn(&dev
->dev
, "current rate %d is different from the runtime rate %d\n", crate
, rate
);
494 // runtime->rate = crate;
500 static int get_sample_rate_v2v3(struct snd_usb_audio
*chip
, int iface
,
501 int altsetting
, int clock
)
503 struct usb_device
*dev
= chip
->dev
;
506 struct usb_host_interface
*ctrl_intf
;
508 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, iface
);
509 err
= snd_usb_ctl_msg(dev
, usb_rcvctrlpipe(dev
, 0), UAC2_CS_CUR
,
510 USB_TYPE_CLASS
| USB_RECIP_INTERFACE
| USB_DIR_IN
,
511 UAC2_CS_CONTROL_SAM_FREQ
<< 8,
512 snd_usb_ctrl_intf(ctrl_intf
) | (clock
<< 8),
513 &data
, sizeof(data
));
515 dev_warn(&dev
->dev
, "%d:%d: cannot get freq (v2/v3): err %d\n",
516 iface
, altsetting
, err
);
520 return le32_to_cpu(data
);
524 * Try to set the given sample rate:
526 * Return 0 if the clock source is read-only, the actual rate on success,
527 * or a negative error code.
529 * This function gets called from format.c to validate each sample rate, too.
530 * Hence no message is shown upon error
532 int snd_usb_set_sample_rate_v2v3(struct snd_usb_audio
*chip
,
533 const struct audioformat
*fmt
,
540 union uac23_clock_source_desc
*cs_desc
;
541 struct usb_host_interface
*ctrl_intf
;
543 ctrl_intf
= snd_usb_find_ctrl_interface(chip
, fmt
->iface
);
544 cs_desc
= snd_usb_find_clock_source(chip
, clock
, fmt
);
549 if (fmt
->protocol
== UAC_VERSION_3
)
550 bmControls
= le32_to_cpu(cs_desc
->v3
.bmControls
);
552 bmControls
= cs_desc
->v2
.bmControls
;
554 writeable
= uac_v2v3_control_is_writeable(bmControls
,
555 UAC2_CS_CONTROL_SAM_FREQ
);
559 data
= cpu_to_le32(rate
);
560 err
= snd_usb_ctl_msg(chip
->dev
, usb_sndctrlpipe(chip
->dev
, 0), UAC2_CS_CUR
,
561 USB_TYPE_CLASS
| USB_RECIP_INTERFACE
| USB_DIR_OUT
,
562 UAC2_CS_CONTROL_SAM_FREQ
<< 8,
563 snd_usb_ctrl_intf(ctrl_intf
) | (clock
<< 8),
564 &data
, sizeof(data
));
568 return get_sample_rate_v2v3(chip
, fmt
->iface
, fmt
->altsetting
, clock
);
571 static int set_sample_rate_v2v3(struct snd_usb_audio
*chip
,
572 const struct audioformat
*fmt
, int rate
)
574 int cur_rate
, prev_rate
;
577 /* First, try to find a valid clock. This may trigger
578 * automatic clock selection if the current clock is not
581 clock
= snd_usb_clock_find_source(chip
, fmt
, true);
583 /* We did not find a valid clock, but that might be
584 * because the current sample rate does not match an
585 * external clock source. Try again without validation
586 * and we will do another validation after setting the
589 clock
= snd_usb_clock_find_source(chip
, fmt
, false);
591 /* Hardcoded sample rates */
592 if (chip
->quirk_flags
& QUIRK_FLAG_IGNORE_CLOCK_SOURCE
)
599 prev_rate
= get_sample_rate_v2v3(chip
, fmt
->iface
, fmt
->altsetting
, clock
);
600 if (prev_rate
== rate
)
603 cur_rate
= snd_usb_set_sample_rate_v2v3(chip
, fmt
, clock
, rate
);
606 "%d:%d: cannot set freq %d (v2/v3): err %d\n",
607 fmt
->iface
, fmt
->altsetting
, rate
, cur_rate
);
612 cur_rate
= prev_rate
;
614 if (cur_rate
!= rate
) {
616 "%d:%d: freq mismatch: req %d, clock runs @%d\n",
617 fmt
->iface
, fmt
->altsetting
, rate
, cur_rate
);
618 /* continue processing */
621 /* FIXME - TEAC devices require the immediate interface setup */
622 if (USB_ID_VENDOR(chip
->usb_id
) == 0x0644) {
623 bool cur_base_48k
= (rate
% 48000 == 0);
624 bool prev_base_48k
= (prev_rate
% 48000 == 0);
625 if (cur_base_48k
!= prev_base_48k
) {
626 usb_set_interface(chip
->dev
, fmt
->iface
, fmt
->altsetting
);
627 if (chip
->quirk_flags
& QUIRK_FLAG_IFACE_DELAY
)
633 /* validate clock after rate change */
634 if (!uac_clock_source_is_valid(chip
, fmt
, clock
))
639 int snd_usb_init_sample_rate(struct snd_usb_audio
*chip
,
640 const struct audioformat
*fmt
, int rate
)
642 usb_audio_dbg(chip
, "%d:%d Set sample rate %d, clock %d\n",
643 fmt
->iface
, fmt
->altsetting
, rate
, fmt
->clock
);
645 switch (fmt
->protocol
) {
648 return set_sample_rate_v1(chip
, fmt
, rate
);
651 if (chip
->badd_profile
>= UAC3_FUNCTION_SUBCLASS_GENERIC_IO
) {
652 if (rate
!= UAC3_BADD_SAMPLING_RATE
)
659 return set_sample_rate_v2v3(chip
, fmt
, rate
);