Skip to content

Commit c8a132e

Browse files
charleskeepaxbroonie
authored andcommitted
ASoC: soc-component: Add new snd_soc_component_get_kcontrol() helpers
Add new helper functions snd_soc_component_get_kcontrol() and snd_soc_component_get_kcontrol_locked() that returns a kcontrol by name, but will factor in the components name_prefix, to handle situations where multiple components are present with the same controls. Signed-off-by: Charles Keepax <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent becfa08 commit c8a132e

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

include/sound/soc-component.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,11 @@ int snd_soc_component_force_enable_pin_unlocked(
462462
const char *pin);
463463

464464
/* component controls */
465+
struct snd_kcontrol *snd_soc_component_get_kcontrol(struct snd_soc_component *component,
466+
const char * const ctl);
467+
struct snd_kcontrol *
468+
snd_soc_component_get_kcontrol_locked(struct snd_soc_component *component,
469+
const char * const ctl);
465470
int snd_soc_component_notify_control(struct snd_soc_component *component,
466471
const char * const ctl);
467472

sound/soc/soc-component.c

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,19 +236,45 @@ int snd_soc_component_force_enable_pin_unlocked(
236236
}
237237
EXPORT_SYMBOL_GPL(snd_soc_component_force_enable_pin_unlocked);
238238

239-
int snd_soc_component_notify_control(struct snd_soc_component *component,
240-
const char * const ctl)
239+
static void soc_get_kcontrol_name(struct snd_soc_component *component,
240+
char *buf, int size, const char * const ctl)
241241
{
242-
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
243-
struct snd_kcontrol *kctl;
244-
245242
/* When updating, change also snd_soc_dapm_widget_name_cmp() */
246243
if (component->name_prefix)
247-
snprintf(name, ARRAY_SIZE(name), "%s %s", component->name_prefix, ctl);
244+
snprintf(buf, size, "%s %s", component->name_prefix, ctl);
248245
else
249-
snprintf(name, ARRAY_SIZE(name), "%s", ctl);
246+
snprintf(buf, size, "%s", ctl);
247+
}
248+
249+
struct snd_kcontrol *snd_soc_component_get_kcontrol(struct snd_soc_component *component,
250+
const char * const ctl)
251+
{
252+
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
253+
254+
soc_get_kcontrol_name(component, name, ARRAY_SIZE(name), ctl);
255+
256+
return snd_soc_card_get_kcontrol(component->card, name);
257+
}
258+
EXPORT_SYMBOL_GPL(snd_soc_component_get_kcontrol);
259+
260+
struct snd_kcontrol *
261+
snd_soc_component_get_kcontrol_locked(struct snd_soc_component *component,
262+
const char * const ctl)
263+
{
264+
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
265+
266+
soc_get_kcontrol_name(component, name, ARRAY_SIZE(name), ctl);
267+
268+
return snd_soc_card_get_kcontrol_locked(component->card, name);
269+
}
270+
EXPORT_SYMBOL_GPL(snd_soc_component_get_kcontrol_locked);
271+
272+
int snd_soc_component_notify_control(struct snd_soc_component *component,
273+
const char * const ctl)
274+
{
275+
struct snd_kcontrol *kctl;
250276

251-
kctl = snd_soc_card_get_kcontrol(component->card, name);
277+
kctl = snd_soc_component_get_kcontrol(component, ctl);
252278
if (!kctl)
253279
return soc_component_ret(component, -EINVAL);
254280

0 commit comments

Comments
 (0)