diff options
Diffstat (limited to 'sound/usb')
-rw-r--r-- | sound/usb/clock.c | 22 | ||||
-rw-r--r-- | sound/usb/clock.h | 4 | ||||
-rw-r--r-- | sound/usb/endpoint.c | 1 | ||||
-rw-r--r-- | sound/usb/format.c | 9 | ||||
-rw-r--r-- | sound/usb/mixer.c | 37 | ||||
-rw-r--r-- | sound/usb/mixer.h | 1 | ||||
-rw-r--r-- | sound/usb/pcm.h | 3 | ||||
-rw-r--r-- | sound/usb/quirks.c | 1 |
8 files changed, 34 insertions, 44 deletions
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 7279d6190875..66bd1574d80b 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c | |||
@@ -121,7 +121,6 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id) | |||
121 | } | 121 | } |
122 | 122 | ||
123 | static int __uac_clock_find_source(struct snd_usb_audio *chip, | 123 | static int __uac_clock_find_source(struct snd_usb_audio *chip, |
124 | struct usb_host_interface *host_iface, | ||
125 | int entity_id, unsigned long *visited) | 124 | int entity_id, unsigned long *visited) |
126 | { | 125 | { |
127 | struct uac_clock_source_descriptor *source; | 126 | struct uac_clock_source_descriptor *source; |
@@ -138,11 +137,11 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, | |||
138 | } | 137 | } |
139 | 138 | ||
140 | /* first, see if the ID we're looking for is a clock source already */ | 139 | /* first, see if the ID we're looking for is a clock source already */ |
141 | source = snd_usb_find_clock_source(host_iface, entity_id); | 140 | source = snd_usb_find_clock_source(chip->ctrl_intf, entity_id); |
142 | if (source) | 141 | if (source) |
143 | return source->bClockID; | 142 | return source->bClockID; |
144 | 143 | ||
145 | selector = snd_usb_find_clock_selector(host_iface, entity_id); | 144 | selector = snd_usb_find_clock_selector(chip->ctrl_intf, entity_id); |
146 | if (selector) { | 145 | if (selector) { |
147 | int ret; | 146 | int ret; |
148 | 147 | ||
@@ -162,16 +161,15 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, | |||
162 | return -EINVAL; | 161 | return -EINVAL; |
163 | } | 162 | } |
164 | 163 | ||
165 | return __uac_clock_find_source(chip, host_iface, | 164 | return __uac_clock_find_source(chip, selector->baCSourceID[ret-1], |
166 | selector->baCSourceID[ret-1], | ||
167 | visited); | 165 | visited); |
168 | } | 166 | } |
169 | 167 | ||
170 | /* FIXME: multipliers only act as pass-thru element for now */ | 168 | /* FIXME: multipliers only act as pass-thru element for now */ |
171 | multiplier = snd_usb_find_clock_multiplier(host_iface, entity_id); | 169 | multiplier = snd_usb_find_clock_multiplier(chip->ctrl_intf, entity_id); |
172 | if (multiplier) | 170 | if (multiplier) |
173 | return __uac_clock_find_source(chip, host_iface, | 171 | return __uac_clock_find_source(chip, multiplier->bCSourceID, |
174 | multiplier->bCSourceID, visited); | 172 | visited); |
175 | 173 | ||
176 | return -EINVAL; | 174 | return -EINVAL; |
177 | } | 175 | } |
@@ -187,13 +185,11 @@ static int __uac_clock_find_source(struct snd_usb_audio *chip, | |||
187 | * | 185 | * |
188 | * Returns the clock source UnitID (>=0) on success, or an error. | 186 | * Returns the clock source UnitID (>=0) on success, or an error. |
189 | */ | 187 | */ |
190 | int snd_usb_clock_find_source(struct snd_usb_audio *chip, | 188 | int snd_usb_clock_find_source(struct snd_usb_audio *chip, int entity_id) |
191 | struct usb_host_interface *host_iface, | ||
192 | int entity_id) | ||
193 | { | 189 | { |
194 | DECLARE_BITMAP(visited, 256); | 190 | DECLARE_BITMAP(visited, 256); |
195 | memset(visited, 0, sizeof(visited)); | 191 | memset(visited, 0, sizeof(visited)); |
196 | return __uac_clock_find_source(chip, host_iface, entity_id, visited); | 192 | return __uac_clock_find_source(chip, entity_id, visited); |
197 | } | 193 | } |
198 | 194 | ||
199 | static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, | 195 | static int set_sample_rate_v1(struct snd_usb_audio *chip, int iface, |
@@ -251,7 +247,7 @@ static int set_sample_rate_v2(struct snd_usb_audio *chip, int iface, | |||
251 | struct usb_device *dev = chip->dev; | 247 | struct usb_device *dev = chip->dev; |
252 | unsigned char data[4]; | 248 | unsigned char data[4]; |
253 | int err, crate; | 249 | int err, crate; |
254 | int clock = snd_usb_clock_find_source(chip, chip->ctrl_intf, fmt->clock); | 250 | int clock = snd_usb_clock_find_source(chip, fmt->clock); |
255 | 251 | ||
256 | if (clock < 0) | 252 | if (clock < 0) |
257 | return clock; | 253 | return clock; |
diff --git a/sound/usb/clock.h b/sound/usb/clock.h index beb253684e2d..46630936d31f 100644 --- a/sound/usb/clock.h +++ b/sound/usb/clock.h | |||
@@ -5,8 +5,6 @@ int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface, | |||
5 | struct usb_host_interface *alts, | 5 | struct usb_host_interface *alts, |
6 | struct audioformat *fmt, int rate); | 6 | struct audioformat *fmt, int rate); |
7 | 7 | ||
8 | int snd_usb_clock_find_source(struct snd_usb_audio *chip, | 8 | int snd_usb_clock_find_source(struct snd_usb_audio *chip, int entity_id); |
9 | struct usb_host_interface *host_iface, | ||
10 | int entity_id); | ||
11 | 9 | ||
12 | #endif /* __USBAUDIO_CLOCK_H */ | 10 | #endif /* __USBAUDIO_CLOCK_H */ |
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 2af0f9e3dcdf..1a701f1e8f50 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "pcm.h" | 33 | #include "pcm.h" |
34 | #include "helper.h" | 34 | #include "helper.h" |
35 | #include "format.h" | 35 | #include "format.h" |
36 | #include "clock.h" | ||
36 | 37 | ||
37 | /* | 38 | /* |
38 | * free a substream | 39 | * free a substream |
diff --git a/sound/usb/format.c b/sound/usb/format.c index 30364aba79cc..4387f54d73db 100644 --- a/sound/usb/format.c +++ b/sound/usb/format.c | |||
@@ -264,13 +264,12 @@ static int parse_uac2_sample_rate_range(struct audioformat *fp, int nr_triplets, | |||
264 | * on the audioformat table (audio class v2). | 264 | * on the audioformat table (audio class v2). |
265 | */ | 265 | */ |
266 | static int parse_audio_format_rates_v2(struct snd_usb_audio *chip, | 266 | static int parse_audio_format_rates_v2(struct snd_usb_audio *chip, |
267 | struct audioformat *fp, | 267 | struct audioformat *fp) |
268 | struct usb_host_interface *iface) | ||
269 | { | 268 | { |
270 | struct usb_device *dev = chip->dev; | 269 | struct usb_device *dev = chip->dev; |
271 | unsigned char tmp[2], *data; | 270 | unsigned char tmp[2], *data; |
272 | int nr_triplets, data_size, ret = 0; | 271 | int nr_triplets, data_size, ret = 0; |
273 | int clock = snd_usb_clock_find_source(chip, chip->ctrl_intf, fp->clock); | 272 | int clock = snd_usb_clock_find_source(chip, fp->clock); |
274 | 273 | ||
275 | if (clock < 0) { | 274 | if (clock < 0) { |
276 | snd_printk(KERN_ERR "%s(): unable to find clock source (clock %d)\n", | 275 | snd_printk(KERN_ERR "%s(): unable to find clock source (clock %d)\n", |
@@ -391,7 +390,7 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, | |||
391 | break; | 390 | break; |
392 | case UAC_VERSION_2: | 391 | case UAC_VERSION_2: |
393 | /* fp->channels is already set in this case */ | 392 | /* fp->channels is already set in this case */ |
394 | ret = parse_audio_format_rates_v2(chip, fp, iface); | 393 | ret = parse_audio_format_rates_v2(chip, fp); |
395 | break; | 394 | break; |
396 | } | 395 | } |
397 | 396 | ||
@@ -450,7 +449,7 @@ static int parse_audio_format_ii(struct snd_usb_audio *chip, | |||
450 | framesize = le16_to_cpu(fmt->wSamplesPerFrame); | 449 | framesize = le16_to_cpu(fmt->wSamplesPerFrame); |
451 | snd_printd(KERN_INFO "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize); | 450 | snd_printd(KERN_INFO "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize); |
452 | fp->frame_size = framesize; | 451 | fp->frame_size = framesize; |
453 | ret = parse_audio_format_rates_v2(chip, fp, iface); | 452 | ret = parse_audio_format_rates_v2(chip, fp); |
454 | break; | 453 | break; |
455 | } | 454 | } |
456 | } | 455 | } |
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 1163ec3ca8a0..035a77bd67a6 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c | |||
@@ -291,16 +291,15 @@ static int get_abs_value(struct usb_mixer_elem_info *cval, int val) | |||
291 | 291 | ||
292 | static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, int validx, int *value_ret) | 292 | static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, int validx, int *value_ret) |
293 | { | 293 | { |
294 | struct snd_usb_audio *chip = cval->mixer->chip; | ||
294 | unsigned char buf[2]; | 295 | unsigned char buf[2]; |
295 | int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; | 296 | int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; |
296 | int timeout = 10; | 297 | int timeout = 10; |
297 | 298 | ||
298 | while (timeout-- > 0) { | 299 | while (timeout-- > 0) { |
299 | if (snd_usb_ctl_msg(cval->mixer->chip->dev, | 300 | if (snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), request, |
300 | usb_rcvctrlpipe(cval->mixer->chip->dev, 0), | ||
301 | request, | ||
302 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, | 301 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, |
303 | validx, cval->mixer->ctrlif | (cval->id << 8), | 302 | validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), |
304 | buf, val_len, 100) >= val_len) { | 303 | buf, val_len, 100) >= val_len) { |
305 | *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); | 304 | *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); |
306 | return 0; | 305 | return 0; |
@@ -313,6 +312,7 @@ static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, int v | |||
313 | 312 | ||
314 | static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, int validx, int *value_ret) | 313 | static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, int validx, int *value_ret) |
315 | { | 314 | { |
315 | struct snd_usb_audio *chip = cval->mixer->chip; | ||
316 | unsigned char buf[2 + 3*sizeof(__u16)]; /* enough space for one range */ | 316 | unsigned char buf[2 + 3*sizeof(__u16)]; /* enough space for one range */ |
317 | unsigned char *val; | 317 | unsigned char *val; |
318 | int ret, size; | 318 | int ret, size; |
@@ -328,16 +328,14 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, int v | |||
328 | 328 | ||
329 | memset(buf, 0, sizeof(buf)); | 329 | memset(buf, 0, sizeof(buf)); |
330 | 330 | ||
331 | ret = snd_usb_ctl_msg(cval->mixer->chip->dev, | 331 | ret = snd_usb_ctl_msg(chip->dev, usb_rcvctrlpipe(chip->dev, 0), bRequest, |
332 | usb_rcvctrlpipe(cval->mixer->chip->dev, 0), | ||
333 | bRequest, | ||
334 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, | 332 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, |
335 | validx, cval->mixer->ctrlif | (cval->id << 8), | 333 | validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), |
336 | buf, size, 1000); | 334 | buf, size, 1000); |
337 | 335 | ||
338 | if (ret < 0) { | 336 | if (ret < 0) { |
339 | snd_printk(KERN_ERR "cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n", | 337 | snd_printk(KERN_ERR "cannot get ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n", |
340 | request, validx, cval->mixer->ctrlif | (cval->id << 8), cval->val_type); | 338 | request, validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), cval->val_type); |
341 | return ret; | 339 | return ret; |
342 | } | 340 | } |
343 | 341 | ||
@@ -413,6 +411,7 @@ static int get_cur_mix_value(struct usb_mixer_elem_info *cval, | |||
413 | int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, | 411 | int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, |
414 | int request, int validx, int value_set) | 412 | int request, int validx, int value_set) |
415 | { | 413 | { |
414 | struct snd_usb_audio *chip = cval->mixer->chip; | ||
416 | unsigned char buf[2]; | 415 | unsigned char buf[2]; |
417 | int val_len, timeout = 10; | 416 | int val_len, timeout = 10; |
418 | 417 | ||
@@ -435,15 +434,14 @@ int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, | |||
435 | buf[0] = value_set & 0xff; | 434 | buf[0] = value_set & 0xff; |
436 | buf[1] = (value_set >> 8) & 0xff; | 435 | buf[1] = (value_set >> 8) & 0xff; |
437 | while (timeout-- > 0) | 436 | while (timeout-- > 0) |
438 | if (snd_usb_ctl_msg(cval->mixer->chip->dev, | 437 | if (snd_usb_ctl_msg(chip->dev, |
439 | usb_sndctrlpipe(cval->mixer->chip->dev, 0), | 438 | usb_sndctrlpipe(chip->dev, 0), request, |
440 | request, | ||
441 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, | 439 | USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, |
442 | validx, cval->mixer->ctrlif | (cval->id << 8), | 440 | validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), |
443 | buf, val_len, 100) >= 0) | 441 | buf, val_len, 100) >= 0) |
444 | return 0; | 442 | return 0; |
445 | snd_printdd(KERN_ERR "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n", | 443 | snd_printdd(KERN_ERR "cannot set ctl value: req = %#x, wValue = %#x, wIndex = %#x, type = %d, data = %#x/%#x\n", |
446 | request, validx, cval->mixer->ctrlif | (cval->id << 8), cval->val_type, buf[0], buf[1]); | 444 | request, validx, snd_usb_ctrl_intf(chip) | (cval->id << 8), cval->val_type, buf[0], buf[1]); |
447 | return -EINVAL; | 445 | return -EINVAL; |
448 | } | 446 | } |
449 | 447 | ||
@@ -761,6 +759,8 @@ static void usb_mixer_elem_free(struct snd_kcontrol *kctl) | |||
761 | */ | 759 | */ |
762 | static int get_min_max(struct usb_mixer_elem_info *cval, int default_min) | 760 | static int get_min_max(struct usb_mixer_elem_info *cval, int default_min) |
763 | { | 761 | { |
762 | struct snd_usb_audio *chip = cval->mixer->chip; | ||
763 | |||
764 | /* for failsafe */ | 764 | /* for failsafe */ |
765 | cval->min = default_min; | 765 | cval->min = default_min; |
766 | cval->max = cval->min + 1; | 766 | cval->max = cval->min + 1; |
@@ -783,7 +783,7 @@ static int get_min_max(struct usb_mixer_elem_info *cval, int default_min) | |||
783 | if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 || | 783 | if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 || |
784 | get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) { | 784 | get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) { |
785 | snd_printd(KERN_ERR "%d:%d: cannot get min/max values for control %d (id %d)\n", | 785 | snd_printd(KERN_ERR "%d:%d: cannot get min/max values for control %d (id %d)\n", |
786 | cval->id, cval->mixer->ctrlif, cval->control, cval->id); | 786 | cval->id, snd_usb_ctrl_intf(chip), cval->control, cval->id); |
787 | return -EINVAL; | 787 | return -EINVAL; |
788 | } | 788 | } |
789 | if (get_ctl_value(cval, UAC_GET_RES, (cval->control << 8) | minchn, &cval->res) < 0) { | 789 | if (get_ctl_value(cval, UAC_GET_RES, (cval->control << 8) | minchn, &cval->res) < 0) { |
@@ -1913,7 +1913,7 @@ static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer) | |||
1913 | struct usb_host_interface *hostif; | 1913 | struct usb_host_interface *hostif; |
1914 | void *p; | 1914 | void *p; |
1915 | 1915 | ||
1916 | hostif = &usb_ifnum_to_if(mixer->chip->dev, mixer->ctrlif)->altsetting[0]; | 1916 | hostif = mixer->chip->ctrl_intf; |
1917 | memset(&state, 0, sizeof(state)); | 1917 | memset(&state, 0, sizeof(state)); |
1918 | state.chip = mixer->chip; | 1918 | state.chip = mixer->chip; |
1919 | state.mixer = mixer; | 1919 | state.mixer = mixer; |
@@ -2005,7 +2005,7 @@ static void snd_usb_mixer_proc_read(struct snd_info_entry *entry, | |||
2005 | list_for_each_entry(mixer, &chip->mixer_list, list) { | 2005 | list_for_each_entry(mixer, &chip->mixer_list, list) { |
2006 | snd_iprintf(buffer, | 2006 | snd_iprintf(buffer, |
2007 | "USB Mixer: usb_id=0x%08x, ctrlif=%i, ctlerr=%i\n", | 2007 | "USB Mixer: usb_id=0x%08x, ctrlif=%i, ctlerr=%i\n", |
2008 | chip->usb_id, mixer->ctrlif, | 2008 | chip->usb_id, snd_usb_ctrl_intf(chip), |
2009 | mixer->ignore_ctl_error); | 2009 | mixer->ignore_ctl_error); |
2010 | snd_iprintf(buffer, "Card: %s\n", chip->card->longname); | 2010 | snd_iprintf(buffer, "Card: %s\n", chip->card->longname); |
2011 | for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) { | 2011 | for (unitid = 0; unitid < MAX_ID_ELEMS; unitid++) { |
@@ -2123,7 +2123,7 @@ static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer) | |||
2123 | int buffer_length; | 2123 | int buffer_length; |
2124 | unsigned int epnum; | 2124 | unsigned int epnum; |
2125 | 2125 | ||
2126 | hostif = &usb_ifnum_to_if(mixer->chip->dev, mixer->ctrlif)->altsetting[0]; | 2126 | hostif = mixer->chip->ctrl_intf; |
2127 | /* we need one interrupt input endpoint */ | 2127 | /* we need one interrupt input endpoint */ |
2128 | if (get_iface_desc(hostif)->bNumEndpoints < 1) | 2128 | if (get_iface_desc(hostif)->bNumEndpoints < 1) |
2129 | return 0; | 2129 | return 0; |
@@ -2166,7 +2166,6 @@ int snd_usb_create_mixer(struct snd_usb_audio *chip, int ctrlif, | |||
2166 | if (!mixer) | 2166 | if (!mixer) |
2167 | return -ENOMEM; | 2167 | return -ENOMEM; |
2168 | mixer->chip = chip; | 2168 | mixer->chip = chip; |
2169 | mixer->ctrlif = ctrlif; | ||
2170 | mixer->ignore_ctl_error = ignore_error; | 2169 | mixer->ignore_ctl_error = ignore_error; |
2171 | mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems), | 2170 | mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems), |
2172 | GFP_KERNEL); | 2171 | GFP_KERNEL); |
diff --git a/sound/usb/mixer.h b/sound/usb/mixer.h index a7cf1007fbb0..26c636c5c93a 100644 --- a/sound/usb/mixer.h +++ b/sound/usb/mixer.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | struct usb_mixer_interface { | 4 | struct usb_mixer_interface { |
5 | struct snd_usb_audio *chip; | 5 | struct snd_usb_audio *chip; |
6 | unsigned int ctrlif; | ||
7 | struct list_head list; | 6 | struct list_head list; |
8 | unsigned int ignore_ctl_error; | 7 | unsigned int ignore_ctl_error; |
9 | struct urb *urb; | 8 | struct urb *urb; |
diff --git a/sound/usb/pcm.h b/sound/usb/pcm.h index 1c931b68f3b5..ed3e283f618d 100644 --- a/sound/usb/pcm.h +++ b/sound/usb/pcm.h | |||
@@ -7,8 +7,5 @@ int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface, | |||
7 | struct usb_host_interface *alts, | 7 | struct usb_host_interface *alts, |
8 | struct audioformat *fmt); | 8 | struct audioformat *fmt); |
9 | 9 | ||
10 | int snd_usb_init_sample_rate(struct snd_usb_audio *chip, int iface, | ||
11 | struct usb_host_interface *alts, | ||
12 | struct audioformat *fmt, int rate); | ||
13 | 10 | ||
14 | #endif /* __USBAUDIO_PCM_H */ | 11 | #endif /* __USBAUDIO_PCM_H */ |
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index b45e54c09ba2..9a9da09586a5 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include "helper.h" | 32 | #include "helper.h" |
33 | #include "endpoint.h" | 33 | #include "endpoint.h" |
34 | #include "pcm.h" | 34 | #include "pcm.h" |
35 | #include "clock.h" | ||
35 | 36 | ||
36 | /* | 37 | /* |
37 | * handle the quirks for the contained interfaces | 38 | * handle the quirks for the contained interfaces |