Each codec-hwdep device has a sysfs directory in /sys/class/sound populated with a bunch of files which can be read. Some of these files can be written to, enabling one to over-ride the default. For example on my Lenovo I have /sys/class/sound/hwC0D0 which contains:
vendor_id
32 bit codec vendor id (hex) (read-write)
subsystem_id
32 bit subsystem id (hex) (read-write)
revision_id
32 bit revision id (hex) (read-write)
chip_name
name of chipset
afg
AFG id (read-only)
mfg
MFG id (read-only)
name
code name string (read-write)
modelname
current model option (read-write)
init_verbs
verbs to be execute at initialisation time. Extra verbs can be added by writing to init_verbs as numbers in the form: nid verb parameter
hints
hint strings in format 'key= value', e.g. eapd_switch = yes (for example, this particular hint is picked up by a call to snd_hda_get_bool_hint(codec, "eapd_switch") in the patch_sigmatel.c source)
init_pin_configs
show the default initial pin configurations as set up by the BIOS at boot time
driver_pin_configs
show the default pin configurations as set by the codec parser. Only pin configurations changed by the parser are shown.
user_pin_configs
show ping configurations used to override the BIOS set up configurations. One can append new values by writing a nid and value tuple to this file.
reconfig
triggers codec reconfiguration by writing any value to this file
clear
codec reset, remove mixer elements, clear all init verbs and hints
For example to see the BIOS pin configurations on my Lenovo laptop:
$ cat /sys/class/sound/hwC0D0/init_pin_configs
0x14 0x99130110
0x15 0x411111f0
0x16 0x411111f0
0x17 0x411111f0
0x18 0x03a19820
0x19 0x99a3012f
0x1a 0x411111f0
0x1b 0x0321401f
0x1c 0x411111f0
0x1d 0x40178e2d
0x1e 0x411111f0
And to identify my audio hardware, I can use:
$ cat /sys/class/sound/hwC0D0/ \
{vendor_name,chip_name,vendor_id,subsystem_id}
Realtek
ALC861-VD
0x10ec0862
0x17aa3867
{vendor_name,chip_name,vendor_id,subsystem_id}
Realtek
ALC861-VD
0x10ec0862
0x17aa3867
..showing that my Lenovo has Realtek ALC861-VD and the vendor and subsystem ids.
Enjoy!
For builds of the alsa driver that are compiled with debugging, it's important to check the contents of the kernel ring buffer after echoing 1 to reconfig, because the audio card has to be unused for the reinit to be effected.
ReplyDelete@Dan, thanks for that useful extra nugget of goodness.
ReplyDelete