Skip to contentSkip to conversation

sound/pci/hda: CX20549 cleanup/fixes

PATCH In review Michael Karcher 3 participants 15 messages Apr 5, 2012 – Apr 10, 2012 Sound

lore
Share & tools
lore
#0 lore raw

cover sound/pci/hda: CX20549 cleanup/fixes

This series of patches fixes recording on a Gigabyte W551N laptop that seems to be identical to the BenW R55E. The Audio Codec uses the same subsystem ID, which is assigned to Quanta. The Gigabyte laptop is based on the Quanta TW3 ODM.

(for the whole series)

#1 lore raw

At Thu, 05 Apr 2012 15:29:37 +0200,

Quoted 5 lines · Michael Karcher

This series of patches fixes recording on a Gigabyte W551N laptop that seems to be identical to the BenW R55E. The Audio Codec uses the same subsystem ID, which is assigned to Quanta. The Gigabyte laptop is based on the Quanta TW3 ODM.

Thanks for the patch.
I'll review and give comments back for each.

Quoted 2 lines

(for the whole series)

Please give your sign-off in each patch changelog, so that I can apply the patches directly via git-am.

Also, the subject lines should be with ALSA: prefix. Take a look at other git commits to that file as an example.

Takashi

#2 lore raw

At Thu, 05 Apr 2012 16:27:01 +0200,

Quoted 12 lines · Takashi Iwai

At Thu, 05 Apr 2012 15:29:37 +0200,

Quoted 5 lines · Michael Karcher

This series of patches fixes recording on a Gigabyte W551N laptop that seems to be identical to the BenW R55E. The Audio Codec uses the same subsystem ID, which is assigned to Quanta. The Gigabyte laptop is based on the Quanta TW3 ODM.

Thanks for the patch.
I'll review and give comments back for each.

Quoted 8 lines
Quoted 2 lines

(for the whole series)

Please give your sign-off in each patch changelog, so that I can apply the patches directly via git-am.

Also, the subject lines should be with ALSA: prefix. Take a look at other git commits to that file as an example.

BTW, did you try model=auto option to enable the auto-parser? If it doesn't work well for you, let me know.

In anyway, give alsa-info.sh output (run with --no-upload option) for better checks.

thanks,

Takashi

#3 lore raw
Quoted 2 lines · Takashi Iwai

BTW, did you try model=auto option to enable the auto-parser? If it doesn't work well for you, let me know.

I tried the model=auto option, too. It works mostly, but the mixer node seems to not be utilized correctly/at all. The capture source list does not contain "mixer" anymore, and there are no playback controls for Internal Mic/Mic/Line. The Capture setup seems to be built correctly (except for the missing mixer). The auto setup adds two extra input devices for jack sense.

Quoted 2 lines

In anyway, give alsa-info.sh output (run with --no-upload option) for better checks.

alsa-info for the revised patch-set (mailed soon) with and without model=auto is attached. Information I consider irrelevant (non-sound modules and dmesg context not relating to sound) has been edited out.

BTW: I seem to have encountered an ALSA user-space bug: The codec provides a "master capture switch", i.e. the "mute" of the adc in amp. It also provides a "capture source selection enum", i.e. the "Connection Select" of the adc widget. The enum provides mutually exclusive capture sources that have no volume control, whilst the master capture switch is coupled with the capture volume control, and should not be related to the source enumeration. But if I play around with capture sources in alsamixer, the "Capture Switch" is turned off as soon as I switch the source from the first item in the Mux list to something else.

This happens with both the patched hard-coded "BenQ" configuration and the auto configuration.

Regards,
Michael Karcher

upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.4.60
!!################################

!!Script ran on: Fri Apr 6 12:31:13 UTC 2012

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

Debian GNU/Linux wheezy/sid \n \l

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

Manufacturer:      GIGABYTE
Product Name:      W551
Product Version:   Not Applicable

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

Kernel release:    3.3.0-trunk-amd64
Operating System:  GNU/Linux
Architecture:      x86_64
Processor:         unknown
SMP Enabled:       Yes

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

Driver version:     1.0.24
Library version:    1.0.25
Utilities version:  1.0.25

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

snd_hda_intel

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

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

ESound Daemon:
Installed - Yes (/usr/bin/esd)
Running - No

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

0 [Intel ]: HDA-Intel - HDA Intel

                      HDA Intel at 0xde300000 irq 46

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

00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)

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

00:1b.0 0403: 8086:27d8 (rev 02)

	Subsystem: 152d:0753

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

!!Module: snd_hda_intel

	align_buffer_size : Y
	bdl_pos_adj : 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	beep_mode : 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
	enable_msi : -1
	id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	model : auto,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	position_fix : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	power_save : 0
	power_save_controller : Y
	probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	single_cmd : N
	snoop : Y

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

Codec: Conexant CX20549 (Venice)
Address: 0
AFG Function Id: 0x1 (unsol 0)
MFG Function Id: 0x2 (unsol 1)
Vendor Id: 0x14f15045
Subsystem Id: 0x152d0753
Revision Id: 0x100100
Modem Function Group: 0x2
Default PCM:

    rates [0x140]: 48000 96000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM

Default Amp-In caps: N/A
Default Amp-Out caps: N/A
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x10 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Master Playback Volume", index=0, device=0

    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Control: name="Master Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x00010014: OUT EAPD Detect
  EAPD 0x2: EAPD
  Pin Default 0x951701f0: [Fixed] Speaker at Int Top
    Conn = Analog, Color = Unknown
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3
  Power: setting=D0, actual=D0
  Connection: 2
     0x19* 0x17

Node 0x11 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Line Jack", index=0, device=0 Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1 Amp-Out vals: [0x26 0x26]
Pincap 0x0000113c: IN OUT HP Detect
Vref caps: HIZ 80
Pin Default 0x02813011: [Jack] Line In at Ext Front
Conn = 1/8, Color = Blue
DefAssociation = 0x1, Sequence = 0x1
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=02, enabled=1
Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 2

     0x19 0x17*

Node 0x12 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Mic Jack", index=0, device=0 Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1 Amp-Out vals: [0xab 0xab]
Pincap 0x0000113c: IN OUT HP Detect
Vref caps: HIZ 80
Pin Default 0x02a19010: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 2

     0x19* 0x17

Node 0x13 [Pin Complex] wcaps 0x400301: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x22454130: [Jack] SPDIF Out at Sep Front
Conn = Optical, Color = Green DefAssociation = 0x3, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Connection: 1

     0x18

Node 0x14 [Pin Complex] wcaps 0x400081: Stereo
Pincap 0x00001124: IN Detect
Vref caps: HIZ 80
Pin Default 0x95a7011e: [Fixed] Mic at Int Top
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0xe
Misc = NO_PRESENCE
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=00, enabled=0
Node 0x15 [Pin Complex] wcaps 0x400001: Stereo
Pincap 0x00000020: IN
Pin Default 0x400001f0: [N/A] Line Out at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Node 0x16 [Beep Generator Widget] wcaps 0x70000c: Mono Amp-Out
Control: name="Beep Playback Volume", index=0, device=0

    ControlAmp: chs=1, dir=Out, idx=0, ofs=0
  Control: name="Beep Playback Switch", index=0, device=0
    ControlAmp: chs=1, dir=Out, idx=0, ofs=0

Amp-Out caps: ofs=0x07, nsteps=0x07, stepsize=0x0b, mute=1 Amp-Out vals: [0x06]
Node 0x17 [Audio Mixer] wcaps 0x20050b: Stereo Amp-In
Amp-In caps: ofs=0x14, nsteps=0x2b, stepsize=0x05, mute=1 Amp-In vals: [0x94 0x94] [0x94 0x94] [0x94 0x94] [0x94 0x94] [0x94 0x94] Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 5

     0x19 0x14 0x12 0x11 0x15

