|
@@ -1664,6 +1664,7 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_add_routes);
|
|
|
int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
|
|
|
{
|
|
|
struct snd_soc_dapm_widget *w;
|
|
|
+ unsigned int val;
|
|
|
|
|
|
list_for_each_entry(w, &dapm->card->widgets, list)
|
|
|
{
|
|
@@ -1712,6 +1713,18 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
|
|
|
case snd_soc_dapm_post:
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ /* Read the initial power state from the device */
|
|
|
+ if (w->reg >= 0) {
|
|
|
+ val = snd_soc_read(w->codec, w->reg);
|
|
|
+ val &= 1 << w->shift;
|
|
|
+ if (w->invert)
|
|
|
+ val = !val;
|
|
|
+
|
|
|
+ if (val)
|
|
|
+ w->power = 1;
|
|
|
+ }
|
|
|
+
|
|
|
w->new = 1;
|
|
|
}
|
|
|
|