While creating ports also set the card name. --- src/modules/alsa/alsa-mixer.c | 13 ++++++++----- src/modules/alsa/alsa-mixer.h | 2 +- src/modules/alsa/alsa-ucm.c | 14 +++++++++----- src/modules/alsa/alsa-ucm.h | 1 + src/modules/alsa/module-alsa-card.c | 12 ++++++------ src/modules/bluetooth/module-bluetooth-device.c | 6 ++++-- 6 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index be9ee4e..046ace0 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -4480,8 +4480,9 @@ void pa_alsa_profile_set_drop_unsupported(pa_alsa_profile_set *ps) { } static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ - const char* name, - const char* description, + const char *name, + const char *description, + const char *card_name, pa_alsa_path *path, pa_alsa_setting *setting, pa_card_profile *cp, @@ -4500,6 +4501,7 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ pa_device_port_new_data_init(&port_data); pa_device_port_new_data_set_name(&port_data, name); + pa_device_port_new_data_set_card_name(&port_data, card_name); pa_device_port_new_data_set_description(&port_data, description); pa_device_port_new_data_set_direction(&port_data, path->direction == PA_ALSA_DIRECTION_OUTPUT ? PA_DIRECTION_OUTPUT : PA_DIRECTION_INPUT); @@ -4528,6 +4530,7 @@ static pa_device_port* device_port_alsa_init(pa_hashmap *ports, /* card ports */ void pa_alsa_path_set_add_ports( pa_alsa_path_set *ps, + const char *card_name, pa_card_profile *cp, pa_hashmap *ports, /* card ports */ pa_hashmap *extra, /* sink/source ports */ @@ -4546,7 +4549,7 @@ void pa_alsa_path_set_add_ports( /* If there is no or just one setting we only need a * single entry */ pa_device_port *port = device_port_alsa_init(ports, path->name, - path->description, path, path->settings, cp, extra, core); + path->description, card_name, path, path->settings, cp, extra, core); port->priority = path->priority * 100; } else { @@ -4562,7 +4565,7 @@ void pa_alsa_path_set_add_ports( else d = pa_xstrdup(path->description); - port = device_port_alsa_init(ports, n, d, path, s, cp, extra, core); + port = device_port_alsa_init(ports, n, d, card_name, path, s, cp, extra, core); port->priority = path->priority * 100 + s->priority; pa_xfree(n); @@ -4585,7 +4588,7 @@ void pa_alsa_add_ports(void *sink_or_source_new_data, pa_alsa_path_set *ps, pa_c if (ps->paths && pa_hashmap_size(ps->paths) > 0) { pa_assert(card); - pa_alsa_path_set_add_ports(ps, NULL, card->ports, ports, card->core); + pa_alsa_path_set_add_ports(ps, card->name, NULL, card->ports, ports, card->core); } pa_log_debug("Added %u ports", pa_hashmap_size(ports)); diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h index 3d50ebb..442ac6b 100644 --- a/src/modules/alsa/alsa-mixer.h +++ b/src/modules/alsa/alsa-mixer.h @@ -351,6 +351,6 @@ struct pa_alsa_port_data { }; void pa_alsa_add_ports(void *sink_or_source_new_data, pa_alsa_path_set *ps, pa_card *card); -void pa_alsa_path_set_add_ports(pa_alsa_path_set *ps, pa_card_profile *cp, pa_hashmap *ports, pa_hashmap *extra, pa_core *core); +void pa_alsa_path_set_add_ports(pa_alsa_path_set *ps, const char *card_name, pa_card_profile *cp, pa_hashmap *ports, pa_hashmap *extra, pa_core *core); #endif diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c index 3b55e82..6904eb5 100644 --- a/src/modules/alsa/alsa-ucm.c +++ b/src/modules/alsa/alsa-ucm.c @@ -648,6 +648,7 @@ static void ucm_add_port_combination( pa_alsa_ucm_device **pdevices, int num, pa_hashmap *ports, + const char *card_name, pa_card_profile *cp, pa_core *core) { @@ -693,6 +694,7 @@ static void ucm_add_port_combination( pa_device_port_new_data_init(&port_data); pa_device_port_new_data_set_name(&port_data, name); pa_device_port_new_data_set_description(&port_data, desc); + pa_device_port_new_data_set_card_name(&port_data, card_name); pa_device_port_new_data_set_direction(&port_data, is_sink ? PA_DIRECTION_OUTPUT : PA_DIRECTION_INPUT); port = pa_device_port_new(core, &port_data, 0); @@ -807,6 +809,7 @@ static void ucm_add_ports_combination( int dev_num, uint32_t map_index, pa_hashmap *ports, + const char *card_name, pa_card_profile *cp, pa_core *core) { @@ -821,13 +824,13 @@ static void ucm_add_ports_combination( /* add device at map_index to devices combination */ pdevices[dev_num] = dev; /* add current devices combination as a new port */ - ucm_add_port_combination(hash, context, is_sink, pdevices, dev_num + 1, ports, cp, core); + ucm_add_port_combination(hash, context, is_sink, pdevices, dev_num + 1, ports, card_name, cp, core); /* try more elements combination */ - ucm_add_ports_combination(hash, context, is_sink, pdevices, dev_num + 1, idx, ports, cp, core); + ucm_add_ports_combination(hash, context, is_sink, pdevices, dev_num + 1, idx, ports, card_name, cp, core); } /* try other device with current elements number */ - ucm_add_ports_combination(hash, context, is_sink, pdevices, dev_num, idx, ports, cp, core); + ucm_add_ports_combination(hash, context, is_sink, pdevices, dev_num, idx, ports, card_name, cp, core); } static char* merge_roles(const char *cur, const char *add) { @@ -864,6 +867,7 @@ void pa_alsa_ucm_add_ports_combination( pa_alsa_ucm_mapping_context *context, bool is_sink, pa_hashmap *ports, + const char *card_name, pa_card_profile *cp, pa_core *core) { @@ -873,7 +877,7 @@ void pa_alsa_ucm_add_ports_combination( if (pa_idxset_size(context->ucm_devices) > 0) { pdevices = pa_xnew(pa_alsa_ucm_device *, pa_idxset_size(context->ucm_devices)); - ucm_add_ports_combination(p, context, is_sink, pdevices, 0, PA_IDXSET_INVALID, ports, cp, core); + ucm_add_ports_combination(p, context, is_sink, pdevices, 0, PA_IDXSET_INVALID, ports, card_name, cp, core); pa_xfree(pdevices); } } @@ -896,7 +900,7 @@ void pa_alsa_ucm_add_ports( pa_assert(*p); /* add ports first */ - pa_alsa_ucm_add_ports_combination(*p, context, is_sink, card->ports, NULL, card->core); + pa_alsa_ucm_add_ports_combination(*p, context, is_sink, card->ports, card->name, NULL, card->core); /* then set property PA_PROP_DEVICE_INTENDED_ROLES */ merged_roles = pa_xstrdup(pa_proplist_gets(proplist, PA_PROP_DEVICE_INTENDED_ROLES)); diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h index cdeb469..556130b 100644 --- a/src/modules/alsa/alsa-ucm.h +++ b/src/modules/alsa/alsa-ucm.h @@ -99,6 +99,7 @@ void pa_alsa_ucm_add_ports_combination( pa_alsa_ucm_mapping_context *context, bool is_sink, pa_hashmap *ports, + const char *card_name, pa_card_profile *cp, pa_core *core); int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *port, bool is_sink); diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c index 2529c0d..96156e4 100644 --- a/src/modules/alsa/module-alsa-card.c +++ b/src/modules/alsa/module-alsa-card.c @@ -137,7 +137,7 @@ struct profile_data { pa_alsa_profile *profile; }; -static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) { +static void add_profiles(struct userdata *u, const char *card_name, pa_hashmap *h, pa_hashmap *ports) { pa_alsa_profile *ap; void *state; @@ -158,9 +158,9 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) { PA_IDXSET_FOREACH(m, ap->output_mappings, idx) { if (u->use_ucm) - pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, TRUE, ports, cp, u->core); + pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, TRUE, ports, card_name, cp, u->core); else - pa_alsa_path_set_add_ports(m->output_path_set, cp, ports, NULL, u->core); + pa_alsa_path_set_add_ports(m->output_path_set, card_name, cp, ports, NULL, u->core); if (m->channel_map.channels > cp->max_sink_channels) cp->max_sink_channels = m->channel_map.channels; } @@ -171,9 +171,9 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) { PA_IDXSET_FOREACH(m, ap->input_mappings, idx) { if (u->use_ucm) - pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, FALSE, ports, cp, u->core); + pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, FALSE, ports, card_name, cp, u->core); else - pa_alsa_path_set_add_ports(m->input_path_set, cp, ports, NULL, u->core); + pa_alsa_path_set_add_ports(m->input_path_set, card_name, cp, ports, NULL, u->core); if (m->channel_map.channels > cp->max_source_channels) cp->max_source_channels = m->channel_map.channels; } @@ -720,7 +720,7 @@ int pa__init(pa_module *m) { if ((description = pa_proplist_gets(data.proplist, PA_PROP_DEVICE_DESCRIPTION))) pa_reserve_wrapper_set_application_device_name(reserve, description); - add_profiles(u, data.profiles, data.ports); + add_profiles(u, data.name, data.profiles, data.ports); if (pa_hashmap_isempty(data.profiles)) { pa_log("Failed to find a working profile."); diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c index cd0a515..78c05ef 100644 --- a/src/modules/bluetooth/module-bluetooth-device.c +++ b/src/modules/bluetooth/module-bluetooth-device.c @@ -2068,7 +2068,7 @@ off: } /* Run from main thread */ -static void create_card_ports(struct userdata *u, pa_hashmap *ports) { +static void create_card_ports(struct userdata *u, const char *card_name, pa_hashmap *ports) { pa_device_port *port; pa_device_port_new_data port_data; @@ -2145,6 +2145,7 @@ static void create_card_ports(struct userdata *u, pa_hashmap *ports) { pa_device_port_new_data_init(&port_data); pa_device_port_new_data_set_name(&port_data, u->output_port_name); pa_device_port_new_data_set_description(&port_data, output_description); + pa_device_port_new_data_set_card_name(&port_data, card_name); pa_device_port_new_data_set_direction(&port_data, PA_DIRECTION_OUTPUT); pa_device_port_new_data_set_available(&port_data, get_port_availability(u, PA_DIRECTION_OUTPUT)); pa_assert_se(port = pa_device_port_new(u->core, &port_data, 0)); @@ -2154,6 +2155,7 @@ static void create_card_ports(struct userdata *u, pa_hashmap *ports) { pa_device_port_new_data_init(&port_data); pa_device_port_new_data_set_name(&port_data, u->input_port_name); pa_device_port_new_data_set_description(&port_data, output_description); + pa_device_port_new_data_set_card_name(&port_data, card_name); pa_device_port_new_data_set_direction(&port_data, PA_DIRECTION_INPUT); pa_device_port_new_data_set_available(&port_data, get_port_availability(u, PA_DIRECTION_INPUT)); pa_assert_se(port = pa_device_port_new(u->core, &port_data, 0)); @@ -2276,7 +2278,7 @@ static int add_card(struct userdata *u) { pa_assert(!pa_hashmap_isempty(data.profiles)); - create_card_ports(u, data.ports); + create_card_ports(u, data.name, data.ports); p = pa_card_profile_new("off", _("Off"), sizeof(enum profile)); p->available = PA_AVAILABLE_YES; -- 1.8.2.1