|
@@ -50,8 +50,6 @@
|
|
|
|
|
|
#define NAME_SIZE 32
|
|
|
|
|
|
-static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
|
|
|
-
|
|
|
#ifdef CONFIG_DEBUG_FS
|
|
|
struct dentry *snd_soc_debugfs_root;
|
|
|
EXPORT_SYMBOL_GPL(snd_soc_debugfs_root);
|
|
@@ -543,6 +541,15 @@ static int soc_ac97_dev_register(struct snd_soc_codec *codec)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+static void codec2codec_close_delayed_work(struct work_struct *work)
|
|
|
+{
|
|
|
+ /* Currently nothing to do for c2c links
|
|
|
+ * Since c2c links are internal nodes in the DAPM graph and
|
|
|
+ * don't interface with the outside world or application layer
|
|
|
+ * we don't have to do any special handling on close.
|
|
|
+ */
|
|
|
+}
|
|
|
+
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
|
/* powers down audio subsystem for suspend */
|
|
|
int snd_soc_suspend(struct device *dev)
|
|
@@ -1441,6 +1448,9 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
|
|
|
return ret;
|
|
|
}
|
|
|
} else {
|
|
|
+ INIT_DELAYED_WORK(&rtd->delayed_work,
|
|
|
+ codec2codec_close_delayed_work);
|
|
|
+
|
|
|
/* link the DAI widgets */
|
|
|
play_w = codec_dai->playback_widget;
|
|
|
capture_w = cpu_dai->capture_widget;
|
|
@@ -2709,59 +2719,6 @@ int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double);
|
|
|
|
|
|
-/**
|
|
|
- * snd_soc_info_enum_ext - external enumerated single mixer info callback
|
|
|
- * @kcontrol: mixer control
|
|
|
- * @uinfo: control element information
|
|
|
- *
|
|
|
- * Callback to provide information about an external enumerated
|
|
|
- * single mixer.
|
|
|
- *
|
|
|
- * Returns 0 for success.
|
|
|
- */
|
|
|
-int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
|
|
|
- struct snd_ctl_elem_info *uinfo)
|
|
|
-{
|
|
|
- struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
|
|
|
-
|
|
|
- uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
|
|
|
- uinfo->count = 1;
|
|
|
- uinfo->value.enumerated.items = e->max;
|
|
|
-
|
|
|
- if (uinfo->value.enumerated.item > e->max - 1)
|
|
|
- uinfo->value.enumerated.item = e->max - 1;
|
|
|
- strcpy(uinfo->value.enumerated.name,
|
|
|
- e->texts[uinfo->value.enumerated.item]);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext);
|
|
|
-
|
|
|
-/**
|
|
|
- * snd_soc_info_volsw_ext - external single mixer info callback
|
|
|
- * @kcontrol: mixer control
|
|
|
- * @uinfo: control element information
|
|
|
- *
|
|
|
- * Callback to provide information about a single external mixer control.
|
|
|
- *
|
|
|
- * Returns 0 for success.
|
|
|
- */
|
|
|
-int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
|
|
|
- struct snd_ctl_elem_info *uinfo)
|
|
|
-{
|
|
|
- int max = kcontrol->private_value;
|
|
|
-
|
|
|
- if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
|
|
|
- uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
|
|
- else
|
|
|
- uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
|
|
-
|
|
|
- uinfo->count = 1;
|
|
|
- uinfo->value.integer.min = 0;
|
|
|
- uinfo->value.integer.max = max;
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext);
|
|
|
-
|
|
|
/**
|
|
|
* snd_soc_info_volsw - single mixer info callback
|
|
|
* @kcontrol: mixer control
|