[alsa-devel] [PATCH 1/2] ALSA: usb-audio: Refactor clock finder helpers
Ruslan Bilovol
ruslan.bilovol at gmail.com
Wed Apr 4 00:31:05 CEST 2018
On Tue, Apr 3, 2018 at 9:02 PM, Takashi Iwai <tiwai at suse.de> wrote:
> On Tue, 03 Apr 2018 19:13:51 +0200,
> Andrew Chant wrote:
>>
>> On Tue, Apr 3, 2018 at 8:48 AM, Takashi Iwai <tiwai at suse.de> wrote:
>> >
>> > There are lots of open-coded functions to find a clock source,
>> > selector and multiplier. Now there are both v2 and v3, so six
>> > variants.
>> >
>> > This patch refactors the code to use a common helper for the main
>> > loop, and define each validator function for each target.
>> > There is no functional change.
>> >
>> > Fixes: 9a2fe9b801f5 ("ALSA: usb: initial USB Audio Device Class 3.0 support")
>> > Signed-off-by: Takashi Iwai <tiwai at suse.de>
>> > ---
>> > sound/usb/clock.c | 127 +++++++++++++++++++++++-------------------------------
>> > 1 file changed, 53 insertions(+), 74 deletions(-)
>> >
>> > diff --git a/sound/usb/clock.c b/sound/usb/clock.c
>> > index ab39ccb974c6..c5f0cf532c0c 100644
>> > --- a/sound/usb/clock.c
>> > +++ b/sound/usb/clock.c
>> > @@ -35,105 +35,84 @@
>> > #include "clock.h"
>> > #include "quirks.h"
>> >
>> > -static struct uac_clock_source_descriptor *
>> > - snd_usb_find_clock_source(struct usb_host_interface *ctrl_iface,
>> > - int clock_id)
>> > +static void *find_descriptor(struct usb_host_interface *iface, int id,
>> > + bool (*validator)(void *, int), u8 type)
>>
>> this comment isn't very important, and might be wrong:
>> find_descriptor is a very generic name, it might make grepping a
>> little confusing.
>> Could you use find_clock_descriptor? find_uac_clock_descriptor?
>
> Makes sense. Now I renamed it with a bit shorter one,
> find_uac_clock_desc(). The revised patch is below.
>
>
> thanks,
>
> Takashi
>
> -- 8< --
> From: Takashi Iwai <tiwai at suse.de>
> Subject: [PATCH v2 1/2] ALSA: usb-audio: Refactor clock finder helpers
>
> There are lots of open-coded functions to find a clock source,
> selector and multiplier. Now there are both v2 and v3, so six
> variants.
>
> This patch refactors the code to use a common helper for the main
> loop, and define each validator function for each target.
> There is no functional change.
>
> Fixes: 9a2fe9b801f5 ("ALSA: usb: initial USB Audio Device Class 3.0 support")
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
Good improvement.
Reviewed-by: Ruslan Bilovol <ruslan.bilovol at gmail.com>
> ---
> v1->v2: rename find_descriptor() with find_uac_clock_desc()
>
> sound/usb/clock.c | 127 +++++++++++++++++++++++-------------------------------
> 1 file changed, 53 insertions(+), 74 deletions(-)
>
> diff --git a/sound/usb/clock.c b/sound/usb/clock.c
> index ab39ccb974c6..27c2275a2505 100644
> --- a/sound/usb/clock.c
> +++ b/sound/usb/clock.c
> @@ -35,105 +35,84 @@
> #include "clock.h"
> #include "quirks.h"
>
> -static struct uac_clock_source_descriptor *
> - snd_usb_find_clock_source(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static void *find_uac_clock_desc(struct usb_host_interface *iface, int id,
> + bool (*validator)(void *, int), u8 type)
> {
> - struct uac_clock_source_descriptor *cs = NULL;
> + void *cs = NULL;
>
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC2_CLOCK_SOURCE))) {
> - if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
> + while ((cs = snd_usb_find_csint_desc(iface->extra, iface->extralen,
> + cs, type))) {
> + if (validator(cs, id))
> return cs;
> }
>
> return NULL;
> }
>
> -static struct uac3_clock_source_descriptor *
> - snd_usb_find_clock_source_v3(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static bool validate_clock_source_v2(void *p, int id)
> {
> - struct uac3_clock_source_descriptor *cs = NULL;
> -
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC3_CLOCK_SOURCE))) {
> - if (cs->bClockID == clock_id)
> - return cs;
> - }
> -
> - return NULL;
> + struct uac_clock_source_descriptor *cs = p;
> + return cs->bLength >= sizeof(*cs) && cs->bClockID == id;
> }
>
> -static struct uac_clock_selector_descriptor *
> - snd_usb_find_clock_selector(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static bool validate_clock_source_v3(void *p, int id)
> {
> - struct uac_clock_selector_descriptor *cs = NULL;
> -
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC2_CLOCK_SELECTOR))) {
> - if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id) {
> - if (cs->bLength < 5 + cs->bNrInPins)
> - return NULL;
> - return cs;
> - }
> - }
> -
> - return NULL;
> + struct uac3_clock_source_descriptor *cs = p;
> + return cs->bClockID == id;
> }
>
> -static struct uac3_clock_selector_descriptor *
> - snd_usb_find_clock_selector_v3(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static bool validate_clock_selector_v2(void *p, int id)
> {
> - struct uac3_clock_selector_descriptor *cs = NULL;
> -
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC3_CLOCK_SELECTOR))) {
> - if (cs->bClockID == clock_id)
> - return cs;
> - }
> -
> - return NULL;
> + struct uac_clock_selector_descriptor *cs = p;
> + return cs->bLength >= sizeof(*cs) && cs->bClockID == id &&
> + cs->bLength >= 5 + cs->bNrInPins;
> }
>
> -static struct uac_clock_multiplier_descriptor *
> - snd_usb_find_clock_multiplier(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static bool validate_clock_selector_v3(void *p, int id)
> {
> - struct uac_clock_multiplier_descriptor *cs = NULL;
> -
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC2_CLOCK_MULTIPLIER))) {
> - if (cs->bLength >= sizeof(*cs) && cs->bClockID == clock_id)
> - return cs;
> - }
> -
> - return NULL;
> + struct uac3_clock_selector_descriptor *cs = p;
> + return cs->bClockID == id;
> }
>
> -static struct uac3_clock_multiplier_descriptor *
> - snd_usb_find_clock_multiplier_v3(struct usb_host_interface *ctrl_iface,
> - int clock_id)
> +static bool validate_clock_multiplier_v2(void *p, int id)
> {
> - struct uac3_clock_multiplier_descriptor *cs = NULL;
> + struct uac_clock_multiplier_descriptor *cs = p;
> + return cs->bLength >= sizeof(*cs) && cs->bClockID == id;
> +}
>
> - while ((cs = snd_usb_find_csint_desc(ctrl_iface->extra,
> - ctrl_iface->extralen,
> - cs, UAC3_CLOCK_MULTIPLIER))) {
> - if (cs->bClockID == clock_id)
> - return cs;
> - }
> +static bool validate_clock_multiplier_v3(void *p, int id)
> +{
> + struct uac3_clock_multiplier_descriptor *cs = p;
> + return cs->bClockID == id;
> +}
>
> - return NULL;
> +#define DEFINE_FIND_HELPER(name, obj, validator, type) \
> +static obj *name(struct usb_host_interface *iface, int id) \
> +{ \
> + return find_uac_clock_desc(iface, id, validator, type); \
> }
>
> +DEFINE_FIND_HELPER(snd_usb_find_clock_source,
> + struct uac_clock_source_descriptor,
> + validate_clock_source_v2, UAC2_CLOCK_SOURCE);
> +DEFINE_FIND_HELPER(snd_usb_find_clock_source_v3,
> + struct uac3_clock_source_descriptor,
> + validate_clock_source_v3, UAC3_CLOCK_SOURCE);
> +
> +DEFINE_FIND_HELPER(snd_usb_find_clock_selector,
> + struct uac_clock_selector_descriptor,
> + validate_clock_selector_v2, UAC2_CLOCK_SELECTOR);
> +DEFINE_FIND_HELPER(snd_usb_find_clock_selector_v3,
> + struct uac3_clock_selector_descriptor,
> + validate_clock_selector_v3, UAC3_CLOCK_SELECTOR);
> +
> +DEFINE_FIND_HELPER(snd_usb_find_clock_multiplier,
> + struct uac_clock_multiplier_descriptor,
> + validate_clock_multiplier_v2, UAC2_CLOCK_MULTIPLIER);
> +DEFINE_FIND_HELPER(snd_usb_find_clock_multiplier_v3,
> + struct uac3_clock_multiplier_descriptor,
> + validate_clock_multiplier_v3, UAC3_CLOCK_MULTIPLIER);
> +
> static int uac_clock_selector_get_val(struct snd_usb_audio *chip, int selector_id)
> {
> unsigned char buf;
> --
> 2.16.2
>
More information about the Alsa-devel
mailing list