Skip to content

Commit

Permalink
ALSA: usb: stream: move audioformat alloc/init into separate function
Browse files Browse the repository at this point in the history
Offload snd_usb_parse_audio_interface() function which
became quite long after adding UAC3 spec support.

Move audioformat allocation and initialization
into separate function, this will make easier
future refactoring.
Attributes left in the original func because it'll
be used for UAC3 BADD profiles suport in the future

There is no functional change.

Signed-off-by: Ruslan Bilovol <ruslan.bilovol@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Ruslan Bilovol authored and Takashi Iwai committed May 4, 2018
1 parent 8c55807 commit 4d47fa8
Showing 1 changed file with 36 additions and 16 deletions.
52 changes: 36 additions & 16 deletions sound/usb/stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,37 @@ snd_usb_find_output_terminal_descriptor(struct usb_host_interface *ctrl_iface,
return NULL;
}

static struct audioformat *
audio_format_alloc_init(struct snd_usb_audio *chip,
struct usb_host_interface *alts,
int protocol, int iface_no, int altset_idx,
int altno, int num_channels, int clock)
{
struct audioformat *fp;

fp = kzalloc(sizeof(*fp), GFP_KERNEL);
if (!fp)
return NULL;

fp->iface = iface_no;
fp->altsetting = altno;
fp->altset_idx = altset_idx;
fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
fp->datainterval = snd_usb_parse_datainterval(chip, alts);
fp->protocol = protocol;
fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
fp->channels = num_channels;
if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH)
fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
* (fp->maxpacksize & 0x7ff);
fp->clock = clock;
INIT_LIST_HEAD(&fp->list);

return fp;
}


int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
{
struct usb_device *dev;
Expand Down Expand Up @@ -928,25 +959,14 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
continue;
}

fp = kzalloc(sizeof(*fp), GFP_KERNEL);
fp = audio_format_alloc_init(chip, alts, protocol, iface_no, i,
altno, num_channels, clock);
if (!fp)
return -ENOMEM;

fp->iface = iface_no;
fp->altsetting = altno;
fp->altset_idx = i;
fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
fp->datainterval = snd_usb_parse_datainterval(chip, alts);
fp->protocol = protocol;
fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
fp->channels = num_channels;
if (snd_usb_get_speed(dev) == USB_SPEED_HIGH)
fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
* (fp->maxpacksize & 0x7ff);
fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
fp->clock = clock;
INIT_LIST_HEAD(&fp->list);
fp->attributes = parse_uac_endpoint_attributes(chip, alts,
protocol,
iface_no);

/* some quirks for attributes here */
snd_usb_audioformat_attributes_quirk(chip, fp, stream);
Expand Down

0 comments on commit 4d47fa8

Please sign in to comment.