Lines Matching defs:ucm
53 #include "alsa-ucm.h"
84 static pa_alsa_jack* ucm_get_jack(pa_alsa_ucm_config *ucm, pa_alsa_ucm_device *device);
91 static void ucm_port_data_init(pa_alsa_ucm_port_data *port, pa_alsa_ucm_config *ucm, pa_device_port *core_port,
155 /* UCM device info - should be overwritten by ucm property */
358 /* Create a property list for this ucm device */
456 /* get priority from ucm config */
485 /* get priority from ucm config */
549 /* Create a property list for this ucm modifier */
758 int pa_alsa_ucm_query_profiles(pa_alsa_ucm_config *ucm, int card_index) {
765 err = snd_use_case_mgr_open(&ucm->ucm_mgr, card_name);
776 err = snd_use_case_mgr_open(&ucm->ucm_mgr, card_name);
784 err = snd_use_case_get(ucm->ucm_mgr, "=Linked", &value);
797 if (snd_use_case_get(ucm->ucm_mgr, "_alibpref", &value) == 0) {
799 ucm->alib_prefix = pa_xstrdup(value);
800 pa_log_debug("UCM _alibpref=%s", ucm->alib_prefix);
806 num_verbs = snd_use_case_verb_list(ucm->ucm_mgr, &verb_list);
818 err = pa_alsa_ucm_get_verb(ucm->ucm_mgr, verb_list[i], verb_list[i+1], &verb);
824 PA_LLIST_PREPEND(pa_alsa_ucm_verb, ucm->verbs, verb);
827 if (!ucm->verbs) {
836 snd_use_case_mgr_close(ucm->ucm_mgr);
837 ucm->ucm_mgr = NULL;
1048 jack = ucm_get_jack(context->ucm, dev);
1069 jack2 = ucm_get_jack(context->ucm, dev);
1108 ucm_port_data_init(data, context->ucm, port, pdevices, num);
1343 probe_volumes(*p, is_sink, pcm_handle, context->ucm->mixers, ignore_dB);
1377 int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile) {
1393 if ((snd_use_case_set(ucm->ucm_mgr, "_verb", profile)) < 0) {
1399 ucm->active_verb = NULL;
1400 PA_LLIST_FOREACH(verb, ucm->verbs) {
1404 ucm->active_verb = verb;
1416 pa_alsa_ucm_config *ucm;
1422 pa_assert(context && context->ucm);
1424 ucm = context->ucm;
1425 pa_assert(ucm->ucm_mgr);
1436 pa_log_debug("Disable ucm device %s", dev_name);
1437 if (snd_use_case_set(ucm->ucm_mgr, "_disdev", dev_name) > 0) {
1438 pa_log("Failed to disable ucm device %s", dev_name);
1446 pa_log_debug("Enable ucm device %s", enable_devs[i]);
1447 if (snd_use_case_set(ucm->ucm_mgr, "_enadev", enable_devs[i]) < 0) {
1448 pa_log("Failed to enable ucm device %s", enable_devs[i]);
1504 /* save mapping to ucm device */
1538 /* save mapping to ucm modifier */
1561 static pa_alsa_mapping* ucm_alsa_mapping_get(pa_alsa_ucm_config *ucm, pa_alsa_profile_set *ps, const char *verb_name, const char *device_str, bool is_sink) {
1568 if (ucm->alib_prefix && pa_startswith(device_str, ucm->alib_prefix))
1569 ucm_alibpref_len = strlen(ucm->alib_prefix);
1584 pa_alsa_ucm_config *ucm,
1596 m = ucm_alsa_mapping_get(ucm, ps, verb_name, device_str, is_sink);
1609 m->ucm_context.ucm = ucm;
1622 /* mapping priority is the highest one of ucm devices */
1626 /* mapping channels is the lowest one of ucm devices */
1636 pa_alsa_ucm_config *ucm,
1647 m = ucm_alsa_mapping_get(ucm, ps, verb_name, device_str, is_sink);
1657 m->ucm_context.ucm = ucm;
1676 pa_alsa_ucm_config *ucm,
1693 ret = ucm_create_mapping_direction(ucm, ps, p, device, verb_name, device_name, sink, true);
1695 ret = ucm_create_mapping_direction(ucm, ps, p, device, verb_name, device_name, source, false);
1700 static pa_alsa_jack* ucm_get_jack(pa_alsa_ucm_config *ucm, pa_alsa_ucm_device *device) {
1707 pa_assert(ucm);
1743 PA_LLIST_FOREACH(j, ucm->jacks)
1755 PA_LLIST_PREPEND(pa_alsa_jack, ucm->jacks, j);
1764 pa_alsa_ucm_config *ucm,
1825 ucm_create_mapping(ucm, ps, p, dev, verb_name, name, sink, source);
1827 jack = ucm_get_jack(ucm, dev);
1849 PA_LLIST_FOREACH(verb2, ucm->verbs) {
1876 ucm_create_mapping_for_modifier(ucm, ps, p, mod, verb_name, name, sink, true);
1878 ucm_create_mapping_for_modifier(ucm, ps, p, mod, verb_name, name, source, false);
1904 alib_prefix = context->ucm->alib_prefix;
1915 static snd_pcm_t* mapping_open_pcm(pa_alsa_ucm_config *ucm, pa_alsa_mapping *m, int mode) {
1917 pa_sample_spec try_ss = ucm->core->default_sample_spec;
1929 pa_usec_to_bytes(ucm->core->default_fragment_size_msec * PA_USEC_PER_MSEC, &try_ss) /
1931 try_buffer_size = ucm->core->default_n_fragments * try_period_size;
1996 static void ucm_probe_profile_set(pa_alsa_ucm_config *ucm, pa_alsa_profile_set *ps) {
2004 pa_log_info("Set ucm verb to %s", p->name);
2006 if ((snd_use_case_set(ucm->ucm_mgr, "_verb", p->name)) < 0) {
2019 m->output_pcm = mapping_open_pcm(ucm, m, SND_PCM_STREAM_PLAYBACK);
2034 m->input_pcm = mapping_open_pcm(ucm, m, SND_PCM_STREAM_CAPTURE);
2051 ucm_mapping_jack_probe(m, ucm->mixers);
2055 ucm_mapping_jack_probe(m, ucm->mixers);
2060 /* restore ucm state */
2061 snd_use_case_set(ucm->ucm_mgr, "_verb", SND_USE_CASE_VERB_INACTIVE);
2066 pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_channel_map *default_channel_map) {
2076 PA_LLIST_FOREACH(verb, ucm->verbs) {
2087 ucm_create_profile(ucm, ps, verb, verb_name, verb_desc);
2090 ucm_probe_profile_set(ucm, ps);
2157 void pa_alsa_ucm_free(pa_alsa_ucm_config *ucm) {
2161 PA_LLIST_FOREACH_SAFE(vi, vn, ucm->verbs) {
2162 PA_LLIST_REMOVE(pa_alsa_ucm_verb, ucm->verbs, vi);
2165 PA_LLIST_FOREACH_SAFE(ji, jn, ucm->jacks) {
2166 PA_LLIST_REMOVE(pa_alsa_jack, ucm->jacks, ji);
2169 if (ucm->ucm_mgr) {
2170 snd_use_case_mgr_close(ucm->ucm_mgr);
2171 ucm->ucm_mgr = NULL;
2173 pa_xfree(ucm->alib_prefix);
2174 ucm->alib_prefix = NULL;
2183 /* clear ucm device pointer to mapping */
2207 void pa_alsa_ucm_roled_stream_begin(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir) {
2210 if (!ucm->active_verb)
2213 PA_LLIST_FOREACH(mod, ucm->active_verb->modifiers) {
2218 pa_log_info("Enable ucm modifier %s", mod_name);
2219 if (snd_use_case_set(ucm->ucm_mgr, "_enamod", mod_name) < 0) {
2220 pa_log("Failed to enable ucm modifier %s", mod_name);
2231 void pa_alsa_ucm_roled_stream_end(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir) {
2234 if (!ucm->active_verb)
2237 PA_LLIST_FOREACH(mod, ucm->active_verb->modifiers) {
2244 pa_log_info("Disable ucm modifier %s", mod_name);
2245 if (snd_use_case_set(ucm->ucm_mgr, "_dismod", mod_name) < 0) {
2246 pa_log("Failed to disable ucm modifier %s", mod_name);
2317 static void ucm_port_data_init(pa_alsa_ucm_port_data *port, pa_alsa_ucm_config *ucm, pa_device_port *core_port,
2321 pa_assert(ucm);
2325 port->ucm = ucm;
2380 int pa_alsa_ucm_query_profiles(pa_alsa_ucm_config *ucm, int card_index) {
2385 pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_channel_map *default_channel_map) {
2389 int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile) {
2420 void pa_alsa_ucm_free(pa_alsa_ucm_config *ucm) {
2426 void pa_alsa_ucm_roled_stream_begin(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir) {
2429 void pa_alsa_ucm_roled_stream_end(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir) {