At Thu, 16 Feb 2012 17:38:33 +0800, joey.jiaojg wrote:
YES, you are right on the assumption. I tried again many times of SET_GPIO_DATA between 0/1, speaker/headphone switches. So is possible to merge into next ALSA release?
Not ready for "merge". As mentioned, your patch can't be applied to the latest tree.
I'll work on the better implementation of a quirk for the auto-parser later.
Takashi
On 2012年02月16日 17:35, Takashi Iwai wrote:
At Thu, 16 Feb 2012 10:04:09 +0800, Joey Jiao wrote:
- I changed to model=will to test without headphone
hda-verb /dev/snd/hwC0D0 0x0F~0x1B 0x707 0xC0 [NID=0x0F, 0x10~0x19, 0x1B] Result: for sure not work as GPIO not open 2. I changed to model=b1900 to test without headphone hda-verb /dev/snd/hwC0D0 0x0F~0x1B 0x707 0xC0 Result: speaker still works. It's for sure. 3. Then same condition as step 2 but change 0xC0 to 0x0 hda-verb /dev/snd/hwC0D0 0x0F~0x1B 0x707 0x0 Result: speaker doesn't work only when NID=0x0F; then I tried param=0x40 and 0x80, when param=0x40, speaker works while param=0x80, speaker doesn't work. 4. Then I plugged in headphone. Now the param =0x40 for NID=0x0F. Result: Headphone works while speaker muted. Then I changed param=0x80. (same result when param=0xC0) Result: Headphone still works while speaker muted. 5. Then I reboot with headphone plugged in to test your step 2. YES, now the speaker muted while headphone works. Then I do your cmds: hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_MASK 1 Result: headphone works, speaker muted hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DIR 1 Result: headphone muted, speaker works hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 1 Result: headphone works, speaker muted hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 0 Result: headphone muted, speaker works.
And, if you run again hda-verb /dev/snd/hwC0D0 0x01 SET_GPIO_DATA 1 I guess the speaker will be muted and the headphone start working again, right?
Please noted the last two cmds, it's strange but it's true.
If my guess is correct, it's not strange at all. Your machine shares the same pin for both the headphone and the speaker outputs, but switches between them just by GPIO-out bit 0. It's _not_ the master amp.
In addition, the HP-amp bit (0x80) of 0x0f seems controlling the speaker amp.
Takashi
Any additional tests?
在 2012年2月15日 下午11:04,Takashi Iwaitiwai@suse.de 写道:
At Wed, 15 Feb 2012 22:45:27 +0800, joey.jiaojg wrote:
I think the only question below is about the automute, right?
Not really. The most important thing is to understand what's doing what. Since your code can't be applied any longer at all to the latest code tree because of the fundamental code rewrite, we need to do it right.
So, please check the following:
Does any pin correspond to the speaker output? Try to change the pin control of each pin between 0x10 and 0x19 via hda-verb while the speaker output is active. Does any pin change the speaker output?
Plug your headphone. Now the speaker is muted with your patch. What happens when you run like below?
hda-verb /dev/snd/hwD0D0 0x01 SET_GPIO_MASK 1 hda-verb /dev/snd/hwD0D0 0x01 SET_GPIO_DIR 1 hda-verb /dev/snd/hwD0D0 0x01 SET_GPIO_DATA 1
Does the speaker starts playing again? Then, what happens now with:
hda-verb /dev/snd/hwD0D0 0x01 SET_GPIO_DATA 0
??
Takashi
-- -Joey Jiao