[alsa-devel] Question about soc_bind_aux_dev()
Hi ALSA ML
Do you know why snd_soc_aux_dev has both name and codec_name ??
struct snd_soc_aux_dev { => const char *name; /* Codec name */ ... => const char *codec_name; ... };
For example, samsung's speyside.c has both name and codec_name
static struct snd_soc_aux_dev speyside_aux_dev[] = { { => .name = "wm9081", => .codec_name = "wm9081.1-006c", ... }, };
In my research, there is no driver which is using .name only. All drivers are having codec_of_node, or .codec_name
Now, in the soc_bind_aux_dev(), it checks .codec_name or codec_of_node first. This means, there is zero chance to use .name ?
static int soc_bind_aux_dev(struct snd_soc_card *card, int num) { ... => if (aux_dev->codec_of_node || aux_dev->codec_name) { ... component = soc_find_component(...); ... => } else if (aux_dev->name) { ... component = soc_find_component(...); ... } ... }
Why .name is needed ??
Thank you for your help !! Best regards --- Kuninori Morimoto
On Wed, 22 May 2019 10:30:51 +0200, Kuninori Morimoto wrote:
Hi ALSA ML
Do you know why snd_soc_aux_dev has both name and codec_name ??
struct snd_soc_aux_dev { => const char *name; /* Codec name */ ... => const char *codec_name; ... };
For example, samsung's speyside.c has both name and codec_name
static struct snd_soc_aux_dev speyside_aux_dev[] = { { => .name = "wm9081", => .codec_name = "wm9081.1-006c", ... }, };
In my research, there is no driver which is using .name only. All drivers are having codec_of_node, or .codec_name
Now, in the soc_bind_aux_dev(), it checks .codec_name or codec_of_node first. This means, there is zero chance to use .name ?
static int soc_bind_aux_dev(struct snd_soc_card *card, int num) { ... => if (aux_dev->codec_of_node || aux_dev->codec_name) { ... component = soc_find_component(...); ... => } else if (aux_dev->name) { ... component = soc_find_component(...); ... } ... }
Why .name is needed ??
AFAIK, the binding with aux_dev->name was introduced later as a fallback in case of no codec. Through a quick glance at git log, the commit f2ed6b07645e brought the behavior. Other than that, the field was used merely for some label, e.g. passed to snd_soc_post_component_init().
Takashi
Hi Takashi
Thank you for your feedback
Why .name is needed ??
AFAIK, the binding with aux_dev->name was introduced later as a fallback in case of no codec. Through a quick glance at git log, the commit f2ed6b07645e brought the behavior. Other than that, the field was used merely for some label, e.g. passed to snd_soc_post_component_init().
Ahh, OK. for non codec... Then, the reason was "main" is for search for codec, and it is using "codec_xxx" variable name. Then, using .name and .codec_name/.codec_of_node in the same time is strange.
Anyway, the purpose of these are for finding component. I think this complicated code can be simple if we could replace it to snd_soc_dai_link_component which exist for this purpose ?
struct snd_soc_aux_dev { - const char *name; /* Codec name */
/* * specify multi-codec either by device name, or by * DT/OF node, but not both. */ - const char *codec_name; - struct device_node *codec_of_node; + struct snd_soc_dai_link_component dlc; + /* codec/machine specific init - e.g. add machine controls */ int (*init)(struct snd_soc_component *component); };
Hi Takashi, again
AFAIK, the binding with aux_dev->name was introduced later as a fallback in case of no codec. Through a quick glance at git log, the commit f2ed6b07645e brought the behavior. Other than that, the field was used merely for some label, e.g. passed to snd_soc_post_component_init().
soc_post_component_init() is using dai_link->name, not aux_dev->name. But, am I misunderstanding ?
Thank you for your help !! Best regards --- Kuninori Morimoto
On Thu, 23 May 2019 03:01:10 +0200, Kuninori Morimoto wrote:
Hi Takashi, again
AFAIK, the binding with aux_dev->name was introduced later as a fallback in case of no codec. Through a quick glance at git log, the commit f2ed6b07645e brought the behavior. Other than that, the field was used merely for some label, e.g. passed to snd_soc_post_component_init().
soc_post_component_init() is using dai_link->name, not aux_dev->name. But, am I misunderstanding ?
It used to be called, but was removed by the commit above.
The author of the patch, Mengdong, should be able to give a better answer about the use case of aux_dev->name.
thanks,
Takashi
participants (2)
-
Kuninori Morimoto
-
Takashi Iwai