xref: /kernel/linux/linux-5.10/sound/usb/clock.c (revision 8c2ecf20)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 *   Clock domain and sample rate management functions
4 */
5
6#include <linux/bitops.h>
7#include <linux/init.h>
8#include <linux/string.h>
9#include <linux/usb.h>
10#include <linux/usb/audio.h>
11#include <linux/usb/audio-v2.h>
12#include <linux/usb/audio-v3.h>
13
14#include <sound/core.h>
15#include <sound/info.h>
16#include <sound/pcm.h>
17
18#include "usbaudio.h"
19#include "card.h"
20#include "helper.h"
21#include "clock.h"
22#include "quirks.h"
23
24static void *find_uac_clock_desc(struct usb_host_interface *iface, int id,
25				 bool (*validator)(void *, int), u8 type)
26{
27	void *cs = NULL;
28
29	while ((cs = snd_usb_find_csint_desc(iface->extra, iface->extralen,
30					     cs, type))) {
31		if (validator(cs, id))
32			return cs;
33	}
34
35	return NULL;
36}
37
38static bool validate_clock_source_v2(void *p, int id)
39{
40	struct uac_clock_source_descriptor *cs = p;
41	return cs->bClockID == id;
42}
43
44static bool validate_clock_source_v3(void *p, int id)
45{
46	struct uac3_clock_source_descriptor *cs = p;
47	return cs->bClockID == id;
48}
49
50static bool validate_clock_selector_v2(void *p, int id)
51{
52	struct uac_clock_selector_descriptor *cs = p;
53	return cs->bClockID == id;
54}
55
56static bool validate_clock_selector_v3(void *p, int id)
57{
58	struct uac3_clock_selector_descriptor *cs = p;
59	return cs->bClockID == id;
60}
61
62static bool validate_clock_multiplier_v2(void *p, int id)
63{
64	struct uac_clock_multiplier_descriptor *cs = p;
65	return cs->bClockID == id;
66}
67
68static bool validate_clock_multiplier_v3(void *p, int id)
69{
70	struct uac3_clock_multiplier_descriptor *cs = p;
71	return cs->bClockID == id;
72}
73
74#define DEFINE_FIND_HELPER(name, obj, validator, type)		\
75static obj *name(struct usb_host_interface *iface, int id)	\
76{								\
77	return find_uac_clock_desc(iface, id, validator, type);	\
78}
79
80DEFINE_FIND_HELPER(snd_usb_find_clock_source,
81		   struct uac_clock_source_descriptor,
82		   validate_clock_source_v2, UAC2_CLOCK_SOURCE);
83DEFINE_FIND_HELPER(snd_usb_find_clock_source_v3,
84		   struct uac3_clock_source_descriptor,
85		   validate_clock_source_v3, UAC3_CLOCK_SOURCE);
86
87DEFINE_FIND_HELPER(snd_usb_find_clock_selector,
88		   struct uac_clock_selector_descriptor,
89		   validate_clock_selector_v2, UAC2_CLOCK_SELECTOR);
90DEFINE_FIND_HELPER(snd_usb_find_clock_selector_v3,
91		   struct uac3_clock_selector_descriptor,
92		   validate_clock_selector_v3, UAC3_CLOCK_SELECTOR);
93
94DEFINE_FIND_HELPER(snd_usb_find_clock_multiplier,
95		   struct uac_clock_multiplier_descriptor,
96		   validate_clock_multiplier_v2, UAC2_CLOCK_MULTIPLIER);
97DEFINE_FIND_HELPER(snd_usb_find_clock_multiplier_v3,
98		   struct uac3_clock_multiplier_descriptor,
99		   validate_clock_multiplier_v3, UAC3_CLOCK_MULTIPLIER);
100
101static int uac_clock_selector_get_val(struct snd_usb_audio *chip, int selector_id)
102{
103	unsigned char buf;
104	int ret;
105
106	ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0),
107			      UAC2_CS_CUR,
108			      USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
109			      UAC2_CX_CLOCK_SELECTOR << 8,
110			      snd_usb_ctrl_intf(chip) | (selector_id << 8),
111			      &buf, sizeof(buf));
112
113	if (ret < 0)
114		return ret;
115
116	return buf;
117}
118
119static int uac_clock_selector_set_val(struct snd_usb_audio *chip, int selector_id,
120					unsigned char pin)
121{
122	int ret;
123
124	ret = snd_usb_ctl_msg(chip->dev, usb_sndctrlpipe(chip->dev, 0),
125			      UAC2_CS_CUR,
126			      USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT,
127			      UAC2_CX_CLOCK_SELECTOR << 8,
128			      snd_usb_ctrl_intf(chip) | (selector_id << 8),
129			      &pin, sizeof(pin));
130	if (ret < 0)
131		return ret;
132
133	if (ret != sizeof(pin)) {
134		usb_audio_err(chip,
135			"setting selector (id %d) unexpected length %d\n",
136			selector_id, ret);
137		return -EINVAL;
138	}
139
140	ret = uac_clock_selector_get_val(chip, selector_id);
141	if (ret < 0)
142		return ret;
143
144	if (ret != pin) {
145		usb_audio_err(chip,
146			"setting selector (id %d) to %x failed (current: %d)\n",
147			selector_id, pin, ret);
148		return -EINVAL;
149	}
150
151	return ret;
152}
153
154static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
155					    struct audioformat *fmt,
156					    int source_id)
157{
158	bool ret = false;
159	int count;
160	unsigned char data;
161	struct usb_device *dev = chip->dev;
162
163	if (fmt->protocol == UAC_VERSION_2) {
164		struct uac_clock_source_descriptor *cs_desc =
165			snd_usb_find_clock_source(chip->ctrl_intf, source_id);
166
167		if (!cs_desc)
168			return false;
169
170		/*
171		 * Assume the clock is valid if clock source supports only one
172		 * single sample rate, the terminal is connected directly to it
173		 * (there is no clock selector) and clock type is internal.
174		 * This is to deal with some Denon DJ controllers that always
175		 * reports that clock is invalid.
176		 */
177		if (fmt->nr_rates == 1 &&
178		    (fmt->clock & 0xff) == cs_desc->bClockID &&
179		    (cs_desc->bmAttributes & 0x3) !=
180				UAC_CLOCK_SOURCE_TYPE_EXT)
181			return true;
182	}
183
184	/*
185	 * MOTU MicroBook IIc
186	 * Sample rate changes takes more than 2 seconds for this device. Clock
187	 * validity request returns false during that period.
188	 */
189	if (chip->usb_id == USB_ID(0x07fd, 0x0004)) {
190		count = 0;
191
192		while ((!ret) && (count < 50)) {
193			int err;
194
195			msleep(100);
196
197			err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
198					      USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
199					      UAC2_CS_CONTROL_CLOCK_VALID << 8,
200					      snd_usb_ctrl_intf(chip) | (source_id << 8),
201					      &data, sizeof(data));
202			if (err < 0) {
203				dev_warn(&dev->dev,
204					 "%s(): cannot get clock validity for id %d\n",
205					   __func__, source_id);
206				return false;
207			}
208
209			ret = !!data;
210			count++;
211		}
212	}
213
214	return ret;
215}
216
217static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
218				      struct audioformat *fmt,
219				      int source_id)
220{
221	int err;
222	unsigned char data;
223	struct usb_device *dev = chip->dev;
224	u32 bmControls;
225
226	if (fmt->protocol == UAC_VERSION_3) {
227		struct uac3_clock_source_descriptor *cs_desc =
228			snd_usb_find_clock_source_v3(chip->ctrl_intf, source_id);
229
230		if (!cs_desc)
231			return false;
232		bmControls = le32_to_cpu(cs_desc->bmControls);
233	} else { /* UAC_VERSION_1/2 */
234		struct uac_clock_source_descriptor *cs_desc =
235			snd_usb_find_clock_source(chip->ctrl_intf, source_id);
236
237		if (!cs_desc)
238			return false;
239		bmControls = cs_desc->bmControls;
240	}
241
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))
245		return true;
246
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(chip) | (source_id << 8),
251			      &data, sizeof(data));
252
253	if (err < 0) {
254		dev_warn(&dev->dev,
255			 "%s(): cannot get clock validity for id %d\n",
256			   __func__, source_id);
257		return false;
258	}
259
260	if (data)
261		return true;
262	else
263		return uac_clock_source_is_valid_quirk(chip, fmt, source_id);
264}
265
266static int __uac_clock_find_source(struct snd_usb_audio *chip,
267				   struct audioformat *fmt, int entity_id,
268				   unsigned long *visited, bool validate)
269{
270	struct uac_clock_source_descriptor *source;
271	struct uac_clock_selector_descriptor *selector;
272	struct uac_clock_multiplier_descriptor *multiplier;
273
274	entity_id &= 0xff;
275
276	if (test_and_set_bit(entity_id, visited)) {
277		usb_audio_warn(chip,
278			 "%s(): recursive clock topology detected, id %d.\n",
279			 __func__, entity_id);
280		return -EINVAL;
281	}
282
283	/* first, see if the ID we're looking for is a clock source already */
284	source = snd_usb_find_clock_source(chip->ctrl_intf, entity_id);
285	if (source) {
286		entity_id = source->bClockID;
287		if (validate && !uac_clock_source_is_valid(chip, fmt,
288								entity_id)) {
289			usb_audio_err(chip,
290				"clock source %d is not valid, cannot use\n",
291				entity_id);
292			return -ENXIO;
293		}
294		return entity_id;
295	}
296
297	selector = snd_usb_find_clock_selector(chip->ctrl_intf, entity_id);
298	if (selector) {
299		int ret, i, cur, err;
300
301		/* the entity ID we are looking for is a selector.
302		 * find out what it currently selects */
303		ret = uac_clock_selector_get_val(chip, selector->bClockID);
304		if (ret < 0)
305			return ret;
306
307		/* Selector values are one-based */
308
309		if (ret > selector->bNrInPins || ret < 1) {
310			usb_audio_err(chip,
311				"%s(): selector reported illegal value, id %d, ret %d\n",
312				__func__, selector->bClockID, ret);
313
314			return -EINVAL;
315		}
316
317		cur = ret;
318		ret = __uac_clock_find_source(chip, fmt,
319					      selector->baCSourceID[ret - 1],
320					      visited, validate);
321		if (ret > 0) {
322			/*
323			 * For Samsung USBC Headset (AKG), setting clock selector again
324			 * will result in incorrect default clock setting problems
325			 */
326			if (chip->usb_id == USB_ID(0x04e8, 0xa051))
327				return ret;
328			err = uac_clock_selector_set_val(chip, entity_id, cur);
329			if (err < 0)
330				return err;
331		}
332
333		if (!validate || ret > 0 || !chip->autoclock)
334			return ret;
335
336		/* The current clock source is invalid, try others. */
337		for (i = 1; i <= selector->bNrInPins; i++) {
338			if (i == cur)
339				continue;
340
341			ret = __uac_clock_find_source(chip, fmt,
342						      selector->baCSourceID[i - 1],
343						      visited, true);
344			if (ret < 0)
345				continue;
346
347			err = uac_clock_selector_set_val(chip, entity_id, i);
348			if (err < 0)
349				continue;
350
351			usb_audio_info(chip,
352				 "found and selected valid clock source %d\n",
353				 ret);
354			return ret;
355		}
356
357		return -ENXIO;
358	}
359
360	/* FIXME: multipliers only act as pass-thru element for now */
361	multiplier = snd_usb_find_clock_multiplier(chip->ctrl_intf, entity_id);
362	if (multiplier)
363		return __uac_clock_find_source(chip, fmt,
364					       multiplier->bCSourceID,
365					       visited, validate);
366
367	return -EINVAL;
368}
369
370static int __uac3_clock_find_source(struct snd_usb_audio *chip,
371				    struct audioformat *fmt, int entity_id,
372				    unsigned long *visited, bool validate)
373{
374	struct uac3_clock_source_descriptor *source;
375	struct uac3_clock_selector_descriptor *selector;
376	struct uac3_clock_multiplier_descriptor *multiplier;
377
378	entity_id &= 0xff;
379
380	if (test_and_set_bit(entity_id, visited)) {
381		usb_audio_warn(chip,
382			 "%s(): recursive clock topology detected, id %d.\n",
383			 __func__, entity_id);
384		return -EINVAL;
385	}
386
387	/* first, see if the ID we're looking for is a clock source already */
388	source = snd_usb_find_clock_source_v3(chip->ctrl_intf, entity_id);
389	if (source) {
390		entity_id = source->bClockID;
391		if (validate && !uac_clock_source_is_valid(chip, fmt,
392								entity_id)) {
393			usb_audio_err(chip,
394				"clock source %d is not valid, cannot use\n",
395				entity_id);
396			return -ENXIO;
397		}
398		return entity_id;
399	}
400
401	selector = snd_usb_find_clock_selector_v3(chip->ctrl_intf, entity_id);
402	if (selector) {
403		int ret, i, cur, err;
404
405		/* the entity ID we are looking for is a selector.
406		 * find out what it currently selects */
407		ret = uac_clock_selector_get_val(chip, selector->bClockID);
408		if (ret < 0)
409			return ret;
410
411		/* Selector values are one-based */
412
413		if (ret > selector->bNrInPins || ret < 1) {
414			usb_audio_err(chip,
415				"%s(): selector reported illegal value, id %d, ret %d\n",
416				__func__, selector->bClockID, ret);
417
418			return -EINVAL;
419		}
420
421		cur = ret;
422		ret = __uac3_clock_find_source(chip, fmt,
423					       selector->baCSourceID[ret - 1],
424					       visited, validate);
425		if (ret > 0) {
426			err = uac_clock_selector_set_val(chip, entity_id, cur);
427			if (err < 0)
428				return err;
429		}
430
431		if (!validate || ret > 0 || !chip->autoclock)
432			return ret;
433
434		/* The current clock source is invalid, try others. */
435		for (i = 1; i <= selector->bNrInPins; i++) {
436			int err;
437
438			if (i == cur)
439				continue;
440
441			ret = __uac3_clock_find_source(chip, fmt,
442						       selector->baCSourceID[i - 1],
443						       visited, true);
444			if (ret < 0)
445				continue;
446
447			err = uac_clock_selector_set_val(chip, entity_id, i);
448			if (err < 0)
449				continue;
450
451			usb_audio_info(chip,
452				 "found and selected valid clock source %d\n",
453				 ret);
454			return ret;
455		}
456
457		return -ENXIO;
458	}
459
460	/* FIXME: multipliers only act as pass-thru element for now */
461	multiplier = snd_usb_find_clock_multiplier_v3(chip->ctrl_intf,
462						      entity_id);
463	if (multiplier)
464		return __uac3_clock_find_source(chip, fmt,
465						multiplier->bCSourceID,
466						visited, validate);
467
468	return -EINVAL;
469}
470
471/*
472 * For all kinds of sample rate settings and other device queries,
473 * the clock source (end-leaf) must be used. However, clock selectors,
474 * clock multipliers and sample rate converters may be specified as
475 * clock source input to terminal. This functions walks the clock path
476 * to its end and tries to find the source.
477 *
478 * The 'visited' bitfield is used internally to detect recursive loops.
479 *
480 * Returns the clock source UnitID (>=0) on success, or an error.
481 */
482int snd_usb_clock_find_source(struct snd_usb_audio *chip,
483			      struct audioformat *fmt, bool validate)
484{
485	DECLARE_BITMAP(visited, 256);
486	memset(visited, 0, sizeof(visited));
487
488	switch (fmt->protocol) {
489	case UAC_VERSION_2:
490		return __uac_clock_find_source(chip, fmt, fmt->clock, visited,
491					       validate);
492	case UAC_VERSION_3:
493		return __uac3_clock_find_source(chip, fmt, fmt->clock, visited,
494					       validate);
495	default:
496		return -EINVAL;
497	}
498}
499
500static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface,
501			      struct usb_host_interface *alts,
502			      struct audioformat *fmt, int rate)
503{
504	struct usb_device *dev = chip->dev;
505	unsigned int ep;
506	unsigned char data[3];
507	int err, crate;
508
509	if (get_iface_desc(alts)->bNumEndpoints < 1)
510		return -EINVAL;
511	ep = get_endpoint(alts, 0)->bEndpointAddress;
512
513	/* if endpoint doesn't have sampling rate control, bail out */
514	if (!(fmt->attributes & UAC_EP_CS_ATTR_SAMPLE_RATE))
515		return 0;
516
517	data[0] = rate;
518	data[1] = rate >> 8;
519	data[2] = rate >> 16;
520	err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
521			      USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_OUT,
522			      UAC_EP_CS_ATTR_SAMPLE_RATE << 8, ep,
523			      data, sizeof(data));
524	if (err < 0) {
525		dev_err(&dev->dev, "%d:%d: cannot set freq %d to ep %#x\n",
526			iface, fmt->altsetting, rate, ep);
527		return err;
528	}
529
530	/* Don't check the sample rate for devices which we know don't
531	 * support reading */
532	if (snd_usb_get_sample_rate_quirk(chip))
533		return 0;
534	/* the firmware is likely buggy, don't repeat to fail too many times */
535	if (chip->sample_rate_read_error > 2)
536		return 0;
537
538	err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC_GET_CUR,
539			      USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_IN,
540			      UAC_EP_CS_ATTR_SAMPLE_RATE << 8, ep,
541			      data, sizeof(data));
542	if (err < 0) {
543		dev_err(&dev->dev, "%d:%d: cannot get freq at ep %#x\n",
544			iface, fmt->altsetting, ep);
545		chip->sample_rate_read_error++;
546		return 0; /* some devices don't support reading */
547	}
548
549	crate = data[0] | (data[1] << 8) | (data[2] << 16);
550	if (!crate) {
551		dev_info(&dev->dev, "failed to read current rate; disabling the check\n");
552		chip->sample_rate_read_error = 3; /* three strikes, see above */
553		return 0;
554	}
555
556	if (crate != rate) {
557		dev_warn(&dev->dev, "current rate %d is different from the runtime rate %d\n", crate, rate);
558		// runtime->rate = crate;
559	}
560
561	return 0;
562}
563
564static int get_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
565			      int altsetting, int clock)
566{
567	struct usb_device *dev = chip->dev;
568	__le32 data;
569	int err;
570
571	err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
572			      USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
573			      UAC2_CS_CONTROL_SAM_FREQ << 8,
574			      snd_usb_ctrl_intf(chip) | (clock << 8),
575			      &data, sizeof(data));
576	if (err < 0) {
577		dev_warn(&dev->dev, "%d:%d: cannot get freq (v2/v3): err %d\n",
578			 iface, altsetting, err);
579		return 0;
580	}
581
582	return le32_to_cpu(data);
583}
584
585static int set_sample_rate_v2v3(struct snd_usb_audio *chip, int iface,
586			      struct usb_host_interface *alts,
587			      struct audioformat *fmt, int rate)
588{
589	struct usb_device *dev = chip->dev;
590	__le32 data;
591	int err, cur_rate, prev_rate;
592	int clock;
593	bool writeable;
594	u32 bmControls;
595
596	/* First, try to find a valid clock. This may trigger
597	 * automatic clock selection if the current clock is not
598	 * valid.
599	 */
600	clock = snd_usb_clock_find_source(chip, fmt, true);
601	if (clock < 0) {
602		/* We did not find a valid clock, but that might be
603		 * because the current sample rate does not match an
604		 * external clock source. Try again without validation
605		 * and we will do another validation after setting the
606		 * rate.
607		 */
608		clock = snd_usb_clock_find_source(chip, fmt, false);
609		if (clock < 0)
610			return clock;
611	}
612
613	prev_rate = get_sample_rate_v2v3(chip, iface, fmt->altsetting, clock);
614	if (prev_rate == rate)
615		goto validation;
616
617	if (fmt->protocol == UAC_VERSION_3) {
618		struct uac3_clock_source_descriptor *cs_desc;
619
620		cs_desc = snd_usb_find_clock_source_v3(chip->ctrl_intf, clock);
621		bmControls = le32_to_cpu(cs_desc->bmControls);
622	} else {
623		struct uac_clock_source_descriptor *cs_desc;
624
625		cs_desc = snd_usb_find_clock_source(chip->ctrl_intf, clock);
626		bmControls = cs_desc->bmControls;
627	}
628
629	writeable = uac_v2v3_control_is_writeable(bmControls,
630						  UAC2_CS_CONTROL_SAM_FREQ);
631	if (writeable) {
632		data = cpu_to_le32(rate);
633		err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC2_CS_CUR,
634				      USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_OUT,
635				      UAC2_CS_CONTROL_SAM_FREQ << 8,
636				      snd_usb_ctrl_intf(chip) | (clock << 8),
637				      &data, sizeof(data));
638		if (err < 0) {
639			usb_audio_err(chip,
640				"%d:%d: cannot set freq %d (v2/v3): err %d\n",
641				iface, fmt->altsetting, rate, err);
642			return err;
643		}
644
645		cur_rate = get_sample_rate_v2v3(chip, iface,
646						fmt->altsetting, clock);
647	} else {
648		cur_rate = prev_rate;
649	}
650
651	if (cur_rate != rate) {
652		if (!writeable) {
653			usb_audio_warn(chip,
654				 "%d:%d: freq mismatch (RO clock): req %d, clock runs @%d\n",
655				 iface, fmt->altsetting, rate, cur_rate);
656			return -ENXIO;
657		}
658		usb_audio_dbg(chip,
659			"current rate %d is different from the runtime rate %d\n",
660			cur_rate, rate);
661	}
662
663	/* Some devices doesn't respond to sample rate changes while the
664	 * interface is active. */
665	if (rate != prev_rate) {
666		usb_set_interface(dev, iface, 0);
667		snd_usb_set_interface_quirk(dev);
668		usb_set_interface(dev, iface, fmt->altsetting);
669		snd_usb_set_interface_quirk(dev);
670	}
671
672validation:
673	/* validate clock after rate change */
674	if (!uac_clock_source_is_valid(chip, fmt, clock))
675		return -ENXIO;
676	return 0;
677}
678
679int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface,
680			     struct usb_host_interface *alts,
681			     struct audioformat *fmt, int rate)
682{
683	switch (fmt->protocol) {
684	case UAC_VERSION_1:
685	default:
686		return set_sample_rate_v1(chip, iface, alts, fmt, rate);
687
688	case UAC_VERSION_3:
689		if (chip->badd_profile >= UAC3_FUNCTION_SUBCLASS_GENERIC_IO) {
690			if (rate != UAC3_BADD_SAMPLING_RATE)
691				return -ENXIO;
692			else
693				return 0;
694		}
695		fallthrough;
696	case UAC_VERSION_2:
697		return set_sample_rate_v2v3(chip, iface, alts, fmt, rate);
698	}
699}
700
701