[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cdi-devel] [PATCH 7/9] hdaudio: Power up audio function and all widgets



Widgets that aren't fully powered stay silent. So power them up.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 hdaudio/device.h | 2 ++
 hdaudio/main.c   | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/hdaudio/device.h b/hdaudio/device.h
index c9fc3d1..2697da0 100644
--- a/hdaudio/device.h
+++ b/hdaudio/device.h
@@ -186,6 +186,8 @@ enum codec_verbs {
     VERB_GET_PIN_CONTROL    = 0xf0700,
     VERB_SET_PIN_CONTROL    = 0x70700,
     VERB_GET_EAPD_BTL       = 0xf0c00,
+    VERB_GET_POWER_STATE    = 0xf0500,
+    VERB_SET_POWER_STATE    = 0x70500,
 };
 
 enum codec_parameters {
diff --git a/hdaudio/main.c b/hdaudio/main.c
index 98e2a8a..4d0b02f 100644
--- a/hdaudio/main.c
+++ b/hdaudio/main.c
@@ -347,6 +347,10 @@ static void widget_init(struct hda_device* hda, int codec, int nid)
         default:
             return;
     }
+
+    if (widget_cap & WIDGET_CAP_POWER_CNTRL) {
+        codec_query(hda, codec, nid, VERB_SET_POWER_STATE | 0x0);
+    }
 }
 
 static int codec_enumerate_widgets(struct hda_device* hda, int codec)
@@ -381,6 +385,8 @@ static int codec_enumerate_widgets(struct hda_device* hda, int codec)
             continue;
         }
 
+        codec_query(hda, codec, fg_start + i, VERB_SET_POWER_STATE | 0x0);
+
         for (j = 0; j < num_widgets; j++) {
             widget_init(hda, codec, widgets_start + j);
         }
-- 
2.1.4