2015-4-8 上午12:07 於 "Takashi Iwai" tiwai@suse.de 寫道:
At Fri, 3 Apr 2015 20:07:13 +0800, Jie Yang wrote:
Currently only hda will create kctls for hda jacks, for asoc, people may need create jack kctls in specific driver.
Here we are introducing kctls for each jack, by creating kctls and add them to jack controls list (considering exist of combo jack). At the same time, we will report events for each control in the list.
With this new implementation, both HDA and soc jack kctls works fine, they are compatible for old HDA jack kctls, too.
For soc, a. snd_jack_new() with NULL jack_kctl; b. for each pin, call snd_jack_add_kctls() to add one kctl(it will call snd_ctl_add() to add kctl to card);
So, if I understand correctly, there is no association between input jack and ctl jack names at all? The former is created via snd_jack_new() while the latter is created from each pin name string.
For hda, a. call snd_jack_kctl_new()(in __snd_hda_jack_add_kctl()) to new a jack_kctl(also new kctl); and use snd_hda_ctl_add to add kctl to card; b. new a hda_jack_tbl, appoint jack_tbl->jack_kctl = jack_kctl; c. for non-phantom jack, call snd_jack_new() with this jack_kctl, then the jack_kctl will be added to the new created jack;
This would work, yes. But, I have some uneasy feeling, something not well digested...
Ideally, we want a single API for representing both input and kctl jacks. Now, with this implementation, essentially it's still two API calls -- snd_jack_new() for input jacks and snd_jack_kctl_new() for kctl jacks. (Actually oxygen driver still seems lacking kctl jack because of this.) The obvious difference from the current code is that there is an internal association from kctls to input-jack object (although the relation is invisible in outside). Hmm...
Do pulseaudio need oxygen change from input device to kctl since there is no headphone playback volume and pulseaudio drop the support multi channel volume control recently ?
Card hw:0 'DS'/'Asus Virtuoso 66 (rev 2) at 0xe800, irq 16' Mixer name : 'AV200' Components : 'WM8776 WM8766 AV200' Controls : 31 Simple ctrls : 25 Simple mixer control 'Master',0 Capabilities: pvolume pswitch pswitch-joined penum Playback channels: Front Left - Front Right - Rear Left - Rear Right - Front Center - Woofer - Side Left - Side Right Limits: Playback 135 - 255 Mono: Front Left: Playback 255 [100%] [0.00dB] [on] Front Right: Playback 255 [100%] [0.00dB] [on] Rear Left: Playback 255 [100%] [0.00dB] [on] Rear Right: Playback 255 [100%] [0.00dB] [on] Front Center: Playback 255 [100%] [0.00dB] [on] Woofer: Playback 255 [100%] [0.00dB] [on] Side Left: Playback 255 [100%] [0.00dB] [on] Side Right: Playback 255 [100%] [0.00dB] [on] Simple mixer control 'Headphone',0 Capabilities: pvolume pswitch pswitch-joined penum Playback channels: Front Left - Front Right Limits: Playback 61 - 127 Mono: Front Left: Playback 127 [100%] [on] Front Right: Playback 127 [100%] [on]