Node 0x18 [Audio Output] wcaps 0x211: Stereo Digital
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="IEC958 Default PCM Playback Switch", index=0, device=0
Device: name="Conexant Digital", type="SPDIF", device=1
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
PCM:

    rates [0x40]: 48000
    bits [0x6]: 16 20
    formats [0x5]: PCM AC3

Node 0x19 [Audio Output] wcaps 0xc11: Stereo R/L
Device: name="CONEXANT Analog", type="Audio", device=0
Converter: stream=0, channel=0
PCM:

    rates [0x540]: 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM

Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Node 0x1a [Audio Input] wcaps 0x100d0b: Stereo Amp-In R/L
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="CONEXANT Analog", type="Audio", device=0
  Amp-In caps: ofs=0x00, nsteps=0x17, stepsize=0x05, mute=1
  Amp-In vals:  [0x80 0x80]
  Converter: stream=0, channel=0
  SDI-Select: 0
  Power states:  D0 D1 D2 D3
  Power: setting=D0, actual=D0
  Connection: 5
     0x17 0x14 0x12* 0x11 0x15

Node 0x1b [Vendor Defined Widget] wcaps 0xf00000: Mono --endcollapse--

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

crw-rw---T  1 root audio 116,  6 Apr  6 14:30 /dev/snd/controlC0
crw-rw---T  1 root audio 116,  5 Apr  6 14:30 /dev/snd/hwC0D0
crw-rw---T  1 root audio 116,  4 Apr  6 14:30 /dev/snd/pcmC0D0c
crw-rw---T  1 root audio 116,  3 Apr  6 14:30 /dev/snd/pcmC0D0p
crw-rw---T  1 root audio 116,  2 Apr  6 14:30 /dev/snd/pcmC0D1p
crw-rw---T+ 1 root audio 116,  1 Apr  5 10:25 /dev/snd/seq
crw-rw---T+ 1 root audio 116, 33 Apr  5 10:25 /dev/snd/timer

/dev/snd/by-path:
total 0

drwxr-xr-x 2 root root  60 Apr  6 14:30 .
drwxr-xr-x 3 root root 200 Apr  6 14:30 ..
lrwxrwxrwx 1 root root  12 Apr  6 14:30 pci-0000:00:1b.0 -> ../controlC0

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

APLAY

**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: CONEXANT Analog [CONEXANT Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: Conexant Digital [Conexant Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0

ARECORD

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

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

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

Card hw:0 'Intel'/'HDA Intel at 0xde300000 irq 46'
Mixer name : 'Conexant CX20549 (Venice)'
Components : 'HDA:14f15045,152d0753,00100100'
Controls : 15
Simple ctrls : 9
Simple mixer control 'Master',0
Capabilities: pvolume pswitch penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 43
Mono:
Front Left: Playback 15 [35%] [-42.00dB] [on]
Front Right: Playback 15 [35%] [-42.00dB] [on]
Simple mixer control 'PCM',0
Capabilities: pvolume penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 255
Mono:
Front Left: Playback 255 [100%] [0.00dB]
Front Right: Playback 255 [100%] [0.00dB]
Simple mixer control 'Line',0
Capabilities: cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Capture channels: Mono
Mono: Capture [off]
Simple mixer control 'Mic',0
Capabilities: cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Capture channels: Mono
Mono: Capture [on]
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958 Default PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Beep',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono
Limits: Playback 0 - 7
Mono: Playback 6 [86%] [-3.00dB] [on]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 23
Front Left: Capture 23 [100%] [34.50dB] [off]
Front Right: Capture 23 [100%] [34.50dB] [off]
Simple mixer control 'Internal Mic',0
Capabilities: cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Capture channels: Mono
Mono: Capture [off]

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

--startcollapse--

state.Intel {
	control.1 {
		iface MIXER
		name 'Master Playback Volume'
		value.0 15
		value.1 15
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -6450
			dbmax 0
			dbvalue.0 -4200
			dbvalue.1 -4200
		}
	}
	control.2 {
		iface MIXER
		name 'Master Playback Switch'
		value.0 true
		value.1 true
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.3 {
		iface MIXER
		name 'Capture Volume'
		value.0 23
		value.1 23
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 23'
			dbmin 0
			dbmax 3450
			dbvalue.0 3450
			dbvalue.1 3450
		}
	}
	control.4 {
		iface MIXER
		name 'Capture Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.5 {
		iface MIXER
		name 'Capture Source'
		value Mic
		comment {
			access 'read write'
			type ENUMERATED
			count 1
			item.0 Mic
			item.1 'Internal Mic'
			item.2 Line
		}
	}
	control.6 {
		iface MIXER
		name 'IEC958 Playback Con Mask'
		value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.7 {
		iface MIXER
		name 'IEC958 Playback Pro Mask'
		value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.8 {
		iface MIXER
		name 'IEC958 Playback Default'
		value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access 'read write'
			type IEC958
			count 1
		}
	}
	control.9 {
		iface MIXER
		name 'IEC958 Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.10 {
		iface MIXER
		name 'IEC958 Default PCM Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.11 {
		iface MIXER
		name 'Beep Playback Volume'
		value 6
		comment {
			access 'read write'
			type INTEGER
			count 1
			range '0 - 7'
			dbmin -2100
			dbmax 0
			dbvalue.0 -300
		}
	}
	control.12 {
		iface MIXER
		name 'Beep Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.13 {
		iface CARD
		name 'Mic Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.14 {
		iface CARD
		name 'Line Jack'
		value false
		comment {
			access read
			type BOOLEAN
			count 1
		}
	}
	control.15 {
		iface MIXER
		name 'PCM Playback Volume'
		value.0 255
		value.1 255
		comment {
			access 'read write user'
			type INTEGER
			count 2
			range '0 - 255'
			tlv '0000000100000008ffffec1400000014'
			dbmin -5100
			dbmax 0
			dbvalue.0 0
			dbvalue.1 0
		}
	}
}

--endcollapse--

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

Module
(limited to sound modules)
snd_hda_intel
snd_hda_codec_conexant
snd_hda_codec
snd_hwdep
snd_hrtimer
snd_pcm_oss
snd_mixer_oss
snd_pcm
snd_page_alloc
snd_seq_midi
snd_seq_midi_event
snd_rawmidi
snd_seq
snd_seq_device
snd_timer
snd
soundcore

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

/sys/class/sound/hwC0D0/init_pin_configs:
0x10 0x951701f0
0x11 0x02813011
0x12 0x02a19010
0x13 0x22454130
0x14 0x95a7011e
0x15 0x400001f0

/sys/class/sound/hwC0D0/driver_pin_configs:

/sys/class/sound/hwC0D0/user_pin_configs:

/sys/class/sound/hwC0D0/init_verbs:

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

(irrelevant context removed)

[    8.617779] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[    8.727179] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input8
--
[13552.526261] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
--
[16815.941187] hda-intel: IRQ timing workaround is activated for card #0. Suggest a bigger bdl_pos_adj.
[21013.152341] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[21013.191274] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input12
[21855.192698] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[21855.226590] hda_codec: CX20549 (Venice): BIOS auto-probing.
[21855.227567] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input13
[21855.228977] input: HDA Intel Line as /devices/pci0000:00/0000:00:1b.0/sound/card0/input14
[21855.231842] input: HDA Intel Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input15

upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.4.60
!!################################

!!Script ran on: Fri Apr 6 12:25:42 UTC 2012

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

Debian GNU/Linux wheezy/sid \n \l

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

Manufacturer:      GIGABYTE
Product Name:      W551
Product Version:   Not Applicable

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

Kernel release:    3.3.0-trunk-amd64
Operating System:  GNU/Linux
Architecture:      x86_64
Processor:         unknown
SMP Enabled:       Yes

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

Driver version:     1.0.24
Library version:    1.0.25
Utilities version:  1.0.25

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

snd_hda_intel

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

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

ESound Daemon:
Installed - Yes (/usr/bin/esd)
Running - No

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

0 [Intel ]: HDA-Intel - HDA Intel

                      HDA Intel at 0xde300000 irq 46

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

00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02) 05:01.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)

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

00:1b.0 0403: 8086:27d8 (rev 02)

	Subsystem: 152d:0753

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

!!Module: snd_hda_intel

	align_buffer_size : Y
	bdl_pos_adj : 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	beep_mode : 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
	enable_msi : -1
	id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	model : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
	position_fix : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	power_save : 0
	power_save_controller : Y
	probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
	probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	single_cmd : N
	snoop : Y

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

Codec: Conexant CX20549 (Venice)
Address: 0
AFG Function Id: 0x1 (unsol 0)
MFG Function Id: 0x2 (unsol 1)
Vendor Id: 0x14f15045
Subsystem Id: 0x152d0753
Revision Id: 0x100100
Modem Function Group: 0x2
Default PCM:

    rates [0x140]: 48000 96000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM

Default Amp-In caps: N/A
Default Amp-Out caps: N/A
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x10 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1 Amp-Out vals: [0x26 0x26]
Pincap 0x00010014: OUT EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x951701f0: [Fixed] Speaker at Int Top
Conn = Analog, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 2

     0x19 0x17*

Node 0x11 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1 Amp-Out vals: [0x26 0x26]
Pincap 0x0000113c: IN OUT HP Detect
Vref caps: HIZ 80
Pin Default 0x02813011: [Jack] Line In at Ext Front
Conn = 1/8, Color = Blue
DefAssociation = 0x1, Sequence = 0x1
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 2

     0x19 0x17*

Node 0x12 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x2b, nsteps=0x2b, stepsize=0x05, mute=1 Amp-Out vals: [0xab 0xab]
Pincap 0x0000113c: IN OUT HP Detect
Vref caps: HIZ 80
Pin Default 0x02a19010: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Connection: 2

     0x19* 0x17

Node 0x13 [Pin Complex] wcaps 0x400301: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x22454130: [Jack] SPDIF Out at Sep Front
Conn = Optical, Color = Green DefAssociation = 0x3, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Connection: 1

     0x18

Node 0x14 [Pin Complex] wcaps 0x400081: Stereo
Pincap 0x00001124: IN Detect
Vref caps: HIZ 80
Pin Default 0x95a7011e: [Fixed] Mic at Int Top
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0xe
Misc = NO_PRESENCE
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=00, enabled=0
Node 0x15 [Pin Complex] wcaps 0x400001: Stereo
Pincap 0x00000020: IN
Pin Default 0x400001f0: [N/A] Line Out at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Node 0x16 [Beep Generator Widget] wcaps 0x70000c: Mono Amp-Out
Control: name="Beep Playback Volume", index=0, device=0

    ControlAmp: chs=1, dir=Out, idx=0, ofs=0
  Control: name="Beep Playback Switch", index=0, device=0
    ControlAmp: chs=1, dir=Out, idx=0, ofs=0

Amp-Out caps: ofs=0x07, nsteps=0x07, stepsize=0x0b, mute=1 Amp-Out vals: [0x06]
Node 0x17 [Audio Mixer] wcaps 0x20050b: Stereo Amp-In
Control: name="PCM Playback Volume", index=0, device=0

    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="PCM Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Internal Mic Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=1, ofs=0
  Control: name="Internal Mic Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=1, ofs=0
  Control: name="Mic Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=2, ofs=0
  Control: name="Mic Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=2, ofs=0
  Control: name="Line Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=3, ofs=0
  Control: name="Line Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=3, ofs=0
  Amp-In caps: ofs=0x14, nsteps=0x2b, stepsize=0x05, mute=1
  Amp-In vals:  [0x14 0x14] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
  Power states:  D0 D1 D2 D3
  Power: setting=D0, actual=D0
  Connection: 5
     0x19 0x14 0x12 0x11 0x15

Node 0x18 [Audio Output] wcaps 0x211: Stereo Digital
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="IEC958 Default PCM Playback Switch", index=0, device=0
Device: name="Conexant Digital", type="SPDIF", device=1
Converter: stream=8, channel=0
Digital: Enabled
Digital category: 0x0
PCM:

    rates [0x40]: 48000
    bits [0x6]: 16 20
    formats [0x5]: PCM AC3

Node 0x19 [Audio Output] wcaps 0xc11: Stereo R/L
Device: name="CONEXANT Analog", type="Audio", device=0
Converter: stream=8, channel=0
PCM:

    rates [0x540]: 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM

Power states: D0 D1 D2 D3
Power: setting=D0, actual=D0
Node 0x1a [Audio Input] wcaps 0x100d0b: Stereo Amp-In R/L
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="CONEXANT Analog", type="Audio", device=0
  Amp-In caps: ofs=0x00, nsteps=0x17, stepsize=0x05, mute=1
  Amp-In vals:  [0x97 0x97]
  Converter: stream=4, channel=0
  SDI-Select: 0
  Power states:  D0 D1 D2 D3
  Power: setting=D0, actual=D0
  Connection: 5
     0x17* 0x14 0x12 0x11 0x15

Node 0x1b [Vendor Defined Widget] wcaps 0xf00000: Mono --endcollapse--

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

crw-rw---T+ 1 root audio 116,  6 Apr  6 14:16 /dev/snd/controlC0
crw-rw---T+ 1 root audio 116,  5 Apr  6 14:16 /dev/snd/hwC0D0
crw-rw---T+ 1 root audio 116,  4 Apr  6 14:17 /dev/snd/pcmC0D0c
crw-rw---T+ 1 root audio 116,  3 Apr  6 14:17 /dev/snd/pcmC0D0p
crw-rw---T+ 1 root audio 116,  2 Apr  6 14:17 /dev/snd/pcmC0D1p
crw-rw---T+ 1 root audio 116,  1 Apr  5 10:25 /dev/snd/seq
crw-rw---T+ 1 root audio 116, 33 Apr  5 10:25 /dev/snd/timer

/dev/snd/by-path:
total 0

drwxr-xr-x 2 root root  60 Apr  6 14:16 .
drwxr-xr-x 3 root root 200 Apr  6 14:16 ..
lrwxrwxrwx 1 root root  12 Apr  6 14:16 pci-0000:00:1b.0 -> ../controlC0

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

APLAY

