[alsa-devel] [PATCH 1/2] ASoC: Add support for Conexant CX2072X CODEC

Takashi Iwai tiwai at suse.de
Fri May 3 10:05:25 CEST 2019


On Fri, 03 May 2019 08:47:29 +0200,
Mark Brown wrote:
> 
> > > > +#define cx2072x_plbk_eq_en_info		snd_ctl_boolean_mono_info
> 
> > > Why not just use the function directly rather than hiding it?
> 
> > Just a standard idiom.  Can be replaced if preferred.
> 
> Please.

BTW, a good reason for the style above is that it makes code more
undrestandable.  For defining a ctl element, typically we define three
callback functions, info, get and put, in that order:

static int foo_info()
{
	....
}

static int foo_get()
{
	....
}

static int foo_put()
{
	...
};

and often the actual snd_kcontrol_new table containing these callbacks
appears much later, where you'd need to scroll down a few screens to
read that point.

In the above, especially defining the info callback at the beginning
is important.  By reading foo_init() at first, readers can know which
type (int, boolean, enum, etc) and the number of elements to be used
in get/put callbacks beforehand.  It's a commonly seen mistake, for
example, that a wrong type (e.g. integer) is passed to info callback
while enum type is used in the get/put.

The #define above keeps this foo_info() definition while optimizing
with the standard helper.  If we drop this and set
snd_ctl_boolean_mono_info directly in the snd_kcontrol_new entry,
you'll have to go and back the screen just to take a look at the info
callback.

That's why I called it a standard idiom.  It's not strictly necessary,
but often help reading / reviewing the code.  Though, it's just
another bikeshed theme, so I'm not sticking with this style.


thanks,

Takashi


More information about the Alsa-devel mailing list