aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-dapm.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2009-02-28 16:14:20 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2009-02-28 16:31:21 -0500
commit8b37dbd2a180667e51db0552383df18743239c25 (patch)
tree297cbdf96c94c2a44763086f71a42942eb206851 /sound/soc/soc-dapm.c
parent4eae080dda3a563160be2f642cfbda27ffc42178 (diff)
ASoC: Add SND_SOC_DAPM_PIN_SWITCH controls for exposing DAPM pins
On some systems it is desirable for control for DAPM pins to be provided to user space. This is the case with things like GSM modems which are controlled primarily from user space, for example. Provide a helper which exposes the state of a DAPM pin to user space for use in cases like this. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r--sound/soc/soc-dapm.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index f4a8753c84c0..4b8dbbfe2efb 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -1421,6 +1421,76 @@ out:
1421EXPORT_SYMBOL_GPL(snd_soc_dapm_put_value_enum_double); 1421EXPORT_SYMBOL_GPL(snd_soc_dapm_put_value_enum_double);
1422 1422
1423/** 1423/**
1424 * snd_soc_dapm_info_pin_switch - Info for a pin switch
1425 *
1426 * @kcontrol: mixer control
1427 * @uinfo: control element information
1428 *
1429 * Callback to provide information about a pin switch control.
1430 */
1431int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol,
1432 struct snd_ctl_elem_info *uinfo)
1433{
1434 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
1435 uinfo->count = 1;
1436 uinfo->value.integer.min = 0;
1437 uinfo->value.integer.max = 1;
1438
1439 return 0;
1440}
1441EXPORT_SYMBOL_GPL(snd_soc_dapm_info_pin_switch);
1442
1443/**
1444 * snd_soc_dapm_get_pin_switch - Get information for a pin switch
1445 *
1446 * @kcontrol: mixer control
1447 * @ucontrol: Value
1448 */
1449int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
1450 struct snd_ctl_elem_value *ucontrol)
1451{
1452 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1453 const char *pin = (const char *)kcontrol->private_value;
1454
1455 mutex_lock(&codec->mutex);
1456
1457 ucontrol->value.integer.value[0] =
1458 snd_soc_dapm_get_pin_status(codec, pin);
1459
1460 mutex_unlock(&codec->mutex);
1461
1462 return 0;
1463}
1464EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_switch);
1465
1466/**
1467 * snd_soc_dapm_put_pin_switch - Set information for a pin switch
1468 *
1469 * @kcontrol: mixer control
1470 * @ucontrol: Value
1471 */
1472int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
1473 struct snd_ctl_elem_value *ucontrol)
1474{
1475 struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1476 const char *pin = (const char *)kcontrol->private_value;
1477
1478 mutex_lock(&codec->mutex);
1479
1480 if (ucontrol->value.integer.value[0])
1481 snd_soc_dapm_enable_pin(codec, pin);
1482 else
1483 snd_soc_dapm_disable_pin(codec, pin);
1484
1485 snd_soc_dapm_sync(codec);
1486
1487 mutex_unlock(&codec->mutex);
1488
1489 return 0;
1490}
1491EXPORT_SYMBOL_GPL(snd_soc_dapm_put_pin_switch);
1492
1493/**
1424 * snd_soc_dapm_new_control - create new dapm control 1494 * snd_soc_dapm_new_control - create new dapm control
1425 * @codec: audio codec 1495 * @codec: audio codec
1426 * @widget: widget template 1496 * @widget: widget template