**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: CONEXANT Analog [CONEXANT Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: Conexant Digital [Conexant Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0

ARECORD

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

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

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

Card hw:0 'Intel'/'HDA Intel at 0xde300000 irq 46'
Mixer name : 'Conexant CX20549 (Venice)'
Components : 'HDA:14f15045,152d0753,00100100'
Controls : 20
Simple ctrls : 10
Simple mixer control 'Master',0
Capabilities: pvolume pswitch pswitch-joined penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 43
Mono:
Front Left: Playback 38 [88%] [-7.50dB] [on]
Front Right: Playback 38 [88%] [-7.50dB] [on]
Simple mixer control 'PCM',0
Capabilities: pvolume pswitch penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 43
Mono:
Front Left: Playback 20 [47%] [0.00dB] [on]
Front Right: Playback 20 [47%] [0.00dB] [on]
Simple mixer control 'Line',0
Capabilities: pvolume pswitch cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Playback channels: Front Left - Front Right
Capture channels: Mono
Limits: Playback 0 - 43
Mono: Capture [off]
Front Left: Playback 0 [0%] [-30.00dB] [off]
Front Right: Playback 0 [0%] [-30.00dB] [off]
Simple mixer control 'Mic',0
Capabilities: pvolume pswitch cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Playback channels: Front Left - Front Right
Capture channels: Mono
Limits: Playback 0 - 43
Mono: Capture [off]
Front Left: Playback 0 [0%] [-30.00dB] [off]
Front Right: Playback 0 [0%] [-30.00dB] [off]
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958 Default PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Beep',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono
Limits: Playback 0 - 7
Mono: Playback 6 [86%] [-3.00dB] [on]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 23
Front Left: Capture 23 [100%] [34.50dB] [off]
Front Right: Capture 23 [100%] [34.50dB] [off]
Simple mixer control 'Mixer',0
Capabilities: cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Capture channels: Mono
Mono: Capture [on]
Simple mixer control 'Internal Mic',0
Capabilities: pvolume pswitch cswitch cswitch-joined cswitch-exclusive penum Capture exclusive group: 0
Playback channels: Front Left - Front Right
Capture channels: Mono
Limits: Playback 0 - 43
Mono: Capture [off]
Front Left: Playback 0 [0%] [-30.00dB] [off]
Front Right: Playback 0 [0%] [-30.00dB] [off]

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

--startcollapse--

state.Intel {
	control.1 {
		iface MIXER
		name 'Capture Volume'
		value.0 23
		value.1 23
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 23'
			dbmin 0
			dbmax 3450
			dbvalue.0 3450
			dbvalue.1 3450
		}
	}
	control.2 {
		iface MIXER
		name 'Capture Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.3 {
		iface MIXER
		name 'PCM Playback Volume'
		value.0 20
		value.1 20
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -3000
			dbmax 3450
			dbvalue.0 0
			dbvalue.1 0
		}
	}
	control.4 {
		iface MIXER
		name 'PCM Playback Switch'
		value.0 true
		value.1 true
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.5 {
		iface MIXER
		name 'Internal Mic Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -3000
			dbmax 3450
			dbvalue.0 -3000
			dbvalue.1 -3000
		}
	}
	control.6 {
		iface MIXER
		name 'Internal Mic Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.7 {
		iface MIXER
		name 'Mic Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -3000
			dbmax 3450
			dbvalue.0 -3000
			dbvalue.1 -3000
		}
	}
	control.8 {
		iface MIXER
		name 'Mic Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.9 {
		iface MIXER
		name 'Master Playback Volume'
		value.0 38
		value.1 38
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -6450
			dbmax 0
			dbvalue.0 -750
			dbvalue.1 -750
		}
	}
	control.10 {
		iface MIXER
		name 'Master Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.11 {
		iface MIXER
		name 'Line Playback Volume'
		value.0 0
		value.1 0
		comment {
			access 'read write'
			type INTEGER
			count 2
			range '0 - 43'
			dbmin -3000
			dbmax 3450
			dbvalue.0 -3000
			dbvalue.1 -3000
		}
	}
	control.12 {
		iface MIXER
		name 'Line Playback Switch'
		value.0 false
		value.1 false
		comment {
			access 'read write'
			type BOOLEAN
			count 2
		}
	}
	control.13 {
		iface MIXER
		name 'IEC958 Playback Con Mask'
		value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.14 {
		iface MIXER
		name 'IEC958 Playback Pro Mask'
		value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access read
			type IEC958
			count 1
		}
	}
	control.15 {
		iface MIXER
		name 'IEC958 Playback Default'
		value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
		comment {
			access 'read write'
			type IEC958
			count 1
		}
	}
	control.16 {
		iface MIXER
		name 'IEC958 Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.17 {
		iface MIXER
		name 'IEC958 Default PCM Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
	control.18 {
		iface MIXER
		name 'Capture Source'
		value Mixer
		comment {
			access 'read write'
			type ENUMERATED
			count 1
			item.0 'Internal Mic'
			item.1 Mic
			item.2 Line
			item.3 Mixer
		}
	}
	control.19 {
		iface MIXER
		name 'Beep Playback Volume'
		value 6
		comment {
			access 'read write'
			type INTEGER
			count 1
			range '0 - 7'
			dbmin -2100
			dbmax 0
			dbvalue.0 -300
		}
	}
	control.20 {
		iface MIXER
		name 'Beep Playback Switch'
		value true
		comment {
			access 'read write'
			type BOOLEAN
			count 1
		}
	}
}

--endcollapse--

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

Module
(limited to sound modules)
snd_hda_codec_conexant
snd_hda_intel
snd_hda_codec
snd_hwdep
snd_hrtimer
snd_pcm_oss
snd_mixer_oss
snd_pcm
snd_page_alloc
snd_seq_midi
snd_seq_midi_event
snd_rawmidi
snd_seq
snd_seq_device
snd_timer
snd
soundcore

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

/sys/class/sound/hwC0D0/init_pin_configs:
0x10 0x951701f0
0x11 0x02813011
0x12 0x02a19010
0x13 0x22454130
0x14 0x95a7011e
0x15 0x400001f0

/sys/class/sound/hwC0D0/driver_pin_configs:

/sys/class/sound/hwC0D0/user_pin_configs:

/sys/class/sound/hwC0D0/init_verbs:

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

(irrelevant context removed)

[    8.617779] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[    8.727179] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input8
--
[13552.526261] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
--
[16815.941187] hda-intel: IRQ timing workaround is activated for card #0. Suggest a bigger bdl_pos_adj.
[21013.152341] snd_hda_intel 0000:00:1b.0: irq 46 for MSI/MSI-X
[21013.191274] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input12
#4 lore raw

At Fri, 06 Apr 2012 15:01:47 +0200,

Quoted 9 lines · Michael Karcher
Quoted 2 lines · Takashi Iwai

BTW, did you try model=auto option to enable the auto-parser? If it doesn't work well for you, let me know.

I tried the model=auto option, too. It works mostly, but the mixer node seems to not be utilized correctly/at all. The capture source list does not contain "mixer" anymore, and there are no playback controls for Internal Mic/Mic/Line.

Right, the analog loopback is dropped in the auto-parser for simplicity.

Quoted 10 lines

The Capture setup seems to be built correctly
(except for the missing mixer). The auto setup adds two extra input devices for jack sense.

Quoted 2 lines

In anyway, give alsa-info.sh output (run with --no-upload option) for better checks.

alsa-info for the revised patch-set (mailed soon) with and without model=auto is attached. Information I consider irrelevant (non-sound modules and dmesg context not relating to sound) has been edited out.

Thanks.

Quoted 9 lines

BTW: I seem to have encountered an ALSA user-space bug: The codec provides a "master capture switch", i.e. the "mute" of the adc in amp. It also provides a "capture source selection enum", i.e. the "Connection Select" of the adc widget. The enum provides mutually exclusive capture sources that have no volume control, whilst the master capture switch is coupled with the capture volume control, and should not be related to the source enumeration. But if I play around with capture sources in alsamixer, the "Capture Switch" is turned off as soon as I switch the source from the first item in the Mux list to something else.

This sounds like a bug in alsa-lib mixer abstraction. There is a known shortcomings in the "capture source" enum, e.g. it can't take more than one ADCs.

Quoted 2 lines

This happens with both the patched hard-coded "BenQ" configuration and the auto configuration.

OK, I'll check it in the next week.

thanks,

Takashi

#5 lore raw

cover ALSA: hda - CX20549 cleanup/fixes

In reply to Takashi Iwai

This is the revised patch series for the CX20549 (and related stuff)

