]> git.alsa-project.org Git - alsa.git/commitdiff
hda-analyzer: fix parsing of proc files when mfg is set and afg is present
authorJaroslav Kysela <perex@t61.perex-int.cz>
Sat, 17 Jul 2010 07:15:43 +0000 (09:15 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sat, 17 Jul 2010 07:15:43 +0000 (09:15 +0200)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
hda-analyzer/hda_analyzer.py
hda-analyzer/hda_codec.py
hda-analyzer/hda_proc.py

index ecfbb7e7cf8b70749ced77588fd588c7e57774d1..5c78ca91b669172c90cfa4b4f7dd0934b38841aa 100755 (executable)
@@ -76,7 +76,6 @@ def read_nodes2(card, codec):
 def read_nodes3(card, codec, proc_file):
   c = HDACodecProc(card, codec, proc_file)
   c.analyze()
-  c.graph(dump=True)
   if not card in CODEC_TREE:
     CODEC_TREE[card] = {}
     DIFF_TREE[card] = {}
index ae4028dca2ae1ab0dafd59861f52feb310120b68..8b8ade2f302dd61835de2b5791c436525cde7de3 100644 (file)
@@ -757,6 +757,8 @@ class HDANode:
     return self.codec.get_controls(self.nid)
 
   def get_mixercontrols(self):
+    if not self.codec.mixer:
+      return []
     ctls = self.get_controls()
     res = []
     for ctl in ctls:
@@ -1469,7 +1471,7 @@ class HDACodec:
           return doplace(nid, 1, x+1)
         return False
       return None
-  
+
     error = 0
     res = []
     unplaced = []
index 0af22fe5a4a3f36cb6971d09c90e59f415abbe6a..09a0c4ef10cd5e397156cf2f6f307d11a9b2d016 100644 (file)
@@ -467,6 +467,7 @@ class HDACodecProc(HDACodec, HDABaseProc):
     self.device = device
     self.mcard = HDACardProc(card)
     self.proc_codec_id = None
+    self.mixer = None
     self.parse(proc_file)
     if self.proc_codec_id:
       self.mcard.name = self.proc_codec_id
@@ -540,11 +541,14 @@ class HDACodecProc(HDACodec, HDABaseProc):
       return idx + 1
 
     self.proc_afg = -1
+    self.proc_mfg = -1
     self.proc_nids = {}
-    self.proc_function_id = 0
+    self.proc_afg_function_id = 0
+    self.proc_mfg_function_id = 0
     self.proc_vendor_id = 0
     self.proc_subsystem_id = 0
     self.proc_revision_id =0
+    function_id = 0
     lines = str.splitlines()
     idx = 0
     idx, self.proc_codec_id = lookfor(idx, 'Codec: ')
@@ -555,7 +559,7 @@ class HDACodecProc(HDACodec, HDABaseProc):
     self.device = tmp # really?
     self.proc_function_id = None
     if lines[idx].startswith('Function Id: '):
-      idx, self.proc_function_id = lookforint(idx, 'Function Id: ')
+      idx, function_id = lookforint(idx, 'Function Id: ')
     idx, self.proc_vendor_id = lookforint(idx, 'Vendor Id: ')
     idx, self.proc_subsystem_id = lookforint(idx, 'Subsystem Id: ')
     idx, self.proc_revision_id = lookforint(idx, 'Revision Id:' )
@@ -564,17 +568,23 @@ class HDACodecProc(HDACodec, HDABaseProc):
     nomfg = lines[idx].strip() == 'No Modem Function Group found'
     if nomfg:
       self.proc_afg = 1
+      self.proc_afg_function_id = function_id
       idx += 1
     elif lines[idx].startswith('Default PCM:'):
       self.proc_afg = 1
+      self.proc_afg_function_id = function_id
     else:
-      if self.proc_function_id is None:
-        self.proc_function_id = 2
-      idx, self.proc_modem_grp = lookforint(idx, 'Modem Function Group: ')
-      self.proc_afg = -1
-      return
-    if self.proc_function_id is None:
-      self.proc_function_id = 1
+      idx, self.proc_mfg = lookforint(idx, 'Modem Function Group: ')
+      if not self.proc_mfg is None:
+        self.proc_mfg_function_id = function_id
+      else:
+        self.proc_mfg = -1
+      if lines[idx].startswith('Default PCM:'):
+        self.proc_afg = 1
+    if self.proc_afg >= 0 and self.proc_afg_function_id == 0:
+      self.proc_afg_function_id = 1
+    if self.proc_mfg >= 0 and self.proc_mfg_function_id == 0:
+      self.proc_mfg_function_id = 2
     if not lines[idx].startswith('Default PCM:'):
       self.wrongfile('default pcm expected')
     if lines[idx+1].strip() == "N/A":
@@ -706,7 +716,7 @@ class HDACodecProc(HDACodec, HDABaseProc):
         return self.proc_revision_id
     elif nid == self.proc_afg:
       if param == PARAMS['FUNCTION_TYPE']:
-        return self.proc_function_id
+        return self.proc_afg_function_id
       elif param == PARAMS['PCM']:
         return self.proc_pcm_bits
       elif param == PARAMS['STREAM']:
@@ -717,6 +727,9 @@ class HDACodecProc(HDACodec, HDABaseProc):
         return self.proc_amp_caps_in
       elif param == PARAMS['GPIO_CAP']:
         return self.proc_gpio_cap
+    elif nid == self.proc_mfg:
+      if param == PARAMS['FUNCTION_TYPE']:
+        return self.proc_mfg_function_id
     else:
       if nid is None:
         return 0
@@ -726,7 +739,9 @@ class HDACodecProc(HDACodec, HDABaseProc):
 
   def get_sub_nodes(self, nid):
     if nid == AC_NODE_ROOT:
-      return self.proc_afg, 1
+      if self.proc_mfg >= 0:
+        return 2, self.proc_afg
+      return 1, self.proc_afg
     elif nid == self.proc_afg:
       if self.proc_nids:
         return len(self.proc_nids), self.proc_nids.keys()[0]