MODULE_PARM_DESC(dapm_status, "enable DPM sysfs entries");
/* create a new dapm widget */
-static struct snd_soc_dapm_widget *dapm_cnew_widget(
+static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
const struct snd_soc_dapm_widget *_widget)
{
- struct snd_soc_dapm_widget* widget;
- widget = kmalloc(sizeof(struct snd_soc_dapm_widget), GFP_KERNEL);
- if (!widget)
- return NULL;
-
- memcpy(widget, _widget, sizeof(struct snd_soc_dapm_widget));
- return widget;
+ return kmemdup(_widget, sizeof(*_widget), GFP_KERNEL);
}
/* set up initial codec paths */
* o Input pin to Output pin (bypass, sidetone)
* o DAC to ADC (loopback).
*/
-int dapm_power_widgets(struct snd_soc_codec *codec, int event)
+static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
{
struct snd_soc_dapm_widget *w;
int in, out, i, c = 1, *seq = NULL, ret = 0, power_change, power;
p->source->name);
}
list_for_each_entry(p, &w->sinks, list_source) {
- p = list_entry(lp, struct snd_soc_dapm_path, list_source);
if (p->connect)
printk(" out %s %s\n", p->name ? p->name : "static",
p->sink->name);
#endif
/* test and update the power status of a mux widget */
-int dapm_mux_update_power(struct snd_soc_dapm_widget *widget,
- struct snd_kcontrol *kcontrol, int mask, int val, struct soc_enum* e)
+static int dapm_mux_update_power(struct snd_soc_dapm_widget *widget,
+ struct snd_kcontrol *kcontrol, int mask,
+ int val, struct soc_enum* e)
{
struct snd_soc_dapm_path *path;
int found = 0;
return 0;
}
-EXPORT_SYMBOL_GPL(dapm_mux_update_power);
/* test and update the power status of a mixer widget */
-int dapm_mixer_update_power(struct snd_soc_dapm_widget *widget,
- struct snd_kcontrol *kcontrol, int reg, int val_mask, int val, int invert)
+static int dapm_mixer_update_power(struct snd_soc_dapm_widget *widget,
+ struct snd_kcontrol *kcontrol, int reg,
+ int val_mask, int val, int invert)
{
struct snd_soc_dapm_path *path;
int found = 0;
return 0;
}
-EXPORT_SYMBOL_GPL(dapm_mixer_update_power);
/* show dapm widget status in sys fs */
static ssize_t dapm_widget_show(struct device *dev,
}
/* free all dapm widgets and resources */
-void dapm_free_widgets(struct snd_soc_codec *codec)
+static void dapm_free_widgets(struct snd_soc_codec *codec)
{
struct snd_soc_dapm_widget *w, *next_w;
struct snd_soc_dapm_path *p, *next_p;
if (wsink->id == snd_soc_dapm_input) {
if (wsource->id == snd_soc_dapm_micbias ||
wsource->id == snd_soc_dapm_mic ||
- wsink->id == snd_soc_dapm_line)
+ wsink->id == snd_soc_dapm_line ||
+ wsink->id == snd_soc_dapm_output)
wsink->ext = 1;
}
if (wsource->id == snd_soc_dapm_output) {
if (wsink->id == snd_soc_dapm_spk ||
wsink->id == snd_soc_dapm_hp ||
- wsink->id == snd_soc_dapm_line)
+ wsink->id == snd_soc_dapm_line ||
+ wsink->id == snd_soc_dapm_input)
wsource->ext = 1;
}
{
struct snd_soc_dapm_widget *w;
+ if (stream == NULL)
+ return 0;
+
mutex_lock(&codec->mutex);
list_for_each_entry(w, &codec->dapm_widgets, list)
{