Changes:
Patch 1/6:
- spec->single_adc_amp has been moved to codec->single_adc_amp to fix printing in /proc.
Patch 2/6:
- "Line In" has been changed to "Line".
- This change has also been performed on the Mixer Labels.
Patch 4/6:
- .num_items has been adjusted, too.
- A comment about physical testing has been added to the commit message.
Patch 5/6:
- pin_amp_workaround is not set for CX20549 in auto-setup, too

#6 lore raw

PATCH 1/6 ALSA: hda - Fix proc output for ADC amp values of CX20549

The CX20549 has only one single input amp on it's input converter widget. Fix printing of values in the codec file in /proc/asound.

---
 sound/pci/hda/hda_codec.h      |    3 +++
 sound/pci/hda/hda_proc.c       |   13 ++++++++++---
 sound/pci/hda/patch_conexant.c |    8 ++++----
 3 files changed, 17 insertions(+), 7 deletions(-)
sound/pci/hda/hda_codec.h +3 -0
index 9a9f372..56b4f74 100644
@@ -851,6 +851,9 @@ struct hda_codec {
 	unsigned int pin_amp_workaround:1; /* pin out-amp takes index
 					    * (e.g. Conexant codecs)
 					    */
+	unsigned int single_adc_amp:1; /* adc in-amp takes no index
+					* (e.g. CX20549 codec)
+					*/
 	unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */
 	unsigned int pins_shutup:1;	/* pins are shut up */
 	unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */
sound/pci/hda/hda_proc.c +10 -3
index 254ab52..8c1715a 100644
@@ -651,9 +651,16 @@ static void print_codec_info(struct snd_info_entry *entry,
 			snd_iprintf(buffer, "  Amp-In caps: ");
 			print_amp_caps(buffer, codec, nid, HDA_INPUT);
 			snd_iprintf(buffer, "  Amp-In vals: ");
-			print_amp_vals(buffer, codec, nid, HDA_INPUT,
-				       wid_caps & AC_WCAP_STEREO,
-				       wid_type == AC_WID_PIN ? 1 : conn_len);
+			if (wid_type == AC_WID_PIN ||
+			    (codec->single_adc_amp &&
+			     wid_type == AC_WID_AUD_IN))
+                                print_amp_vals(buffer, codec, nid, HDA_INPUT,
+                                               wid_caps & AC_WCAP_STEREO,
+                                               1);
+                        else
+                                print_amp_vals(buffer, codec, nid, HDA_INPUT,
+                                               wid_caps & AC_WCAP_STEREO,
+                                               conn_len);
 		}
 		if (wid_caps & AC_WCAP_OUT_AMP) {
 			snd_iprintf(buffer, "  Amp-Out caps: ");
sound/pci/hda/patch_conexant.c +4 -4
index 8c6523b..60890ef 100644
@@ -141,7 +141,6 @@ struct conexant_spec {
 	unsigned int hp_laptop:1;
 	unsigned int asus:1;
 	unsigned int pin_eapd_ctrls:1;
-	unsigned int single_adc_amp:1;
 
 	unsigned int adc_switching:1;
 
@@ -1111,6 +1110,7 @@ static int patch_cxt5045(struct hda_codec *codec)
 		return -ENOMEM;
 	codec->spec = spec;
 	codec->pin_amp_workaround = 1;
+	codec->single_adc_amp = 1;
 
 	spec->multiout.max_channels = 2;
 	spec->multiout.num_dacs = ARRAY_SIZE(cxt5045_dac_nids);
@@ -4220,7 +4220,7 @@ static int cx_auto_add_capture_volume(struct hda_codec *codec, hda_nid_t nid,
 		int idx = get_input_connection(codec, adc_nid, nid);
 		if (idx < 0)
 			continue;
-		if (spec->single_adc_amp)
+		if (codec->single_adc_amp)
 			idx = 0;
 		return cx_auto_add_volume_idx(codec, label, pfx,
 					      cidx, adc_nid, HDA_INPUT, idx);
@@ -4275,7 +4275,7 @@ static int cx_auto_build_input_controls(struct hda_codec *codec)
 		if (cidx < 0)
 			continue;
 		input_conn[i] = spec->imux_info[i].adc;
-		if (!spec->single_adc_amp)
+		if (!codec->single_adc_amp)
 			input_conn[i] |= cidx << 8;
 		if (i > 0 && input_conn[i] != input_conn[0])
 			multi_connection = 1;
@@ -4470,7 +4470,7 @@ static int patch_conexant_auto(struct hda_codec *codec)
 
 	switch (codec->vendor_id) {
 	case 0x14f15045:
-		spec->single_adc_amp = 1;
+		codec->single_adc_amp = 1;
 		break;
 	case 0x14f15051:
 		add_cx5051_fake_mutes(codec);
Signature · 1 line
1.7.9.1
#7 lore raw

PATCH 2/6 ALSA: hda - Rename capture sources of CX20549 to match common conventions

In reply to Michael Karcher

This includes renaming "Line In" to line, also in the mixer settings.

---
 sound/pci/hda/patch_conexant.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)
sound/pci/hda/patch_conexant.c +13 -13
index 60890ef..ab2cf5c 100644
@@ -686,27 +686,27 @@ static const struct hda_channel_mode cxt5045_modes[1] = {
 static const struct hda_input_mux cxt5045_capture_source = {
 	.num_items = 2,
 	.items = {
-		{ "IntMic", 0x1 },
-		{ "ExtMic", 0x2 },
+		{ "Internal Mic", 0x1 },
+		{ "Mic",          0x2 },
 	}
 };
 
 static const struct hda_input_mux cxt5045_capture_source_benq = {
 	.num_items = 5,
 	.items = {
-		{ "IntMic", 0x1 },
-		{ "ExtMic", 0x2 },
-		{ "LineIn", 0x3 },
-		{ "CD",     0x4 },
-		{ "Mixer",  0x0 },
+		{ "CD",           0x4 },
+		{ "Internal Mic", 0x1 },
+		{ "Mic",          0x2 },
+		{ "Line",         0x3 },
+		{ "Mixer",        0x0 },
 	}
 };
 
 static const struct hda_input_mux cxt5045_capture_source_hp530 = {
 	.num_items = 2,
 	.items = {
-		{ "ExtMic", 0x1 },
-		{ "IntMic", 0x2 },
+		{ "Mic",          0x1 },
+		{ "Internal Mic", 0x2 },
 	}
 };
 
@@ -826,10 +826,10 @@ static const struct snd_kcontrol_new cxt5045_benq_mixers[] = {
 	HDA_CODEC_VOLUME("CD Playback Volume", 0x17, 0x4, HDA_INPUT),
 	HDA_CODEC_MUTE("CD Playback Switch", 0x17, 0x4, HDA_INPUT),
 
-	HDA_CODEC_VOLUME("Line In Capture Volume", 0x1a, 0x03, HDA_INPUT),
-	HDA_CODEC_MUTE("Line In Capture Switch", 0x1a, 0x03, HDA_INPUT),
-	HDA_CODEC_VOLUME("Line In Playback Volume", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_MUTE("Line In Playback Switch", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_VOLUME("Line Capture Volume", 0x1a, 0x03, HDA_INPUT),
+	HDA_CODEC_MUTE("Line Capture Switch", 0x1a, 0x03, HDA_INPUT),
+	HDA_CODEC_VOLUME("Line Playback Volume", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_MUTE("Line Playback Switch", 0x17, 0x3, HDA_INPUT),
 
 	HDA_CODEC_VOLUME("Mixer Capture Volume", 0x1a, 0x0, HDA_INPUT),
 	HDA_CODEC_MUTE("Mixer Capture Switch", 0x1a, 0x0, HDA_INPUT),
Signature · 1 line
1.7.9.1
#8 lore raw

PATCH 3/6 ALSA: hda - fix record volume controls of CX20459 ("Venice")

In reply to Michael Karcher

The "input converter" widget of the CX20459 has only one input amplifier, expose that one as "Capture Volume/Capture Switch". The actual record source selection is already exposed through the separately installed input mux.

---
 sound/pci/hda/patch_conexant.c |   31 ++++++-------------------------
 1 files changed, 6 insertions(+), 25 deletions(-)
sound/pci/hda/patch_conexant.c +6 -25
index ab2cf5c..c36441c 100644
@@ -797,10 +797,8 @@ static void cxt5045_hp_unsol_event(struct hda_codec *codec,
 }
 
 static const struct snd_kcontrol_new cxt5045_mixers[] = {
-	HDA_CODEC_VOLUME("Internal Mic Capture Volume", 0x1a, 0x01, HDA_INPUT),
-	HDA_CODEC_MUTE("Internal Mic Capture Switch", 0x1a, 0x01, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mic Capture Volume", 0x1a, 0x02, HDA_INPUT),
-	HDA_CODEC_MUTE("Mic Capture Switch", 0x1a, 0x02, HDA_INPUT),
+	HDA_CODEC_VOLUME("Capture Volume", 0x1a, 0x00, HDA_INPUT),
+	HDA_CODEC_MUTE("Capture Switch", 0x1a, 0x0, HDA_INPUT),
 	HDA_CODEC_VOLUME("PCM Playback Volume", 0x17, 0x0, HDA_INPUT),
 	HDA_CODEC_MUTE("PCM Playback Switch", 0x17, 0x0, HDA_INPUT),
 	HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x1, HDA_INPUT),
@@ -821,27 +819,18 @@ static const struct snd_kcontrol_new cxt5045_mixers[] = {
 };
 
 static const struct snd_kcontrol_new cxt5045_benq_mixers[] = {
-	HDA_CODEC_VOLUME("CD Capture Volume", 0x1a, 0x04, HDA_INPUT),
-	HDA_CODEC_MUTE("CD Capture Switch", 0x1a, 0x04, HDA_INPUT),
 	HDA_CODEC_VOLUME("CD Playback Volume", 0x17, 0x4, HDA_INPUT),
 	HDA_CODEC_MUTE("CD Playback Switch", 0x17, 0x4, HDA_INPUT),
 
-	HDA_CODEC_VOLUME("Line Capture Volume", 0x1a, 0x03, HDA_INPUT),
-	HDA_CODEC_MUTE("Line Capture Switch", 0x1a, 0x03, HDA_INPUT),
 	HDA_CODEC_VOLUME("Line Playback Volume", 0x17, 0x3, HDA_INPUT),
 	HDA_CODEC_MUTE("Line Playback Switch", 0x17, 0x3, HDA_INPUT),
 
-	HDA_CODEC_VOLUME("Mixer Capture Volume", 0x1a, 0x0, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer Capture Switch", 0x1a, 0x0, HDA_INPUT),
-
 	{}
 };
 
 static const struct snd_kcontrol_new cxt5045_mixers_hp530[] = {
-	HDA_CODEC_VOLUME("Internal Mic Capture Volume", 0x1a, 0x02, HDA_INPUT),
-	HDA_CODEC_MUTE("Internal Mic Capture Switch", 0x1a, 0x02, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mic Capture Volume", 0x1a, 0x01, HDA_INPUT),
-	HDA_CODEC_MUTE("Mic Capture Switch", 0x1a, 0x01, HDA_INPUT),
+	HDA_CODEC_VOLUME("Capture Volume", 0x1a, 0x00, HDA_INPUT),
+	HDA_CODEC_MUTE("Capture Switch", 0x1a, 0x0, HDA_INPUT),
 	HDA_CODEC_VOLUME("PCM Playback Volume", 0x17, 0x0, HDA_INPUT),
 	HDA_CODEC_MUTE("PCM Playback Switch", 0x17, 0x0, HDA_INPUT),
 	HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x2, HDA_INPUT),
@@ -977,16 +966,8 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
 		.put = conexant_mux_enum_put,
 	},
 	/* Audio input controls */
-	HDA_CODEC_VOLUME("Input-1 Volume", 0x1a, 0x0, HDA_INPUT),
-	HDA_CODEC_MUTE("Input-1 Switch", 0x1a, 0x0, HDA_INPUT),
-	HDA_CODEC_VOLUME("Input-2 Volume", 0x1a, 0x1, HDA_INPUT),
-	HDA_CODEC_MUTE("Input-2 Switch", 0x1a, 0x1, HDA_INPUT),
-	HDA_CODEC_VOLUME("Input-3 Volume", 0x1a, 0x2, HDA_INPUT),
-	HDA_CODEC_MUTE("Input-3 Switch", 0x1a, 0x2, HDA_INPUT),
-	HDA_CODEC_VOLUME("Input-4 Volume", 0x1a, 0x3, HDA_INPUT),
-	HDA_CODEC_MUTE("Input-4 Switch", 0x1a, 0x3, HDA_INPUT),
-	HDA_CODEC_VOLUME("Input-5 Volume", 0x1a, 0x4, HDA_INPUT),
-	HDA_CODEC_MUTE("Input-5 Switch", 0x1a, 0x4, HDA_INPUT),
+	HDA_CODEC_VOLUME("Capture Volume", 0x1a, 0x0, HDA_INPUT),
+	HDA_CODEC_MUTE("Capture Switch", 0x1a, 0x0, HDA_INPUT),
 	{ } /* end */
 };
 
Signature · 1 line
1.7.9.1
#9 lore raw

PATCH 4/6 ALSA: hda - Remove CD control from model=benq for CX20549

In reply to Michael Karcher

The ID used for detection of the BenQ R55E actually identifies the Quanta TW3 ODM design, which is also used for the Gigabyte W551 laptop series. Schematics on the internet clearly indicate that the "Port C" (analog input connected to record source #4 and mixer input #4) is unconnected.

Playing an audio CD through analog playback (using cdplay from cdtools) produces no sound, even with the mixer input labelled "CD" enabled, and the volume control in the CD drive set to maximum. This indicates the connection is really not present.

---
 sound/pci/hda/patch_conexant.c |    6 +-----
 1 files changed, 1 insertions(+), 5 deletions(-)
sound/pci/hda/patch_conexant.c +1 -5
index c36441c..ad5da16 100644
@@ -692,9 +692,8 @@ static const struct hda_input_mux cxt5045_capture_source = {
 };
 
 static const struct hda_input_mux cxt5045_capture_source_benq = {
-	.num_items = 5,
+	.num_items = 4,
 	.items = {
-		{ "CD",           0x4 },
 		{ "Internal Mic", 0x1 },
 		{ "Mic",          0x2 },
 		{ "Line",         0x3 },
@@ -819,9 +818,6 @@ static const struct snd_kcontrol_new cxt5045_mixers[] = {
 };
 
 static const struct snd_kcontrol_new cxt5045_benq_mixers[] = {
-	HDA_CODEC_VOLUME("CD Playback Volume", 0x17, 0x4, HDA_INPUT),
-	HDA_CODEC_MUTE("CD Playback Switch", 0x17, 0x4, HDA_INPUT),
-
 	HDA_CODEC_VOLUME("Line Playback Volume", 0x17, 0x3, HDA_INPUT),
 	HDA_CODEC_MUTE("Line Playback Switch", 0x17, 0x3, HDA_INPUT),
 
Signature · 1 line
1.7.9.1
#10 lore raw

PATCH 5/6 ALSA: hda - CX20549 doesn't need pin_amp_workaround.

In reply to Michael Karcher

CX20549 (ctx5045) doesn't accept data on index 1 for output pins, as shown in the following hda-var transaction:

  $ hda-verb /dev/snd/hwC0D0 0x10 set_amp_gain 0xb126
  nid = 0x10, verb = 0x300, param = 0xb126
  value = 0x0
  $ hda-verb /dev/snd/hwC0D0 0x10 get_amp_gain 0x8001
  nid = 0x10, verb = 0xb00, param = 0x8001
  value = 0x0
---
 sound/pci/hda/patch_conexant.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
sound/pci/hda/patch_conexant.c +3 -2
index ad5da16..8fe9f9d 100644
@@ -1086,7 +1086,6 @@ static int patch_cxt5045(struct hda_codec *codec)
 	if (!spec)
 		return -ENOMEM;
 	codec->spec = spec;
-	codec->pin_amp_workaround = 1;
 	codec->single_adc_amp = 1;
 
 	spec->multiout.max_channels = 2;
@@ -4443,7 +4442,6 @@ static int patch_conexant_auto(struct hda_codec *codec)
 	if (!spec)
 		return -ENOMEM;
 	codec->spec = spec;
-	codec->pin_amp_workaround = 1;
 
 	switch (codec->vendor_id) {
 	case 0x14f15045:
@@ -4451,7 +4449,10 @@ static int patch_conexant_auto(struct hda_codec *codec)
 		break;
 	case 0x14f15051:
 		add_cx5051_fake_mutes(codec);
+		codec->pin_amp_workaround = 1;
 		break;
+	default:
+		codec->pin_amp_workaround = 1;
 	}
 
 	apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);
Signature · 1 line
1.7.9.1
#11 lore raw

PATCH 6/6 ALSA: hda - clean up CX20549 test mixer setup

In reply to Michael Karcher

name pins consistently (MIC1/LINE1/HP-OUT/CD) on all controls affecting those pins.

remove duplicate SET_AMP_GAIN_MUTE to 0x17/index 0 and 0x17/index 1

really select MIC1, not Mixer out for recording

"Mixer out" for recording is not a "pin", adjust comment

---
 sound/pci/hda/patch_conexant.c |   38 +++++++++++++++++---------------------
 1 files changed, 17 insertions(+), 21 deletions(-)
sound/pci/hda/patch_conexant.c +17 -21
index 8fe9f9d..a36488d 100644
@@ -930,10 +930,10 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
 	/* Output controls */
 	HDA_CODEC_VOLUME("Speaker Playback Volume", 0x10, 0x0, HDA_OUTPUT),
 	HDA_CODEC_MUTE("Speaker Playback Switch", 0x10, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 11 Playback Volume", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 11 Playback Switch", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 12 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 12 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("HP-OUT Playback Volume", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("HP-OUT Playback Switch", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("LINE1 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("LINE1 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
 	
 	/* Modes for retasking pin widgets */
 	CXT_PIN_MODE("HP-OUT pin mode", 0x11, CXT_PIN_DIR_INOUT),
@@ -944,16 +944,16 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
 
 	/* Loopback mixer controls */
 
-	HDA_CODEC_VOLUME("Mixer-1 Volume", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-1 Switch", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-2 Volume", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-2 Switch", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-3 Volume", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-3 Switch", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-4 Volume", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-4 Switch", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-5 Volume", 0x17, 0x4, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-5 Switch", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_VOLUME("PCM Volume", 0x17, 0x0, HDA_INPUT),
+	HDA_CODEC_MUTE("PCM Switch", 0x17, 0x0, HDA_INPUT),
+	HDA_CODEC_VOLUME("MIC1 pin Volume", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_MUTE("MIC1 pin Switch", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_VOLUME("LINE1 pin Volume", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_MUTE("LINE1 pin Switch", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_VOLUME("HP-OUT pin Volume", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_MUTE("HP-OUT pin Switch", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_VOLUME("CD pin Volume", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_MUTE("CD pin Switch", 0x17, 0x4, HDA_INPUT),
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 		.name = "Input Source",
@@ -985,10 +985,6 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
 	{0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
 	{0x18, AC_VERB_SET_DIGI_CONVERT_1, 0},
 
-	/* Start with output sum widgets muted and their output gains at min */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
-
 	/* Unmute retasking pin widget output buffers since the default
 	 * state appears to be output.  As the pin mode is changed by the
 	 * user the pin mode control will take care of enabling the pin's
@@ -1003,11 +999,11 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
 	/* Set ADC connection select to match default mixer setting (mic1
 	 * pin)
 	 */
-	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x00},
-	{0x17, AC_VERB_SET_CONNECT_SEL, 0x00},
+	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x01},
+	{0x17, AC_VERB_SET_CONNECT_SEL, 0x01},
 
 	/* Mute all inputs to mixer widget (even unconnected ones) */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer pin */
+	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer */
 	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, /* Mic1 pin */
 	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, /* Line pin */
 	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, /* HP pin */
Signature · 1 line
1.7.9.1
#12 lore raw

Re: [PATCH 6/6] ALSA: hda - clean up CX20549 test mixer setup

Quoted 2 lines · Michael Karcher

name pins consistently (MIC1/LINE1/HP-OUT/CD) on all controls affecting those pins.

If this is a test mixer only, so maybe it does not matter that much, but anyway:

Loopback controls are usually labeled

"Line Playback Volume"
"Mic Playback Volume"

And outputs:

"Headphone Playback Volume"

For line outputs, I'm not sure if the right thing is

"Front Playback Volume",
"Line-Out Playback Volume", or
"Line Out Playback Volume"

Quoted 42 lines

remove duplicate SET_AMP_GAIN_MUTE to 0x17/index 0 and 0x17/index 1

really select MIC1, not Mixer out for recording

"Mixer out" for recording is not a "pin", adjust comment

---
  sound/pci/hda/patch_conexant.c |   38 +++++++++++++++++---------------------
  1 files changed, 17 insertions(+), 21 deletions(-)
sound/pci/hda/patch_conexant.c +4 -12
index 8fe9f9d..a36488d 100644
@@ -930,10 +930,10 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
  	/* Output controls */
  	HDA_CODEC_VOLUME("Speaker Playback Volume", 0x10, 0x0, HDA_OUTPUT),
  	HDA_CODEC_MUTE("Speaker Playback Switch", 0x10, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 11 Playback Volume", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 11 Playback Switch", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 12 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 12 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("HP-OUT Playback Volume", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("HP-OUT Playback Switch", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("LINE1 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("LINE1 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
 
  	/* Modes for retasking pin widgets */
  	CXT_PIN_MODE("HP-OUT pin mode", 0x11, CXT_PIN_DIR_INOUT),
@@ -944,16 +944,16 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
 
  	/* Loopback mixer controls */
 
-	HDA_CODEC_VOLUME("Mixer-1 Volume", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-1 Switch", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-2 Volume", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-2 Switch", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-3 Volume", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-3 Switch", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-4 Volume", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-4 Switch", 0x17, 0x3, HDA_INPUT),

sound/pci/hda/patch_conexant.c static const struct snd_kcontrol_new cxt5045_test_mixer[] = { · line 954

Quoted 10 lines
sound/pci/hda/patch_conexant.c +8 -2
-	HDA_CODEC_VOLUME("Mixer-5 Volume", 0x17, 0x4, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-5 Switch", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_VOLUME("PCM Volume", 0x17, 0x0, HDA_INPUT),
+	HDA_CODEC_MUTE("PCM Switch", 0x17, 0x0, HDA_INPUT),
+	HDA_CODEC_VOLUME("MIC1 pin Volume", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_MUTE("MIC1 pin Switch", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_VOLUME("LINE1 pin Volume", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_MUTE("LINE1 pin Switch", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_VOLUME("HP-OUT pin Volume", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_MUTE("HP-OUT pin Switch", 0x17, 0x3, HDA_INPUT),

Eh, is there a loopback control from the headphone?

Quoted 31 lines
sound/pci/hda/patch_conexant.c +5 -7
+	HDA_CODEC_VOLUME("CD pin Volume", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_MUTE("CD pin Switch", 0x17, 0x4, HDA_INPUT),
  	{
  		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  		.name = "Input Source",
@@ -985,10 +985,6 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
  	{0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
  	{0x18, AC_VERB_SET_DIGI_CONVERT_1, 0},
 
-	/* Start with output sum widgets muted and their output gains at min */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
-
  	/* Unmute retasking pin widget output buffers since the default
  	 * state appears to be output.  As the pin mode is changed by the
  	 * user the pin mode control will take care of enabling the pin's
@@ -1003,11 +999,11 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
  	/* Set ADC connection select to match default mixer setting (mic1
  	 * pin)
  	 */
-	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x00},
-	{0x17, AC_VERB_SET_CONNECT_SEL, 0x00},
+	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x01},
+	{0x17, AC_VERB_SET_CONNECT_SEL, 0x01},
 
  	/* Mute all inputs to mixer widget (even unconnected ones) */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer pin */
+	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, /* Mic1 pin */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, /* Line pin */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, /* HP pin */
Signature · 2 lines
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
#13 lore raw

Re: [PATCH 6/6] ALSA: hda - clean up CX20549 test mixer setup

At Tue, 10 Apr 2012 08:54:19 +0200,

Quoted 15 lines · David Henningsson
Quoted 2 lines · Michael Karcher

name pins consistently (MIC1/LINE1/HP-OUT/CD) on all controls affecting those pins.

If this is a test mixer only, so maybe it does not matter that much, but anyway:

Loopback controls are usually labeled

"Line Playback Volume"
"Mic Playback Volume"

And outputs:

Quoted 7 lines

"Headphone Playback Volume"

For line outputs, I'm not sure if the right thing is

"Front Playback Volume",
"Line-Out Playback Volume", or
"Line Out Playback Volume"

Yeah, in general, the strings like these would be better. But it's a test-only mode, which should be turned on by the user at own risk, so I didn't want to be too picky.

Quoted 46 lines
Quoted 46 lines

remove duplicate SET_AMP_GAIN_MUTE to 0x17/index 0 and 0x17/index 1

really select MIC1, not Mixer out for recording

"Mixer out" for recording is not a "pin", adjust comment

---
  sound/pci/hda/patch_conexant.c |   38 +++++++++++++++++---------------------
  1 files changed, 17 insertions(+), 21 deletions(-)
sound/pci/hda/patch_conexant.c +6 -14
index 8fe9f9d..a36488d 100644
@@ -930,10 +930,10 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
  	/* Output controls */
  	HDA_CODEC_VOLUME("Speaker Playback Volume", 0x10, 0x0, HDA_OUTPUT),
  	HDA_CODEC_MUTE("Speaker Playback Switch", 0x10, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 11 Playback Volume", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 11 Playback Switch", 0x11, 0x0, HDA_OUTPUT),
-	HDA_CODEC_VOLUME("Node 12 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
-	HDA_CODEC_MUTE("Node 12 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("HP-OUT Playback Volume", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("HP-OUT Playback Switch", 0x11, 0x0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("LINE1 Playback Volume", 0x12, 0x0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("LINE1 Playback Switch", 0x12, 0x0, HDA_OUTPUT),
 
  	/* Modes for retasking pin widgets */
  	CXT_PIN_MODE("HP-OUT pin mode", 0x11, CXT_PIN_DIR_INOUT),
@@ -944,16 +944,16 @@ static const struct snd_kcontrol_new cxt5045_test_mixer[] = {
 
  	/* Loopback mixer controls */
 
-	HDA_CODEC_VOLUME("Mixer-1 Volume", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-1 Switch", 0x17, 0x0, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-2 Volume", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-2 Switch", 0x17, 0x1, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-3 Volume", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-3 Switch", 0x17, 0x2, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-4 Volume", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-4 Switch", 0x17, 0x3, HDA_INPUT),
-	HDA_CODEC_VOLUME("Mixer-5 Volume", 0x17, 0x4, HDA_INPUT),
-	HDA_CODEC_MUTE("Mixer-5 Switch", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_VOLUME("PCM Volume", 0x17, 0x0, HDA_INPUT),
+	HDA_CODEC_MUTE("PCM Switch", 0x17, 0x0, HDA_INPUT),
Quoted 8 lines

sound/pci/hda/patch_conexant.c static const struct snd_kcontrol_new cxt5045_test_mixer[] = { · line 954

Quoted 6 lines
sound/pci/hda/patch_conexant.c +6 -0
+	HDA_CODEC_VOLUME("MIC1 pin Volume", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_MUTE("MIC1 pin Switch", 0x17, 0x1, HDA_INPUT),
+	HDA_CODEC_VOLUME("LINE1 pin Volume", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_MUTE("LINE1 pin Switch", 0x17, 0x2, HDA_INPUT),
+	HDA_CODEC_VOLUME("HP-OUT pin Volume", 0x17, 0x3, HDA_INPUT),
+	HDA_CODEC_MUTE("HP-OUT pin Switch", 0x17, 0x3, HDA_INPUT),

Eh, is there a loopback control from the headphone?

The HP pin can be used as an input on many codecs indeed.

Takashi

Quoted 38 lines
Quoted 31 lines
sound/pci/hda/patch_conexant.c +5 -7
+	HDA_CODEC_VOLUME("CD pin Volume", 0x17, 0x4, HDA_INPUT),
+	HDA_CODEC_MUTE("CD pin Switch", 0x17, 0x4, HDA_INPUT),
  	{
  		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  		.name = "Input Source",
@@ -985,10 +985,6 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
  	{0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
  	{0x18, AC_VERB_SET_DIGI_CONVERT_1, 0},
 
-	/* Start with output sum widgets muted and their output gains at min */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
-
  	/* Unmute retasking pin widget output buffers since the default
  	 * state appears to be output.  As the pin mode is changed by the
  	 * user the pin mode control will take care of enabling the pin's
@@ -1003,11 +999,11 @@ static const struct hda_verb cxt5045_test_init_verbs[] = {
  	/* Set ADC connection select to match default mixer setting (mic1
  	 * pin)
  	 */
-	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x00},
-	{0x17, AC_VERB_SET_CONNECT_SEL, 0x00},
+	{0x1a, AC_VERB_SET_CONNECT_SEL, 0x01},
+	{0x17, AC_VERB_SET_CONNECT_SEL, 0x01},
 
  	/* Mute all inputs to mixer widget (even unconnected ones) */
-	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer pin */
+	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, /* Mixer */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, /* Mic1 pin */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, /* Line pin */
  	{0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, /* HP pin */
Signature · 2 lines
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
Applied
#14 lore raw

Re: [PATCH 0/6] ALSA: hda - CX20549 cleanup/fixes

In reply to Michael Karcher

At Fri, 6 Apr 2012 15:34:14 +0200,

Quoted 15 lines · Michael Karcher

This is the revised patch series for the CX20549 (and related stuff)

Changes:
Patch 1/6:
- spec->single_adc_amp has been moved to codec->single_adc_amp to fix printing in /proc.
Patch 2/6:
- "Line In" has been changed to "Line".
- This change has also been performed on the Mixer Labels.
Patch 4/6:
- .num_items has been adjusted, too.
- A comment about physical testing has been added to the commit message.
Patch 5/6:
- pin_amp_workaround is not set for CX20549 in auto-setup, too

Thanks, applied all patches now.

(BTW, the first patch caused a few obvious warnings from
checkpatch.pl, so I fixed manually. At the next time, please run checkpatch.pl once before submission.)

Takashi