[haiku-bugs] Re: [Haiku] #8270: [HDA] very quiet on Lenovo laptop (due to hda mixer?)

  • From: "ttcoder" <trac@xxxxxxxxxxxx>
  • Date: Mon, 27 Aug 2012 20:41:46 -0000

#8270: [HDA] very quiet on Lenovo laptop (due to hda mixer?)
---------------------------------+----------------------------
   Reporter:  ttcoder            |      Owner:  korli
       Type:  bug                |     Status:  new
   Priority:  normal             |  Milestone:  R1
  Component:  Drivers/Audio/HDA  |    Version:  R1/Development
 Resolution:                     |   Keywords:
 Blocked By:                     |   Blocking:
Has a Patch:  0                  |   Platform:  All
---------------------------------+----------------------------

Comment (by ttcoder):

 @korli -  Found it! Found why the mixer is so quiet, and a one-liner "fix"
 (so ''now'' I can more credibly call for this ticket being closed in the
 near future I guess ;-).

 The quietness of the mixer does not come from the initial hardware setup,
 it is due to the configuration done at the very end inside
 hda_multi_audio.cpp, which generates these lines in the syslog:

 {{{
 KERN: set_mix: 23 mixer: 0
 KERN: set_mix: 23 mixer unmuting 0 (1737000)
 KERN: set_mix: 23 mixer   muting 1 (1737100)
 KERN: set_mix: 23 mixer   muting 2 (1737200)
 KERN: set_mix: 23 mixer   muting 3 (1737300)
 KERN: set_mix: 23 mixer   muting 4 (1737400)
 }}}

 After some trial and error I've found out that if I insert this line in
 the middle of the set_mix() for() loop:

 '''verb[j]=0;'''

 everything is in order again: I have a normal audio volume... AND I
 believe this has fixed the Line-In bug for me also. To wit, with this
 zero-verb line added I really was able to roll back all the other changes,
 roll back the mixer bypass and the AMP_CAP_OFFSET changes ..etc, such that
 running "git diff" yields this and only this:

 {{{
 /boot/common/cache/tmp/....haiku..../haiku/src/add-
 ons/kernel/drivers/audio/hda> git diff
 diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp
 b/src/add-ons/kerne
 index 14fcd56..377ed88 100644
 --- a/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp
 +++ b/src/add-ons/kernel/drivers/audio/hda/hda_multi_audio.cpp
 @@ -801,6 +801,7 @@ set_mix(hda_audio_group* audioGroup,
 multi_mix_value_info * mmvi)
                                         | AMP_SET_LEFT_CHANNEL |
 AMP_SET_RIGHT_CHANNEL
                                         | AMP_SET_INPUT_INDEX(j)
                                         | ((mmvi->values[i].mux == j) ? 0
 : AMP_MUTE));
 +verb[j]=0;
                                 TRACE("set_mix: %ld mixer %smuting %ld
 (%lx)\n", control-
                                         (mmvi->values[i].mux == j) ? "un"
 : "", j, verb[j
                         }
 /boot/common/cache/tmp/....haiku..../haiku/src/add-
 ons/kernel/drivers/audio/hda> git status
 # On branch master
 #
 (..)
 }}}

 I've also tried to comment out the whole block but IIRC things don't work
 as well as they do when sending '0' verbs as above.

 So what is the purpose of that whole AMP_SET_INPUT,AMP_SET_LEFT_CHANNEL
 business ..etc ? And do you want me to try some other changes to track
 this down more thoroughly ? Thanks.

-- 
Ticket URL: <http://dev.haiku-os.org/ticket/8270#comment:8>
Haiku <http://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: