diff mbox

[0/4] More aggressive PM for HD-audio

Message ID s5hfv8rdfx3.wl-tiwai@suse.de (mailing list archive)
State New, archived
Headers show

Commit Message

Takashi Iwai March 26, 2015, 1:52 p.m. UTC
At Thu, 26 Mar 2015 14:10:17 +0100,
Takashi Iwai wrote:
> 
> At Thu, 26 Mar 2015 20:24:43 +0800,
> Hui Wang wrote:
> > 
> > On 03/21/2015 02:38 PM, Hui Wang wrote:
> > > On 03/21/2015 12:20 AM, David Henningsson wrote:
> > >>
> > >> On 2015-03-18 09:50, Takashi Iwai wrote:
> > >>> Hi,
> > >>>
> > >>> here is a patchset for supporting more aggressive PM for HD-audio.
> > >>> This allows to change the power state of each widget more dynamically
> > >>> with jack and stream states.  It's activated only when the codec
> > >>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
> > >>>
> > >>> In theory, this should work for the recent Realtek codecs, but
> > >>> currently I have no machine for test.
> > >>>
> > >>> David, could you or your team check whether this works for ALC282 or
> > >>> such?  Just add like:
> > >>>
> > >>> --- a/sound/pci/hda/patch_realtek.c
> > >>> +++ b/sound/pci/hda/patch_realtek.c
> > >>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec *codec)
> > >>>
> > >>>       spec = codec->spec;
> > >>>       spec->gen.shared_mic_vref_pin = 0x18;
> > >>> +    codec->power_mgmt = 1;
> > >>>
> > >>>       snd_hda_pick_fixup(codec, alc269_fixup_models,
> > >>>                  alc269_fixup_tbl, alc269_fixups);
> > >>>
> > >>>
> > >>> The patchset is for for-next branch of sound git tree, but they might
> > >>> be applicable to 4.0-rc (or even older), too.  The current patches are
> > >>> found in topic/hda-power branch.
> > >>
> > >> So I hoped to be able to look at this today, but it turns out the 
> > >> machine I was thinking of using for testing has an ALC262 codec, 
> > >> which hardly counts as "new".
> > >>
> > >> Hui, is this something you feel like taking on? Otherwise I'll try to 
> > >> talk to someone in Taipei.
> > >>
> > > OK? I will look for the machine to do the test next week.
> > >
> > > Regards,
> > > Hui.
> > >
> > Sorry for late response, today is my first day in the office back from 
> > vacation, I checked all machines in the Beijing office, none of them has 
> > the ALC282 codec, I will continue to look for the machine from other office.
> > 
> > And I did the test on the machines with the alc283, alc255, alc292 and 
> > alc269, the testing result were same, there were no sound output from 
> > internal speaker or headphone, and the internal mic or external mic 
> > can't record any sound. The test steps as below:
> > 
> > 1. power_save_node = 0
> > checkout the hda-power branch, build the kernel based on this branch.
> > Install the kernel to the above machines and boot into the desktop
> > test internal speaker and internal mic, works very well, plug a headset, 
> > test headphone and external mic, works very well.
> > run pm_suspend, wait 5 seconds, wakeup the system, redo the above test, 
> > everything works very well.
> 
> OK, this is expected.  The patch shouldn't touch this case.
> 
> > 2. power_save_node = 1
> > enable the power_save_node as below:
> > @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec *codec)
> > 
> >          alc_auto_parse_customize_define(codec);
> > 
> > +       codec->power_save_node = 1;
> > +
> >          if (has_cdefine_beep(codec))
> >                  spec->gen.beep_nid = 0x01;
> > rebuild the kernel, install the kernel to the above machines and boot 
> > into the desktop
> > test internal speaker and internal mic, we can play sound to internal 
> > speaker without any errors, but I can't hear any sound from the speaker; 
> > I can use the internal mic to record without errors, but recorded file 
> > did not include any sound pcm (maybe all 0x00 or 0xff)
> > I plug a headset into the headset jack, the detection works very well, 
> > but I can't hear sound from headphone when play a sound, and I can't use 
> > headset mic to record any sound as well.
> > 
> > 
> > And I attached 2 alsa-info.txt, one is the power_save_node=0, the other 
> > is the power_save_node=1
> 
> Thanks.  The alsa-info.sh outputs show no difference but the power
> state, so the widget attributes seem kept with the power state change,
> as it seems.
> 
> Could you give alsa-info.sh output *during* playing with
> power_save_node=1?

Also, try to pull topic/hda-regmap branch in addition, and apply the
patch below.  This implements the partial sync for the widget path.
Note that the patch is totally untested.


thanks,

Takashi

Comments

Hui Wang March 27, 2015, 12:11 a.m. UTC | #1
On 03/26/2015 09:52 PM, Takashi Iwai wrote:
> At Thu, 26 Mar 2015 14:10:17 +0100,
> Takashi Iwai wrote:
>> At Thu, 26 Mar 2015 20:24:43 +0800,
>> Hui Wang wrote:
>>> On 03/21/2015 02:38 PM, Hui Wang wrote:
>>>> On 03/21/2015 12:20 AM, David Henningsson wrote:
>>>>> On 2015-03-18 09:50, Takashi Iwai wrote:
>>>>>> Hi,
>>>>>>
>>>>>> here is a patchset for supporting more aggressive PM for HD-audio.
>>>>>> This allows to change the power state of each widget more dynamically
>>>>>> with jack and stream states.  It's activated only when the codec
>>>>>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
>>>>>>
>>>>>> In theory, this should work for the recent Realtek codecs, but
>>>>>> currently I have no machine for test.
>>>>>>
>>>>>> David, could you or your team check whether this works for ALC282 or
>>>>>> such?  Just add like:
>>>>>>
>>>>>> --- a/sound/pci/hda/patch_realtek.c
>>>>>> +++ b/sound/pci/hda/patch_realtek.c
>>>>>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec *codec)
>>>>>>
>>>>>>        spec = codec->spec;
>>>>>>        spec->gen.shared_mic_vref_pin = 0x18;
>>>>>> +    codec->power_mgmt = 1;
>>>>>>
>>>>>>        snd_hda_pick_fixup(codec, alc269_fixup_models,
>>>>>>                   alc269_fixup_tbl, alc269_fixups);
>>>>>>
>>>>>>
>>>>>> The patchset is for for-next branch of sound git tree, but they might
>>>>>> be applicable to 4.0-rc (or even older), too.  The current patches are
>>>>>> found in topic/hda-power branch.
>>>>> So I hoped to be able to look at this today, but it turns out the
>>>>> machine I was thinking of using for testing has an ALC262 codec,
>>>>> which hardly counts as "new".
>>>>>
>>>>> Hui, is this something you feel like taking on? Otherwise I'll try to
>>>>> talk to someone in Taipei.
>>>>>
>>>> OK? I will look for the machine to do the test next week.
>>>>
>>>> Regards,
>>>> Hui.
>>>>
>>> Sorry for late response, today is my first day in the office back from
>>> vacation, I checked all machines in the Beijing office, none of them has
>>> the ALC282 codec, I will continue to look for the machine from other office.
>>>
>>> And I did the test on the machines with the alc283, alc255, alc292 and
>>> alc269, the testing result were same, there were no sound output from
>>> internal speaker or headphone, and the internal mic or external mic
>>> can't record any sound. The test steps as below:
>>>
>>> 1. power_save_node = 0
>>> checkout the hda-power branch, build the kernel based on this branch.
>>> Install the kernel to the above machines and boot into the desktop
>>> test internal speaker and internal mic, works very well, plug a headset,
>>> test headphone and external mic, works very well.
>>> run pm_suspend, wait 5 seconds, wakeup the system, redo the above test,
>>> everything works very well.
>> OK, this is expected.  The patch shouldn't touch this case.
>>
>>> 2. power_save_node = 1
>>> enable the power_save_node as below:
>>> @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec *codec)
>>>
>>>           alc_auto_parse_customize_define(codec);
>>>
>>> +       codec->power_save_node = 1;
>>> +
>>>           if (has_cdefine_beep(codec))
>>>                   spec->gen.beep_nid = 0x01;
>>> rebuild the kernel, install the kernel to the above machines and boot
>>> into the desktop
>>> test internal speaker and internal mic, we can play sound to internal
>>> speaker without any errors, but I can't hear any sound from the speaker;
>>> I can use the internal mic to record without errors, but recorded file
>>> did not include any sound pcm (maybe all 0x00 or 0xff)
>>> I plug a headset into the headset jack, the detection works very well,
>>> but I can't hear sound from headphone when play a sound, and I can't use
>>> headset mic to record any sound as well.
>>>
>>>
>>> And I attached 2 alsa-info.txt, one is the power_save_node=0, the other
>>> is the power_save_node=1
>> Thanks.  The alsa-info.sh outputs show no difference but the power
>> state, so the widget attributes seem kept with the power state change,
>> as it seems.
>>
>> Could you give alsa-info.sh output *during* playing with
>> power_save_node=1?
> Also, try to pull topic/hda-regmap branch in addition, and apply the
> patch below.  This implements the partial sync for the widget path.
> Note that the patch is totally untested.
Got it, I will do the test next Monday, since I can't access those 
machines until next Monday.

Regards,
Hui.
>
> thanks,
>
> Takashi
>
> diff --git a/include/sound/hda_regmap.h b/include/sound/hda_regmap.h
> index 76648ccfbbf8..727a5801e298 100644
> --- a/include/sound/hda_regmap.h
> +++ b/include/sound/hda_regmap.h
> @@ -202,4 +202,16 @@ snd_hdac_regmap_update_amp_stereo(struct hdac_device *codec, hda_nid_t nid,
>   	return snd_hdac_regmap_update_raw(codec, cmd, mask, val);
>   }
>   
> +/**
> + * snd_hdac_regmap_sync_node - sync the widget node attributes
> + * @codec: HD-audio codec
> + * @nid: NID to sync
> + */
> +static inline void
> +snd_hdac_regmap_sync_node(struct hdac_device *codec, hda_nid_t nid)
> +{
> +	regcache_mark_dirty(codec->regmap);
> +	regcache_sync_region(codec->regmap, nid << 20, ((nid + 1) << 20) -1);
> +}
> +
>   #endif /* __SOUND_HDA_REGMAP_H */
> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
> index f7ccef5559de..1f2ca7be1468 100644
> --- a/sound/pci/hda/hda_generic.c
> +++ b/sound/pci/hda/hda_generic.c
> @@ -842,10 +842,8 @@ static hda_nid_t path_power_update(struct hda_codec *codec,
>   			snd_hda_codec_write(codec, nid, 0,
>   					    AC_VERB_SET_POWER_STATE, state);
>   			changed = nid;
> -			/* here we assume that widget attributes (e.g. amp,
> -			 * pinctl connection) don't change with local power
> -			 * state change.  If not, need to sync the cache.
> -			 */
> +			if (state == AC_PWRST_D0)
> +				snd_hdac_regmap_sync_node(&codec->core, nid);
>   		}
>   	}
>   	return changed;
>
Hui Wang March 30, 2015, 6:53 a.m. UTC | #2
On 2015?03?27? 08:11, Hui Wang wrote:
> On 03/26/2015 09:52 PM, Takashi Iwai wrote:
>> At Thu, 26 Mar 2015 14:10:17 +0100,
>> Takashi Iwai wrote:
>>> At Thu, 26 Mar 2015 20:24:43 +0800,
>>> Hui Wang wrote:
>>>> On 03/21/2015 02:38 PM, Hui Wang wrote:
>>>>> On 03/21/2015 12:20 AM, David Henningsson wrote:
>>>>>> On 2015-03-18 09:50, Takashi Iwai wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> here is a patchset for supporting more aggressive PM for HD-audio.
>>>>>>> This allows to change the power state of each widget more 
>>>>>>> dynamically
>>>>>>> with jack and stream states.  It's activated only when the codec
>>>>>>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
>>>>>>>
>>>>>>> In theory, this should work for the recent Realtek codecs, but
>>>>>>> currently I have no machine for test.
>>>>>>>
>>>>>>> David, could you or your team check whether this works for 
>>>>>>> ALC282 or
>>>>>>> such?  Just add like:
>>>>>>>
>>>>>>> --- a/sound/pci/hda/patch_realtek.c
>>>>>>> +++ b/sound/pci/hda/patch_realtek.c
>>>>>>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec 
>>>>>>> *codec)
>>>>>>>
>>>>>>>        spec = codec->spec;
>>>>>>>        spec->gen.shared_mic_vref_pin = 0x18;
>>>>>>> +    codec->power_mgmt = 1;
>>>>>>>
>>>>>>>        snd_hda_pick_fixup(codec, alc269_fixup_models,
>>>>>>>                   alc269_fixup_tbl, alc269_fixups);
>>>>>>>
>>>>>>>
>>>>>>> The patchset is for for-next branch of sound git tree, but they 
>>>>>>> might
>>>>>>> be applicable to 4.0-rc (or even older), too.  The current 
>>>>>>> patches are
>>>>>>> found in topic/hda-power branch.
>>>>>> So I hoped to be able to look at this today, but it turns out the
>>>>>> machine I was thinking of using for testing has an ALC262 codec,
>>>>>> which hardly counts as "new".
>>>>>>
>>>>>> Hui, is this something you feel like taking on? Otherwise I'll 
>>>>>> try to
>>>>>> talk to someone in Taipei.
>>>>>>
>>>>> OK? I will look for the machine to do the test next week.
>>>>>
>>>>> Regards,
>>>>> Hui.
>>>>>
>>>> Sorry for late response, today is my first day in the office back from
>>>> vacation, I checked all machines in the Beijing office, none of 
>>>> them has
>>>> the ALC282 codec, I will continue to look for the machine from 
>>>> other office.
>>>>
>>>> And I did the test on the machines with the alc283, alc255, alc292 and
>>>> alc269, the testing result were same, there were no sound output from
>>>> internal speaker or headphone, and the internal mic or external mic
>>>> can't record any sound. The test steps as below:
>>>>
>>>> 1. power_save_node = 0
>>>> checkout the hda-power branch, build the kernel based on this branch.
>>>> Install the kernel to the above machines and boot into the desktop
>>>> test internal speaker and internal mic, works very well, plug a 
>>>> headset,
>>>> test headphone and external mic, works very well.
>>>> run pm_suspend, wait 5 seconds, wakeup the system, redo the above 
>>>> test,
>>>> everything works very well.
>>> OK, this is expected.  The patch shouldn't touch this case.
>>>
>>>> 2. power_save_node = 1
>>>> enable the power_save_node as below:
>>>> @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec *codec)
>>>>
>>>>           alc_auto_parse_customize_define(codec);
>>>>
>>>> +       codec->power_save_node = 1;
>>>> +
>>>>           if (has_cdefine_beep(codec))
>>>>                   spec->gen.beep_nid = 0x01;
>>>> rebuild the kernel, install the kernel to the above machines and boot
>>>> into the desktop
>>>> test internal speaker and internal mic, we can play sound to internal
>>>> speaker without any errors, but I can't hear any sound from the 
>>>> speaker;
>>>> I can use the internal mic to record without errors, but recorded file
>>>> did not include any sound pcm (maybe all 0x00 or 0xff)
>>>> I plug a headset into the headset jack, the detection works very well,
>>>> but I can't hear sound from headphone when play a sound, and I 
>>>> can't use
>>>> headset mic to record any sound as well.
>>>>
>>>>
>>>> And I attached 2 alsa-info.txt, one is the power_save_node=0, the 
>>>> other
>>>> is the power_save_node=1
>>> Thanks.  The alsa-info.sh outputs show no difference but the power
>>> state, so the widget attributes seem kept with the power state change,
>>> as it seems.
>>>
>>> Could you give alsa-info.sh output *during* playing with
>>> power_save_node=1?
>> Also, try to pull topic/hda-regmap branch in addition, and apply the
>> patch below.  This implements the partial sync for the widget path.
>> Note that the patch is totally untested.
> Got it, I will do the test next Monday, since I can't access those 
> machines until next Monday.
>
> Regards,
> Hui.

The attached alsa-info.txt was generated when the aplay was playing a 
song, it seems the widget power state did not change even the output 
device was working.


And I also checkout the hda-regmap branch and applied the patch below, 
rebuilt the kernel and used the kernel to do the test of playing and 
recording, both internal devices and external devices worked very well, 
I didn't see any obvious problems when using hda-regmap branch doing the 
test.

Regards,
Hui.

>>
>> thanks,
>>
>> Takashi
>>
>> diff --git a/include/sound/hda_regmap.h b/include/sound/hda_regmap.h
>> index 76648ccfbbf8..727a5801e298 100644
>> --- a/include/sound/hda_regmap.h
>> +++ b/include/sound/hda_regmap.h
>> @@ -202,4 +202,16 @@ snd_hdac_regmap_update_amp_stereo(struct 
>> hdac_device *codec, hda_nid_t nid,
>>       return snd_hdac_regmap_update_raw(codec, cmd, mask, val);
>>   }
>>   +/**
>> + * snd_hdac_regmap_sync_node - sync the widget node attributes
>> + * @codec: HD-audio codec
>> + * @nid: NID to sync
>> + */
>> +static inline void
>> +snd_hdac_regmap_sync_node(struct hdac_device *codec, hda_nid_t nid)
>> +{
>> +    regcache_mark_dirty(codec->regmap);
>> +    regcache_sync_region(codec->regmap, nid << 20, ((nid + 1) << 20) 
>> -1);
>> +}
>> +
>>   #endif /* __SOUND_HDA_REGMAP_H */
>> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
>> index f7ccef5559de..1f2ca7be1468 100644
>> --- a/sound/pci/hda/hda_generic.c
>> +++ b/sound/pci/hda/hda_generic.c
>> @@ -842,10 +842,8 @@ static hda_nid_t path_power_update(struct 
>> hda_codec *codec,
>>               snd_hda_codec_write(codec, nid, 0,
>>                           AC_VERB_SET_POWER_STATE, state);
>>               changed = nid;
>> -            /* here we assume that widget attributes (e.g. amp,
>> -             * pinctl connection) don't change with local power
>> -             * state change.  If not, need to sync the cache.
>> -             */
>> +            if (state == AC_PWRST_D0)
>> +                snd_hdac_regmap_sync_node(&codec->core, nid);
>>           }
>>       }
>>       return changed;
>>
>
upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.4.64
!!################################

!!Script ran on: Mon Mar 30 04:19:13 UTC 2015


!!Linux Distribution
!!------------------

Ubuntu Vivid Vervet (development branch) \n \l DISTRIB_ID=Ubuntu DISTRIB_DESCRIPTION="Ubuntu Vivid Vervet (development branch)" NAME="Ubuntu" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu Vivid Vervet (development branch)" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"


!!DMI Information
!!---------------

Manufacturer:      Dell Inc.
Product Name:      Inspiron 7447
Product Version:   Not Specified
Firmware Version:  X18


!!Kernel Information
!!------------------

Kernel release:    4.0.0-rc4+
Operating System:  GNU/Linux
Architecture:      x86_64
Processor:         x86_64
SMP Enabled:       Yes


!!ALSA Version
!!------------

Driver version:     k4.0.0-rc4+
Library version:    1.0.28
Utilities version:  1.0.28


!!Loaded ALSA modules
!!-------------------



!!Sound Servers on this system
!!----------------------------

Pulseaudio:
      Installed - Yes (/usr/bin/pulseaudio)
      Running - Yes


!!Soundcards recognised by ALSA
!!-----------------------------

 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xf7a1c000 irq 32
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf7a18000 irq 31


!!PCI Soundcards installed in the system
!!--------------------------------------

00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 05)


!!Advanced information - PCI Vendor/Device/Subsystem ID's
!!-------------------------------------------------------

00:03.0 0403: 8086:0c0c (rev 06)
	Subsystem: 1028:0680
--
00:1b.0 0403: 8086:8c20 (rev 05)
	Subsystem: 1028:0680


!!Modprobe options (Sound related)
!!--------------------------------

snd_atiixp_modem: index=-2
snd_intel8x0m: index=-2
snd_via82xx_modem: index=-2
snd_usb_audio: index=-2
snd_usb_caiaq: index=-2
snd_usb_ua101: index=-2
snd_usb_us122l: index=-2
snd_usb_usx2y: index=-2
snd_cmipci: mpu_port=0x330 fm_port=0x388
snd_pcsp: index=-2
snd_usb_audio: index=-2


!!Loaded sound module options
!!---------------------------


!!HDA-Intel Codec information
!!---------------------------
--startcollapse--

Codec: Intel Haswell HDMI
Address: 0
AFG Function Id: 0x1 (unsol 0)
Vendor Id: 0x80862807
Subsystem Id: 0x80860101
Revision Id: 0x100000
No Modem Function Group found
Default PCM:
    rates [0x0]:
    bits [0x0]:
    formats [0x0]:
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
  Power states:  D0 D3 CLKSTOP EPSS
  Power: setting=D0, actual=D0, Clock-stop-OK
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x02 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Converter: stream=1, channel=0
  Digital: Enabled KAE
  Digital category: 0x0
  IEC Coding Type: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Converter: stream=0, channel=0
  Digital: Enabled KAE
  Digital category: 0x0
  IEC Coding Type: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x04 [Audio Output] wcaps 0x6611: 8-Channels Digital
  Converter: stream=0, channel=0
  Digital: Enabled KAE
  Digital category: 0x0
  IEC Coding Type: 0x0
  PCM:
    rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
    bits [0x1e]: 16 20 24 32
    formats [0x5]: PCM AC3
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x05 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Control: name="HDMI/DP,pcm=3 Jack", index=0, device=0
  Control: name="IEC958 Playback Con Mask", index=0, device=0
  Control: name="IEC958 Playback Pro Mask", index=0, device=0
  Control: name="IEC958 Playback Default", index=0, device=0
  Control: name="IEC958 Playback Switch", index=0, device=0
  Control: name="ELD", index=0, device=3
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x0b000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
  Pin-ctls: 0x00:
  Unsolicited: tag=01, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Devices: 0
  Connection: 0
  In-driver Connection: 3
     0x02 0x03 0x04
Node 0x06 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Control: name="HDMI/DP,pcm=7 Jack", index=0, device=0
  Control: name="IEC958 Playback Con Mask", index=1, device=0
  Control: name="IEC958 Playback Pro Mask", index=1, device=0
  Control: name="IEC958 Playback Default", index=1, device=0
  Control: name="IEC958 Playback Switch", index=1, device=0
  Control: name="ELD", index=0, device=7
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x0b000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560020: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x2, Sequence = 0x0
  Pin-ctls: 0x00:
  Unsolicited: tag=02, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Devices: 0
  Connection: 0
  In-driver Connection: 3
     0x02 0x03 0x04
Node 0x07 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
  Control: name="HDMI/DP,pcm=8 Jack", index=0, device=0
  Control: name="IEC958 Playback Con Mask", index=2, device=0
  Control: name="IEC958 Playback Pro Mask", index=2, device=0
  Control: name="IEC958 Playback Default", index=2, device=0
  Control: name="IEC958 Playback Switch", index=2, device=0
  Control: name="ELD", index=0, device=8
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x0b000094: OUT Detect HBR HDMI DP
  Pin Default 0x18560030: [Jack] Digital Out at Int HDMI
    Conn = Digital, Color = Unknown
    DefAssociation = 0x3, Sequence = 0x0
  Pin-ctls: 0x00:
  Unsolicited: tag=03, enabled=1
  Power states:  D0 D3 EPSS
  Power: setting=D0, actual=D0
  Devices: 0
  Connection: 0
  In-driver Connection: 3
     0x02 0x03 0x04
Node 0x08 [Vendor Defined Widget] wcaps 0xf00000: Mono
Codec: Realtek ALC3234
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0255
Subsystem Id: 0x10280680
Revision Id: 0x100002
No Modem Function Group found
Default PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
  Power states:  D0 D1 D2 D3 D3cold CLKSTOP EPSS
  Power: setting=D0, actual=D0
GPIO: io=3, o=0, i=0, unsolicited=1, wake=0
  IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
  Control: name="Front Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Device: name="ALC3234 Analog", type="Audio", device=0
  Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
  Amp-Out vals:  [0x46 0x46]
  Converter: stream=8, channel=0
  PCM:
    rates [0x60]: 44100 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
  Control: name="Bass Speaker Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
  Amp-Out vals:  [0x46 0x46]
  Converter: stream=8, channel=2
  PCM:
    rates [0x60]: 44100 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x04 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x05 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x06 [Audio Output] wcaps 0x611: Stereo Digital
  Converter: stream=0, channel=0
  Digital:
  Digital category: 0x0
  IEC Coding Type: 0x0
  PCM:
    rates [0x5e0]: 44100 48000 88200 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x07 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Control: name="Capture Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Capture Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Device: name="ALC3234 Analog", type="Audio", device=0
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x26 0x26]
  Converter: stream=4, channel=0
  SDI-Select: 0
  PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 1
     0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x97 0x97]
  Converter: stream=0, channel=0
  SDI-Select: 0
  PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 1
     0x22
Node 0x0a [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Control: name="Headset Mic Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=1, ofs=0
  Control: name="Headset Mic Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=1, ofs=0
  Control: name="Headphone Mic Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=2, ofs=0
  Control: name="Headphone Mic Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=2, ofs=0
  Control: name="Beep Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=4, ofs=0
  Control: name="Beep Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=4, ofs=0
  Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
  Amp-In vals:  [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
  Connection: 5
     0x18 0x19 0x1a 0x1b 0x1d
Node 0x0c [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x00 0x00] [0x00 0x00]
  Connection: 2
     0x02 0x0b
Node 0x0d [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x00 0x00] [0x00 0x00]
  Connection: 2
     0x03 0x0b
Node 0x0e [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0f [Audio Mixer] wcaps 0x20010a: Mono Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x00 0x00]
  Connection: 1
     0x0d
Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
  Control: name="Internal Mic Boost Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Internal Mic Phantom Jack", index=0, device=0
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00000020: IN
  Pin Default 0x90a60160: [Fixed] Mic at Int N/A
    Conn = Digital, Color = Unknown
    DefAssociation = 0x6, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x20: IN
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x13 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Control: name="Speaker Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Control: name="Speaker Front Phantom Jack", index=0, device=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x00010014: OUT EAPD Detect
  EAPD 0x2: EAPD
  Pin Default 0x90170120: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x2, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 1
     0x0c
Node 0x15 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x16 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x17 [Pin Complex] wcaps 0x40050c: Mono Amp-Out
  Control: name="Bass Speaker Playback Switch", index=0, device=0
    ControlAmp: chs=1, dir=Out, idx=0, ofs=0
  Control: name="Speaker Surround Phantom Jack", index=0, device=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00]
  Pincap 0x00000010: OUT
  Pin Default 0x90170140: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x4, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 1
     0x0f
Node 0x18 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x40000000: [N/A] Line Out at Ext N/A
    Conn = Unknown, Color = Unknown
    DefAssociation = 0x0, Sequence = 0x0
  Pin-ctls: 0x20: IN VREF_HIZ
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Control: name="Headset Mic Boost Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Headset Mic Phantom Jack", index=0, device=0
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x24: IN VREF_80
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Control: name="Headphone Mic Boost Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x20: IN VREF_HIZ
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x0001373c: IN OUT HP EAPD Detect
    Vref caps: HIZ 50 GRD 80 100
  EAPD 0x2: EAPD
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x20: IN VREF_HIZ
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 2
     0x0c* 0x0d
Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
  Pincap 0x00000020: IN
  Pin Default 0x41163b05: [N/A] Speaker at Ext Rear
    Conn = Digital, Color = Blue
    DefAssociation = 0x0, Sequence = 0x5
    Misc = NO_PRESENCE
  Pin-ctls: 0x20: IN
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
Node 0x1e [Pin Complex] wcaps 0x400781: Stereo Digital
  Pincap 0x00000014: OUT Detect
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 1
     0x06
Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
  Processing caps: benign=0, ncoeff=76
Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Control: name="Headphone Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Control: name="Headphone Mic Jack", index=0, device=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x0001001c: OUT HP EAPD Detect
  EAPD 0x2: EAPD
  Pin Default 0x0321102f: [Jack] HP Out at Ext Left
    Conn = 1/8, Color = Black
    DefAssociation = 0x2, Sequence = 0xf
  Pin-ctls: 0xc0: OUT HP
  Unsolicited: tag=01, enabled=1
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D3, actual=D3
  Connection: 2
     0x0c* 0x0d
Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
  Connection: 6
     0x18 0x19 0x1a 0x1b 0x1d 0x0b
Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x00 0x00]
  Connection: 7
     0x18 0x19 0x1a 0x1b 0x1d 0x0b 0x12
--endcollapse--


!!ALSA Device nodes
!!-----------------

crw-rw----+ 1 root audio 116,  2 Mar 30 12:17 /dev/snd/controlC0
crw-rw----+ 1 root audio 116,  7 Mar 30 12:17 /dev/snd/controlC1
crw-rw----+ 1 root audio 116,  6 Mar 30 12:17 /dev/snd/hwC0D0
crw-rw----+ 1 root audio 116, 10 Mar 30 12:17 /dev/snd/hwC1D0
crw-rw----+ 1 root audio 116,  3 Mar 30 12:17 /dev/snd/pcmC0D3p
crw-rw----+ 1 root audio 116,  4 Mar 30 12:17 /dev/snd/pcmC0D7p
crw-rw----+ 1 root audio 116,  5 Mar 30 12:17 /dev/snd/pcmC0D8p
crw-rw----+ 1 root audio 116,  9 Mar 30 12:17 /dev/snd/pcmC1D0c
crw-rw----+ 1 root audio 116,  8 Mar 30 12:19 /dev/snd/pcmC1D0p
crw-rw----+ 1 root audio 116, 33 Mar 30 12:17 /dev/snd/timer

/dev/snd/by-path:
total 0
drwxr-xr-x 2 root root  80 Mar 30 12:17 .
drwxr-xr-x 3 root root 260 Mar 30 12:17 ..
lrwxrwxrwx 1 root root  12 Mar 30 12:17 pci-0000:00:03.0 -> ../controlC0
lrwxrwxrwx 1 root root  12 Mar 30 12:17 pci-0000:00:1b.0 -> ../controlC1


!!Aplay/Arecord output
!!--------------------

APLAY

**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: ALC3234 Analog [ALC3234 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

ARECORD

**** List of CAPTURE Hardware Devices ****
card 1: PCH [HDA Intel PCH], device 0: ALC3234 Analog [ALC3234 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

!!Amixer output
!!-------------

!!-------Mixer controls for card 0 [HDMI]

Card hw:0 'HDMI'/'HDA Intel HDMI at 0xf7a1c000 irq 32'
  Mixer name	: 'Intel Haswell HDMI'
  Components	: 'HDA:80862807,80860101,00100000'
  Controls      : 21
  Simple ctrls  : 3
Simple mixer control 'IEC958',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958',1
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958',2
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]

!!-------Mixer controls for card 1 [PCH]

Card hw:1 'PCH'/'HDA Intel PCH at 0xf7a18000 irq 31'
  Mixer name	: 'Realtek ALC3234'
  Components	: 'HDA:10ec0255,10280680,00100002'
  Controls      : 28
  Simple ctrls  : 15
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 70 [80%] [-12.75dB] [on]
Simple mixer control 'Headphone',0
  Capabilities: pswitch
  Playback channels: Front Left - Front Right
  Mono:
  Front Left: Playback [off]
  Front Right: Playback [off]
Simple mixer control 'Headphone Mic',0
  Capabilities: pvolume pswitch cswitch cswitch-joined cswitch-exclusive
  Capture exclusive group: 0
  Playback channels: Front Left - Front Right
  Capture channels: Mono
  Limits: Playback 0 - 31
  Mono: Capture [off]
  Front Left: Playback 0 [0%] [-34.50dB] [off]
  Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Headphone Mic Boost',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 3
  Front Left: 0 [0%] [0.00dB]
  Front Right: 0 [0%] [0.00dB]
Simple mixer control 'Speaker',0
  Capabilities: pswitch
  Playback channels: Front Left - Front Right
  Mono:
  Front Left: Playback [on]
  Front Right: Playback [on]
Simple mixer control 'Bass Speaker',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 87 [100%] [0.00dB] [on]
  Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'PCM',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 255
  Mono:
  Front Left: Playback 254 [100%] [-0.20dB]
  Front Right: Playback 254 [100%] [-0.20dB]
Simple mixer control 'Front',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 87 [100%] [0.00dB]
  Front Right: Playback 87 [100%] [0.00dB]
Simple mixer control 'Beep',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 0 [0%] [-34.50dB] [off]
  Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Capture',0
  Capabilities: cvolume cswitch
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 63
  Front Left: Capture 38 [60%] [11.25dB] [on]
  Front Right: Capture 38 [60%] [11.25dB] [on]
Simple mixer control 'Auto-Mute Mode',0
  Capabilities: enum
  Items: 'Disabled' 'Enabled'
  Item0: 'Disabled'
Simple mixer control 'Headset Mic',0
  Capabilities: pvolume pswitch cswitch cswitch-joined cswitch-exclusive
  Capture exclusive group: 0
  Playback channels: Front Left - Front Right
  Capture channels: Mono
  Limits: Playback 0 - 31
  Mono: Capture [off]
  Front Left: Playback 0 [0%] [-34.50dB] [off]
  Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Headset Mic Boost',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 3
  Front Left: 0 [0%] [0.00dB]
  Front Right: 0 [0%] [0.00dB]
Simple mixer control 'Internal Mic',0
  Capabilities: cswitch cswitch-joined cswitch-exclusive
  Capture exclusive group: 0
  Capture channels: Mono
  Mono: Capture [on]
Simple mixer control 'Internal Mic Boost',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 3
  Front Left: 0 [0%] [0.00dB]
  Front Right: 0 [0%] [0.00dB]


!!Alsactl output
!!--------------

--startcollapse--
state.HDMI {
	control.1 {
		iface CARD
		name 'HDMI/DP,pcm=3 Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.2 {
		iface MIXER
		name 'IEC958 Playback Con Mask'
		value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.3 {
		iface MIXER
		name 'IEC958 Playback Pro Mask'
		value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.4 {
		iface MIXER
		name 'IEC958 Playback Default'
		value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access 'read write'
			type IEC958
			count 1
		}
	}
	control.5 {
		iface MIXER
		name 'IEC958 Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.6 {
		iface PCM
		device 3
		name ELD
		value ''
		comment {
			access 'read volatile'
			type BYTES
			count 0
		}
	}
	control.7 {
		iface CARD
		name 'HDMI/DP,pcm=7 Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.8 {
		iface MIXER
		name 'IEC958 Playback Con Mask'
		index 1
		value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.9 {
		iface MIXER
		name 'IEC958 Playback Pro Mask'
		index 1
		value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.10 {
		iface MIXER
		name 'IEC958 Playback Default'
		index 1
		value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access 'read write'
			type IEC958
			count 1
		}
	}
	control.11 {
		iface MIXER
		name 'IEC958 Playback Switch'
		index 1
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.12 {
		iface PCM
		device 7
		name ELD
		value ''
		comment {
			access 'read volatile'
			type BYTES
			count 0
		}
	}
	control.13 {
		iface CARD
		name 'HDMI/DP,pcm=8 Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.14 {
		iface MIXER
		name 'IEC958 Playback Con Mask'
		index 2
		value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.15 {
		iface MIXER
		name 'IEC958 Playback Pro Mask'
		index 2
		value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.16 {
		iface MIXER
		name 'IEC958 Playback Default'
		index 2
		value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access 'read write'
			type IEC958
			count 1
		}
	}
	control.17 {
		iface MIXER
		name 'IEC958 Playback Switch'
		index 2
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.18 {
		iface PCM
		device 8
		name ELD
		value ''
		comment {
			access 'read volatile'
			type BYTES
			count 0
		}
	}
	control.19 {
		iface PCM
		device 3
		name 'Playback Channel Map'
		value.0 0
		value.1 0
		value.2 0
		value.3 0
		value.4 0
		value.5 0
		value.6 0
		value.7 0
		comment {
			access 'read write'
			type INTEGER
			count 8
			range '0 - 36'
		}
	}
	control.20 {
		iface PCM
		device 7
		name 'Playback Channel Map'
		value.0 0
		value.1 0
		value.2 0
		value.3 0
		value.4 0
		value.5 0
		value.6 0
		value.7 0
		comment {
			access 'read write'
			type INTEGER
			count 8
			range '0 - 36'
		}
	}
	control.21 {
		iface PCM
		device 8
		name 'Playback Channel Map'
		value.0 0
		value.1 0
		value.2 0
		value.3 0
		value.4 0
		value.5 0
		value.6 0
		value.7 0
		comment {
			access 'read write'
			type INTEGER
			count 8
			range '0 - 36'
		}
	}
}
state.PCH {
	control.1 {
		iface MIXER
		name 'Front Playback Volume'
		value.0 87
		value.1 87
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 87'
			dbmin -6525
			dbmax 0
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.2 {
		iface MIXER
		name 'Speaker Playback Switch'
		value.0 true
		value.1 true
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.3 {
		iface MIXER
		name 'Bass Speaker Playback Volume'
		value.0 87
		value.1 87
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 87'
			dbmin -6525
			dbmax 0
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.4 {
		iface MIXER
		name 'Bass Speaker Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.5 {
		iface MIXER
		name 'Headphone Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.6 {
		iface MIXER
		name 'Headset Mic Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 31'
			dbmin -3450
			dbmax 1200
			dbvalue.0 -3450
			dbvalue.1 -3450
		}
	}
	control.7 {
		iface MIXER
		name 'Headset Mic Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.8 {
		iface MIXER
		name 'Headphone Mic Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 31'
			dbmin -3450
			dbmax 1200
			dbvalue.0 -3450
			dbvalue.1 -3450
		}
	}
	control.9 {
		iface MIXER
		name 'Headphone Mic Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.10 {
		iface MIXER
		name 'Auto-Mute Mode'
		value Disabled
		comment {
			access 'read write'
			type ENUMERATED
			count 1
			item.0 Disabled
			item.1 Enabled
		}
	}
	control.11 {
		iface MIXER
		name 'Capture Source'
		value 'Internal Mic'
		comment {
			access 'read write'
			type ENUMERATED
			count 1
			item.0 'Headset Mic'
			item.1 'Headphone Mic'
			item.2 'Internal Mic'
		}
	}
	control.12 {
		iface MIXER
		name 'Capture Volume'
		value.0 38
		value.1 38
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 63'
			dbmin -1725
			dbmax 3000
			dbvalue.0 1125
			dbvalue.1 1125
		}
	}
	control.13 {
		iface MIXER
		name 'Capture Switch'
		value.0 true
		value.1 true
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.14 {
		iface MIXER
		name 'Headset Mic Boost Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 3'
			dbmin 0
			dbmax 3000
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.15 {
		iface MIXER
		name 'Headphone Mic Boost Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 3'
			dbmin 0
			dbmax 3000
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.16 {
		iface MIXER
		name 'Internal Mic Boost Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 3'
			dbmin 0
			dbmax 3000
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.17 {
		iface MIXER
		name 'Master Playback Volume'
		value 70
		comment {
			access 'read write'
			type INTEGER
			count 1
			range '0 - 87'
			dbmin -6525
			dbmax 0
			dbvalue.0 -1275
		}
	}
	control.18 {
		iface MIXER
		name 'Master Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.19 {
		iface CARD
		name 'Headset Mic Phantom Jack'
		value true
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.20 {
		iface CARD
		name 'Headphone Mic Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.21 {
		iface CARD
		name 'Internal Mic Phantom Jack'
		value true
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.22 {
		iface CARD
		name 'Speaker Front Phantom Jack'
		value true
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.23 {
		iface CARD
		name 'Speaker Surround Phantom Jack'
		value true
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.24 {
		iface MIXER
		name 'Beep Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 31'
			dbmin -3450
			dbmax 1200
			dbvalue.0 -3450
			dbvalue.1 -3450
		}
	}
	control.25 {
		iface MIXER
		name 'Beep Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.26 {
		iface PCM
		name 'Playback Channel Map'
		value.0 3
		value.1 4
		value.2 8
		value.3 8
		comment {
			access read
			type INTEGER
			count 4
			range '0 - 36'
		}
	}
	control.27 {
		iface PCM
		name 'Capture Channel Map'
		value.0 0
		value.1 0
		comment {
			access read
			type INTEGER
			count 2
			range '0 - 36'
		}
	}
	control.28 {
		iface MIXER
		name 'PCM Playback Volume'
		value.0 254
		value.1 254
		comment {
			access 'read write user'
			type INTEGER
			count 2
			range '0 - 255'
			tlv '0000000100000008ffffec1400000014'
			dbmin -5100
			dbmax 0
			dbvalue.0 -20
			dbvalue.1 -20
		}
	}
}
--endcollapse--


!!All Loaded Modules
!!------------------

Module


!!Sysfs Files
!!-----------

/sys/class/sound/hwC0D0/init_pin_configs:
0x05 0x18560010
0x06 0x18560020
0x07 0x18560030

/sys/class/sound/hwC0D0/driver_pin_configs:

/sys/class/sound/hwC0D0/user_pin_configs:

/sys/class/sound/hwC0D0/init_verbs:

/sys/class/sound/hwC0D0/hints:

/sys/class/sound/hwC1D0/init_pin_configs:
0x12 0x90a60160
0x14 0x90170120
0x17 0x90170140
0x18 0x40000000
0x19 0x411111f0
0x1a 0x411111f0
0x1b 0x411111f0
0x1d 0x41163b05
0x1e 0x411111f0
0x21 0x0321102f

/sys/class/sound/hwC1D0/driver_pin_configs:
0x19 0x01a1913c
0x1a 0x01a1913d

/sys/class/sound/hwC1D0/user_pin_configs:

/sys/class/sound/hwC1D0/init_verbs:

/sys/class/sound/hwC1D0/hints:


!!ALSA/HDA dmesg
!!--------------

[    0.892364] usbhid: USB HID core driver
[    0.892529] snd_hda_intel 0000:00:03.0: enabling device (0000 -> 0002)
[    0.892605] snd_hda_intel 0000:00:03.0: bound 0000:00:02.0 (ops i915_audio_component_bind_ops)
[    0.892618] snd_hda_intel 0000:00:1b.0: enabling device (0000 -> 0002)
[    0.892818] TCP: cubic registered
--
[    0.898597] PM: Hibernation image not present or could not be loaded.
[    0.898604] ALSA device list:
[    0.898605]   No soundcards found.
[    0.903878] input: HDA Intel HDMI HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.0/sound/card0/input9
[    0.903942] input: HDA Intel HDMI HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.0/sound/card0/input10
[    0.904002] input: HDA Intel HDMI HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.0/sound/card0/input11
[    0.906403] [drm] GMBUS [i915 gmbus vga] timed out, falling back to bit banging on pin 2
[    0.923152] fbcon: inteldrmfb (fb0) is primary device
[    0.938905] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC3234: line_outs=2 (0x14/0x17/0x0/0x0/0x0) type:speaker
[    0.938907] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    0.938908] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    0.938908] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
[    0.938909] snd_hda_codec_realtek hdaudioC1D0:    inputs:
[    0.938910] snd_hda_codec_realtek hdaudioC1D0:      Headset Mic=0x19
[    0.938911] snd_hda_codec_realtek hdaudioC1D0:      Headphone Mic=0x1a
[    0.938912] snd_hda_codec_realtek hdaudioC1D0:      Internal Mic=0x12
[    0.943084] snd_hda_codec_realtek hdaudioC1D0: Failed to find dell wmi symbol dell_app_wmi_led_set
[    0.949620] input: HDA Intel PCH Headphone Mic as /devices/pci0000:00/0000:00:1b.0/sound/card1/input12
[    1.162780] usb 1-5: new high-speed USB device number 2 using xhci_hcd
Takashi Iwai April 4, 2015, 10:31 a.m. UTC | #3
Hi,

sorry for the late reply, now I'm back from vacation.

At Mon, 30 Mar 2015 14:53:37 +0800,
hwang4 wrote:
> 
> 
> 
> On 2015?03?27? 08:11, Hui Wang wrote:
> > On 03/26/2015 09:52 PM, Takashi Iwai wrote:
> >> At Thu, 26 Mar 2015 14:10:17 +0100,
> >> Takashi Iwai wrote:
> >>> At Thu, 26 Mar 2015 20:24:43 +0800,
> >>> Hui Wang wrote:
> >>>> On 03/21/2015 02:38 PM, Hui Wang wrote:
> >>>>> On 03/21/2015 12:20 AM, David Henningsson wrote:
> >>>>>> On 2015-03-18 09:50, Takashi Iwai wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> here is a patchset for supporting more aggressive PM for HD-audio.
> >>>>>>> This allows to change the power state of each widget more 
> >>>>>>> dynamically
> >>>>>>> with jack and stream states.  It's activated only when the codec
> >>>>>>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
> >>>>>>>
> >>>>>>> In theory, this should work for the recent Realtek codecs, but
> >>>>>>> currently I have no machine for test.
> >>>>>>>
> >>>>>>> David, could you or your team check whether this works for 
> >>>>>>> ALC282 or
> >>>>>>> such?  Just add like:
> >>>>>>>
> >>>>>>> --- a/sound/pci/hda/patch_realtek.c
> >>>>>>> +++ b/sound/pci/hda/patch_realtek.c
> >>>>>>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec 
> >>>>>>> *codec)
> >>>>>>>
> >>>>>>>        spec = codec->spec;
> >>>>>>>        spec->gen.shared_mic_vref_pin = 0x18;
> >>>>>>> +    codec->power_mgmt = 1;
> >>>>>>>
> >>>>>>>        snd_hda_pick_fixup(codec, alc269_fixup_models,
> >>>>>>>                   alc269_fixup_tbl, alc269_fixups);
> >>>>>>>
> >>>>>>>
> >>>>>>> The patchset is for for-next branch of sound git tree, but they 
> >>>>>>> might
> >>>>>>> be applicable to 4.0-rc (or even older), too.  The current 
> >>>>>>> patches are
> >>>>>>> found in topic/hda-power branch.
> >>>>>> So I hoped to be able to look at this today, but it turns out the
> >>>>>> machine I was thinking of using for testing has an ALC262 codec,
> >>>>>> which hardly counts as "new".
> >>>>>>
> >>>>>> Hui, is this something you feel like taking on? Otherwise I'll 
> >>>>>> try to
> >>>>>> talk to someone in Taipei.
> >>>>>>
> >>>>> OK? I will look for the machine to do the test next week.
> >>>>>
> >>>>> Regards,
> >>>>> Hui.
> >>>>>
> >>>> Sorry for late response, today is my first day in the office back from
> >>>> vacation, I checked all machines in the Beijing office, none of 
> >>>> them has
> >>>> the ALC282 codec, I will continue to look for the machine from 
> >>>> other office.
> >>>>
> >>>> And I did the test on the machines with the alc283, alc255, alc292 and
> >>>> alc269, the testing result were same, there were no sound output from
> >>>> internal speaker or headphone, and the internal mic or external mic
> >>>> can't record any sound. The test steps as below:
> >>>>
> >>>> 1. power_save_node = 0
> >>>> checkout the hda-power branch, build the kernel based on this branch.
> >>>> Install the kernel to the above machines and boot into the desktop
> >>>> test internal speaker and internal mic, works very well, plug a 
> >>>> headset,
> >>>> test headphone and external mic, works very well.
> >>>> run pm_suspend, wait 5 seconds, wakeup the system, redo the above 
> >>>> test,
> >>>> everything works very well.
> >>> OK, this is expected.  The patch shouldn't touch this case.
> >>>
> >>>> 2. power_save_node = 1
> >>>> enable the power_save_node as below:
> >>>> @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec *codec)
> >>>>
> >>>>           alc_auto_parse_customize_define(codec);
> >>>>
> >>>> +       codec->power_save_node = 1;
> >>>> +
> >>>>           if (has_cdefine_beep(codec))
> >>>>                   spec->gen.beep_nid = 0x01;
> >>>> rebuild the kernel, install the kernel to the above machines and boot
> >>>> into the desktop
> >>>> test internal speaker and internal mic, we can play sound to internal
> >>>> speaker without any errors, but I can't hear any sound from the 
> >>>> speaker;
> >>>> I can use the internal mic to record without errors, but recorded file
> >>>> did not include any sound pcm (maybe all 0x00 or 0xff)
> >>>> I plug a headset into the headset jack, the detection works very well,
> >>>> but I can't hear sound from headphone when play a sound, and I 
> >>>> can't use
> >>>> headset mic to record any sound as well.
> >>>>
> >>>>
> >>>> And I attached 2 alsa-info.txt, one is the power_save_node=0, the 
> >>>> other
> >>>> is the power_save_node=1
> >>> Thanks.  The alsa-info.sh outputs show no difference but the power
> >>> state, so the widget attributes seem kept with the power state change,
> >>> as it seems.
> >>>
> >>> Could you give alsa-info.sh output *during* playing with
> >>> power_save_node=1?
> >> Also, try to pull topic/hda-regmap branch in addition, and apply the
> >> patch below.  This implements the partial sync for the widget path.
> >> Note that the patch is totally untested.
> > Got it, I will do the test next Monday, since I can't access those 
> > machines until next Monday.
> >
> > Regards,
> > Hui.
> 
> The attached alsa-info.txt was generated when the aplay was playing a 
> song, it seems the widget power state did not change even the output 
> device was working.
> 
> 
> And I also checkout the hda-regmap branch and applied the patch below, 
> rebuilt the kernel and used the kernel to do the test of playing and 
> recording, both internal devices and external devices worked very well, 
> I didn't see any obvious problems when using hda-regmap branch doing the 
> test.

Great!  I merged the branch now and enabled the widget power saving
for Realtek codecs.


Takashi
Hui Wang April 9, 2015, 6:54 a.m. UTC | #4
On 2015?03?30? 14:53, hwang4 wrote:
>
>
> On 2015?03?27? 08:11, Hui Wang wrote:
>> On 03/26/2015 09:52 PM, Takashi Iwai wrote:
>>> At Thu, 26 Mar 2015 14:10:17 +0100,
>>> Takashi Iwai wrote:
>>>> At Thu, 26 Mar 2015 20:24:43 +0800,
>>>> Hui Wang wrote:
>>>>> On 03/21/2015 02:38 PM, Hui Wang wrote:
>>>>>> On 03/21/2015 12:20 AM, David Henningsson wrote:
>>>>>>> On 2015-03-18 09:50, Takashi Iwai wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> here is a patchset for supporting more aggressive PM for HD-audio.
>>>>>>>> This allows to change the power state of each widget more 
>>>>>>>> dynamically
>>>>>>>> with jack and stream states.  It's activated only when the codec
>>>>>>>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
>>>>>>>>
>>>>>>>> In theory, this should work for the recent Realtek codecs, but
>>>>>>>> currently I have no machine for test.
>>>>>>>>
>>>>>>>> David, could you or your team check whether this works for 
>>>>>>>> ALC282 or
>>>>>>>> such?  Just add like:
>>>>>>>>
>>>>>>>> --- a/sound/pci/hda/patch_realtek.c
>>>>>>>> +++ b/sound/pci/hda/patch_realtek.c
>>>>>>>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec 
>>>>>>>> *codec)
>>>>>>>>
>>>>>>>>        spec = codec->spec;
>>>>>>>>        spec->gen.shared_mic_vref_pin = 0x18;
>>>>>>>> +    codec->power_mgmt = 1;
>>>>>>>>
>>>>>>>>        snd_hda_pick_fixup(codec, alc269_fixup_models,
>>>>>>>>                   alc269_fixup_tbl, alc269_fixups);
>>>>>>>>
>>>>>>>>
>>>>>>>> The patchset is for for-next branch of sound git tree, but they 
>>>>>>>> might
>>>>>>>> be applicable to 4.0-rc (or even older), too.  The current 
>>>>>>>> patches are
>>>>>>>> found in topic/hda-power branch.
>>>>>>> So I hoped to be able to look at this today, but it turns out the
>>>>>>> machine I was thinking of using for testing has an ALC262 codec,
>>>>>>> which hardly counts as "new".
>>>>>>>
>>>>>>> Hui, is this something you feel like taking on? Otherwise I'll 
>>>>>>> try to
>>>>>>> talk to someone in Taipei.
>>>>>>>
>>>>>> OK? I will look for the machine to do the test next week.
>>>>>>
>>>>>> Regards,
>>>>>> Hui.
>>>>>>
>>>>> Sorry for late response, today is my first day in the office back 
>>>>> from
>>>>> vacation, I checked all machines in the Beijing office, none of 
>>>>> them has
>>>>> the ALC282 codec, I will continue to look for the machine from 
>>>>> other office.
>>>>>
>>>>> And I did the test on the machines with the alc283, alc255, alc292 
>>>>> and
>>>>> alc269, the testing result were same, there were no sound output from
>>>>> internal speaker or headphone, and the internal mic or external mic
>>>>> can't record any sound. The test steps as below:
>>>>>
>>>>> 1. power_save_node = 0
>>>>> checkout the hda-power branch, build the kernel based on this branch.
>>>>> Install the kernel to the above machines and boot into the desktop
>>>>> test internal speaker and internal mic, works very well, plug a 
>>>>> headset,
>>>>> test headphone and external mic, works very well.
>>>>> run pm_suspend, wait 5 seconds, wakeup the system, redo the above 
>>>>> test,
>>>>> everything works very well.
>>>> OK, this is expected.  The patch shouldn't touch this case.
>>>>
>>>>> 2. power_save_node = 1
>>>>> enable the power_save_node as below:
>>>>> @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec 
>>>>> *codec)
>>>>>
>>>>>           alc_auto_parse_customize_define(codec);
>>>>>
>>>>> +       codec->power_save_node = 1;
>>>>> +
>>>>>           if (has_cdefine_beep(codec))
>>>>>                   spec->gen.beep_nid = 0x01;
>>>>> rebuild the kernel, install the kernel to the above machines and boot
>>>>> into the desktop
>>>>> test internal speaker and internal mic, we can play sound to internal
>>>>> speaker without any errors, but I can't hear any sound from the 
>>>>> speaker;
>>>>> I can use the internal mic to record without errors, but recorded 
>>>>> file
>>>>> did not include any sound pcm (maybe all 0x00 or 0xff)
>>>>> I plug a headset into the headset jack, the detection works very 
>>>>> well,
>>>>> but I can't hear sound from headphone when play a sound, and I 
>>>>> can't use
>>>>> headset mic to record any sound as well.
>>>>>
>>>>>
>>>>> And I attached 2 alsa-info.txt, one is the power_save_node=0, the 
>>>>> other
>>>>> is the power_save_node=1
>>>> Thanks.  The alsa-info.sh outputs show no difference but the power
>>>> state, so the widget attributes seem kept with the power state change,
>>>> as it seems.
>>>>
>>>> Could you give alsa-info.sh output *during* playing with
>>>> power_save_node=1?
>>> Also, try to pull topic/hda-regmap branch in addition, and apply the
>>> patch below.  This implements the partial sync for the widget path.
>>> Note that the patch is totally untested.
>> Got it, I will do the test next Monday, since I can't access those 
>> machines until next Monday.
>>
>> Regards,
>> Hui.
>
> The attached alsa-info.txt was generated when the aplay was playing a 
> song, it seems the widget power state did not change even the output 
> device was working.
>
>
> And I also checkout the hda-regmap branch and applied the patch below, 
> rebuilt the kernel and used the kernel to do the test of playing and 
> recording, both internal devices and external devices worked very 
> well, I didn't see any obvious problems when using hda-regmap branch 
> doing the test.
>
> Regards,
> Hui.
>
Hi Takashi,

Probably I didn't express correctly, sorry to make you mis-understand.  
I wanted to express that I tested hda-power and hda-regmap two branches 
respectively, the hda-regmap branch with your patch worked very well, 
but the hda-power branch didn't work on the machines with realtek codec, 
the nodes kept in the D3 power state no matter playing or not.

It seems you enabled the power_save_node for realtek codec several days 
ago, it makes the HDA drivers fail to work on all machines with realtek 
codec.

Regards,
Hui.
Takashi Iwai April 9, 2015, 6:56 a.m. UTC | #5
At Thu, 09 Apr 2015 14:54:17 +0800,
hwang4 wrote:
> 
> 
> 
> On 2015?03?30? 14:53, hwang4 wrote:
> >
> >
> > On 2015?03?27? 08:11, Hui Wang wrote:
> >> On 03/26/2015 09:52 PM, Takashi Iwai wrote:
> >>> At Thu, 26 Mar 2015 14:10:17 +0100,
> >>> Takashi Iwai wrote:
> >>>> At Thu, 26 Mar 2015 20:24:43 +0800,
> >>>> Hui Wang wrote:
> >>>>> On 03/21/2015 02:38 PM, Hui Wang wrote:
> >>>>>> On 03/21/2015 12:20 AM, David Henningsson wrote:
> >>>>>>> On 2015-03-18 09:50, Takashi Iwai wrote:
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> here is a patchset for supporting more aggressive PM for HD-audio.
> >>>>>>>> This allows to change the power state of each widget more 
> >>>>>>>> dynamically
> >>>>>>>> with jack and stream states.  It's activated only when the codec
> >>>>>>>> driver (or via sysfs or f/w patch) sets codec->power_mgmt flag.
> >>>>>>>>
> >>>>>>>> In theory, this should work for the recent Realtek codecs, but
> >>>>>>>> currently I have no machine for test.
> >>>>>>>>
> >>>>>>>> David, could you or your team check whether this works for 
> >>>>>>>> ALC282 or
> >>>>>>>> such?  Just add like:
> >>>>>>>>
> >>>>>>>> --- a/sound/pci/hda/patch_realtek.c
> >>>>>>>> +++ b/sound/pci/hda/patch_realtek.c
> >>>>>>>> @@ -5415,6 +5415,7 @@ static int patch_alc269(struct hda_codec 
> >>>>>>>> *codec)
> >>>>>>>>
> >>>>>>>>        spec = codec->spec;
> >>>>>>>>        spec->gen.shared_mic_vref_pin = 0x18;
> >>>>>>>> +    codec->power_mgmt = 1;
> >>>>>>>>
> >>>>>>>>        snd_hda_pick_fixup(codec, alc269_fixup_models,
> >>>>>>>>                   alc269_fixup_tbl, alc269_fixups);
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> The patchset is for for-next branch of sound git tree, but they 
> >>>>>>>> might
> >>>>>>>> be applicable to 4.0-rc (or even older), too.  The current 
> >>>>>>>> patches are
> >>>>>>>> found in topic/hda-power branch.
> >>>>>>> So I hoped to be able to look at this today, but it turns out the
> >>>>>>> machine I was thinking of using for testing has an ALC262 codec,
> >>>>>>> which hardly counts as "new".
> >>>>>>>
> >>>>>>> Hui, is this something you feel like taking on? Otherwise I'll 
> >>>>>>> try to
> >>>>>>> talk to someone in Taipei.
> >>>>>>>
> >>>>>> OK? I will look for the machine to do the test next week.
> >>>>>>
> >>>>>> Regards,
> >>>>>> Hui.
> >>>>>>
> >>>>> Sorry for late response, today is my first day in the office back 
> >>>>> from
> >>>>> vacation, I checked all machines in the Beijing office, none of 
> >>>>> them has
> >>>>> the ALC282 codec, I will continue to look for the machine from 
> >>>>> other office.
> >>>>>
> >>>>> And I did the test on the machines with the alc283, alc255, alc292 
> >>>>> and
> >>>>> alc269, the testing result were same, there were no sound output from
> >>>>> internal speaker or headphone, and the internal mic or external mic
> >>>>> can't record any sound. The test steps as below:
> >>>>>
> >>>>> 1. power_save_node = 0
> >>>>> checkout the hda-power branch, build the kernel based on this branch.
> >>>>> Install the kernel to the above machines and boot into the desktop
> >>>>> test internal speaker and internal mic, works very well, plug a 
> >>>>> headset,
> >>>>> test headphone and external mic, works very well.
> >>>>> run pm_suspend, wait 5 seconds, wakeup the system, redo the above 
> >>>>> test,
> >>>>> everything works very well.
> >>>> OK, this is expected.  The patch shouldn't touch this case.
> >>>>
> >>>>> 2. power_save_node = 1
> >>>>> enable the power_save_node as below:
> >>>>> @@ -5426,6 +5426,8 @@ static int patch_alc269(struct hda_codec 
> >>>>> *codec)
> >>>>>
> >>>>>           alc_auto_parse_customize_define(codec);
> >>>>>
> >>>>> +       codec->power_save_node = 1;
> >>>>> +
> >>>>>           if (has_cdefine_beep(codec))
> >>>>>                   spec->gen.beep_nid = 0x01;
> >>>>> rebuild the kernel, install the kernel to the above machines and boot
> >>>>> into the desktop
> >>>>> test internal speaker and internal mic, we can play sound to internal
> >>>>> speaker without any errors, but I can't hear any sound from the 
> >>>>> speaker;
> >>>>> I can use the internal mic to record without errors, but recorded 
> >>>>> file
> >>>>> did not include any sound pcm (maybe all 0x00 or 0xff)
> >>>>> I plug a headset into the headset jack, the detection works very 
> >>>>> well,
> >>>>> but I can't hear sound from headphone when play a sound, and I 
> >>>>> can't use
> >>>>> headset mic to record any sound as well.
> >>>>>
> >>>>>
> >>>>> And I attached 2 alsa-info.txt, one is the power_save_node=0, the 
> >>>>> other
> >>>>> is the power_save_node=1
> >>>> Thanks.  The alsa-info.sh outputs show no difference but the power
> >>>> state, so the widget attributes seem kept with the power state change,
> >>>> as it seems.
> >>>>
> >>>> Could you give alsa-info.sh output *during* playing with
> >>>> power_save_node=1?
> >>> Also, try to pull topic/hda-regmap branch in addition, and apply the
> >>> patch below.  This implements the partial sync for the widget path.
> >>> Note that the patch is totally untested.
> >> Got it, I will do the test next Monday, since I can't access those 
> >> machines until next Monday.
> >>
> >> Regards,
> >> Hui.
> >
> > The attached alsa-info.txt was generated when the aplay was playing a 
> > song, it seems the widget power state did not change even the output 
> > device was working.
> >
> >
> > And I also checkout the hda-regmap branch and applied the patch below, 
> > rebuilt the kernel and used the kernel to do the test of playing and 
> > recording, both internal devices and external devices worked very 
> > well, I didn't see any obvious problems when using hda-regmap branch 
> > doing the test.
> >
> > Regards,
> > Hui.
> >
> Hi Takashi,
> 
> Probably I didn't express correctly, sorry to make you mis-understand.  
> I wanted to express that I tested hda-power and hda-regmap two branches 
> respectively, the hda-regmap branch with your patch worked very well, 
> but the hda-power branch didn't work on the machines with realtek codec, 
> the nodes kept in the D3 power state no matter playing or not.
>
> It seems you enabled the power_save_node for realtek codec several days 
> ago, it makes the HDA drivers fail to work on all machines with realtek 
> codec.

Ah, OK.  Then we should revert the commit later.

But let's continue debugging a bit.  Could you give alsa-info.sh
outputs on both working and non-working states?


Takashi
David Henningsson April 9, 2015, 6:59 a.m. UTC | #6
On 2015-04-09 08:56, Takashi Iwai wrote:
> Ah, OK.  Then we should revert the commit later.
>
> But let's continue debugging a bit.  Could you give alsa-info.sh
> outputs on both working and non-working states?

Just running hda-emu with a realtek codec, e g 
codecs/canonical/alc292-dell-latitude-e5440-ccert-201307-13941 turns all 
nodes, including the internal speaker, into D3. And running a playback 
test does not switch things into D0 - even the DAC node remains in D3 
even though you try to stream to it, which seems a bit strange.

Could you explain how this is supposed to work?
Takashi Iwai April 9, 2015, 8:35 a.m. UTC | #7
At Thu, 09 Apr 2015 08:59:17 +0200,
David Henningsson wrote:
> 
> 
> 
> On 2015-04-09 08:56, Takashi Iwai wrote:
> > Ah, OK.  Then we should revert the commit later.
> >
> > But let's continue debugging a bit.  Could you give alsa-info.sh
> > outputs on both working and non-working states?
> 
> Just running hda-emu with a realtek codec, e g 
> codecs/canonical/alc292-dell-latitude-e5440-ccert-201307-13941 turns all 
> nodes, including the internal speaker, into D3. And running a playback 
> test does not switch things into D0 - even the DAC node remains in D3 
> even though you try to stream to it, which seems a bit strange.
> 
> Could you explain how this is supposed to work?

Doh, it was the missing stream_pm ops setup.  Also I found a few
other minor issues.  I'm going to submit a fix patch series now.


thanks

Takashi
diff mbox

Patch

diff --git a/include/sound/hda_regmap.h b/include/sound/hda_regmap.h
index 76648ccfbbf8..727a5801e298 100644
--- a/include/sound/hda_regmap.h
+++ b/include/sound/hda_regmap.h
@@ -202,4 +202,16 @@  snd_hdac_regmap_update_amp_stereo(struct hdac_device *codec, hda_nid_t nid,
 	return snd_hdac_regmap_update_raw(codec, cmd, mask, val);
 }
 
+/**
+ * snd_hdac_regmap_sync_node - sync the widget node attributes
+ * @codec: HD-audio codec
+ * @nid: NID to sync
+ */
+static inline void
+snd_hdac_regmap_sync_node(struct hdac_device *codec, hda_nid_t nid)
+{
+	regcache_mark_dirty(codec->regmap);
+	regcache_sync_region(codec->regmap, nid << 20, ((nid + 1) << 20) -1);
+}
+
 #endif /* __SOUND_HDA_REGMAP_H */
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index f7ccef5559de..1f2ca7be1468 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -842,10 +842,8 @@  static hda_nid_t path_power_update(struct hda_codec *codec,
 			snd_hda_codec_write(codec, nid, 0,
 					    AC_VERB_SET_POWER_STATE, state);
 			changed = nid;
-			/* here we assume that widget attributes (e.g. amp,
-			 * pinctl connection) don't change with local power
-			 * state change.  If not, need to sync the cache.
-			 */
+			if (state == AC_PWRST_D0)
+				snd_hdac_regmap_sync_node(&codec->core, nid);
 		}
 	}
 	return changed;