-----Original Message----- From: David Henningsson [mailto:david.henningsson@canonical.com] Sent: Friday, March 27, 2015 2:50 PM To: Jie, Yang; Tanu Kaskinen; Takashi Iwai Cc: perex@perex.cz; broonie@kernel.org; alsa-devel@alsa-project.org; Girdwood, Liam R; Liam Girdwood Subject: Re: [PATCH v2 1/2] ALSA: jack: create jack kcontrols for every jack input device
On 2015-03-26 13:43, Jie, Yang wrote:
Sorry, Correct a typo(removing line "create "Mic Jack" kctl;" in default case)
It looks like your code can be simplified as:
[Keyon] thanks, I will try simplify them.
switch (type | SND_JACK_HEADSET) { case SND_JACK_HEADSET: create "Headset Mic Jack" kctl; /* fall through */ case SND_JACK_MICROPHONE: case SND_JACK_HEADPHONE: create format("%s Jack", id) kctl;
[Keyon] I don't want to fill "id" to kctl name, because sometimes it can be string which can't be understood by PA, such as:
soc/intel/mfld_machine.c: ret_val = snd_soc_card_jack_new(runtime->card, soc/intel/mfld_machine.c- "Intel(R) MID Audio Jack", SND_JACK_HEADSET | soc/intel/mfld_machine.c- SND_JACK_BTN_0 | SND_JACK_BTN_1, &mfld_jack,
soc/omap/ams-delta.c: ret = snd_soc_card_jack_new(card, "hook_switch", SND_JACK_HEADSET, soc/omap/ams-delta.c- &ams_delta_hook_switch, NULL, 0);
}
...that way, prefixes such as "Front Headphone Jack" are preserved too,
[Keyon] if PA can recognize "Front Headphone Jack" and "Rear Headphone Jack", then I prefer to add a determine here:
if (!strcmp(id, "Front Headphone Jack") || !strcmp(id, "Rear Headphone Jack")) create format("%s Jack", id) kctl;
which is a good thing.
// David
snd_jack_new(struct snd_card *card, const char *id, int type, struct
snd_jack **jjack) { ...
Switch(type | SND_JACK_HEADSET) { case SND_JACK_MICROPHONE: create "Mic Jack" kctl; break; case SND_JACK_HEADSET: if (id == "Headphone Mic Headset") { create " Headphone Mic Jack " kctl; create " Headset Mic Jack " kctl; } else { create " Headphone Jack " kctl; create " Headset Mic Jack " kctl; } break; case SND_JACK_HEADPHONE: if (id == "Headset Mic") { create " Headphone Jack " kctl; // create " Headset Mic Phantom Jack " kctl; } else if (id == "Headphone Mic") { create " Headphone Mic Jack " kctl; } else if (id == "Headset Headphone Mic") { create " Headphone Mic Jack " kctl; // create " Headset Mic Phantom Jack " kctl; } else { create " Headphone Jack " kctl; } break; default: break; } ... }
Jack Type Jack name kctls/switches
name
SND_JACK_HEADPHONE Headphone Headphone
Jack
SND_JACK_MICROPHONE Mic Mic Jack SND_JACK_HEADSET Headset Headphone
Jack
Headset Mic
Jack
SND_JACK_HEADPHONE Headset Mic Headphone
Jack
Headset Mic
Phantom Jack
SND_JACK_HEADPHONE Headphone Mic Headphone
Mic Jack
SND_JACK_HEADPHONE Headset Headphone Mic Headphone
Mic Jack
Headset Mic
Phantom Jack
SND_JACK_HEADSET Headphone Mic Headset Headphone
Mic Jack
Headset Mic
Jack
~Keyon
-- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic