}
EXPORT_SYMBOL_NS(sdca_asoc_count_component, "SND_SOC_SDCA");
-static const char *get_terminal_name(enum sdca_terminal_type type)
-{
- switch (type) {
- case SDCA_TERM_TYPE_LINEIN_STEREO:
- return SDCA_TERM_TYPE_LINEIN_STEREO_NAME;
- case SDCA_TERM_TYPE_LINEIN_FRONT_LR:
- return SDCA_TERM_TYPE_LINEIN_FRONT_LR_NAME;
- case SDCA_TERM_TYPE_LINEIN_CENTER_LFE:
- return SDCA_TERM_TYPE_LINEIN_CENTER_LFE_NAME;
- case SDCA_TERM_TYPE_LINEIN_SURROUND_LR:
- return SDCA_TERM_TYPE_LINEIN_SURROUND_LR_NAME;
- case SDCA_TERM_TYPE_LINEIN_REAR_LR:
- return SDCA_TERM_TYPE_LINEIN_REAR_LR_NAME;
- case SDCA_TERM_TYPE_LINEOUT_STEREO:
- return SDCA_TERM_TYPE_LINEOUT_STEREO_NAME;
- case SDCA_TERM_TYPE_LINEOUT_FRONT_LR:
- return SDCA_TERM_TYPE_LINEOUT_FRONT_LR_NAME;
- case SDCA_TERM_TYPE_LINEOUT_CENTER_LFE:
- return SDCA_TERM_TYPE_LINEOUT_CENTER_LFE_NAME;
- case SDCA_TERM_TYPE_LINEOUT_SURROUND_LR:
- return SDCA_TERM_TYPE_LINEOUT_SURROUND_LR_NAME;
- case SDCA_TERM_TYPE_LINEOUT_REAR_LR:
- return SDCA_TERM_TYPE_LINEOUT_REAR_LR_NAME;
- case SDCA_TERM_TYPE_MIC_JACK:
- return SDCA_TERM_TYPE_MIC_JACK_NAME;
- case SDCA_TERM_TYPE_STEREO_JACK:
- return SDCA_TERM_TYPE_STEREO_JACK_NAME;
- case SDCA_TERM_TYPE_FRONT_LR_JACK:
- return SDCA_TERM_TYPE_FRONT_LR_JACK_NAME;
- case SDCA_TERM_TYPE_CENTER_LFE_JACK:
- return SDCA_TERM_TYPE_CENTER_LFE_JACK_NAME;
- case SDCA_TERM_TYPE_SURROUND_LR_JACK:
- return SDCA_TERM_TYPE_SURROUND_LR_JACK_NAME;
- case SDCA_TERM_TYPE_REAR_LR_JACK:
- return SDCA_TERM_TYPE_REAR_LR_JACK_NAME;
- case SDCA_TERM_TYPE_HEADPHONE_JACK:
- return SDCA_TERM_TYPE_HEADPHONE_JACK_NAME;
- case SDCA_TERM_TYPE_HEADSET_JACK:
- return SDCA_TERM_TYPE_HEADSET_JACK_NAME;
- default:
- return NULL;
- }
-}
-
static int entity_early_parse_ge(struct device *dev,
struct sdca_function_data *function,
struct sdca_entity *entity)
type = sdca_range(range, SDCA_SELECTED_MODE_TERM_TYPE, i);
values[i + 3] = sdca_range(range, SDCA_SELECTED_MODE_INDEX, i);
- texts[i + 3] = get_terminal_name(type);
+ texts[i + 3] = sdca_find_terminal_name(type);
if (!texts[i + 3]) {
dev_err(dev, "%s: unrecognised terminal type: %#x\n",
entity->label, type);
return -EINVAL;
}
- add_route(route, entity->label, get_terminal_name(term),
+ add_route(route, entity->label, sdca_find_terminal_name(term),
entity->sources[affected->val - 1]->label);
}
}
#include <linux/module.h>
#include <linux/property.h>
#include <linux/soundwire/sdw.h>
+#include <linux/string.h>
#include <linux/types.h>
#include <sound/sdca.h>
#include <sound/sdca_function.h>
terminal->type = tmp;
terminal->is_dataport = find_sdca_iot_dataport(terminal);
+ if (!terminal->is_dataport) {
+ const char *type_name = sdca_find_terminal_name(terminal->type);
+
+ if (type_name)
+ entity->label = devm_kasprintf(dev, GFP_KERNEL, "%s %s",
+ entity->label, type_name);
+ }
+
ret = fwnode_property_read_u32(entity_node,
"mipi-sdca-terminal-reference-number", &tmp);
if (!ret)
for (i = 0; i < function->num_entities; i++) {
struct sdca_entity *entity = &function->entities[i];
- if (!strcmp(entity->label, entity_label))
+ if (!strncmp(entity->label, entity_label, strlen(entity_label)))
return entity;
}
}
EXPORT_SYMBOL_NS(sdca_parse_function, "SND_SOC_SDCA");
+const char *sdca_find_terminal_name(enum sdca_terminal_type type)
+{
+ switch (type) {
+ case SDCA_TERM_TYPE_LINEIN_STEREO:
+ return SDCA_TERM_TYPE_LINEIN_STEREO_NAME;
+ case SDCA_TERM_TYPE_LINEIN_FRONT_LR:
+ return SDCA_TERM_TYPE_LINEIN_FRONT_LR_NAME;
+ case SDCA_TERM_TYPE_LINEIN_CENTER_LFE:
+ return SDCA_TERM_TYPE_LINEIN_CENTER_LFE_NAME;
+ case SDCA_TERM_TYPE_LINEIN_SURROUND_LR:
+ return SDCA_TERM_TYPE_LINEIN_SURROUND_LR_NAME;
+ case SDCA_TERM_TYPE_LINEIN_REAR_LR:
+ return SDCA_TERM_TYPE_LINEIN_REAR_LR_NAME;
+ case SDCA_TERM_TYPE_LINEOUT_STEREO:
+ return SDCA_TERM_TYPE_LINEOUT_STEREO_NAME;
+ case SDCA_TERM_TYPE_LINEOUT_FRONT_LR:
+ return SDCA_TERM_TYPE_LINEOUT_FRONT_LR_NAME;
+ case SDCA_TERM_TYPE_LINEOUT_CENTER_LFE:
+ return SDCA_TERM_TYPE_LINEOUT_CENTER_LFE_NAME;
+ case SDCA_TERM_TYPE_LINEOUT_SURROUND_LR:
+ return SDCA_TERM_TYPE_LINEOUT_SURROUND_LR_NAME;
+ case SDCA_TERM_TYPE_LINEOUT_REAR_LR:
+ return SDCA_TERM_TYPE_LINEOUT_REAR_LR_NAME;
+ case SDCA_TERM_TYPE_MIC_JACK:
+ return SDCA_TERM_TYPE_MIC_JACK_NAME;
+ case SDCA_TERM_TYPE_STEREO_JACK:
+ return SDCA_TERM_TYPE_STEREO_JACK_NAME;
+ case SDCA_TERM_TYPE_FRONT_LR_JACK:
+ return SDCA_TERM_TYPE_FRONT_LR_JACK_NAME;
+ case SDCA_TERM_TYPE_CENTER_LFE_JACK:
+ return SDCA_TERM_TYPE_CENTER_LFE_JACK_NAME;
+ case SDCA_TERM_TYPE_SURROUND_LR_JACK:
+ return SDCA_TERM_TYPE_SURROUND_LR_JACK_NAME;
+ case SDCA_TERM_TYPE_REAR_LR_JACK:
+ return SDCA_TERM_TYPE_REAR_LR_JACK_NAME;
+ case SDCA_TERM_TYPE_HEADPHONE_JACK:
+ return SDCA_TERM_TYPE_HEADPHONE_JACK_NAME;
+ case SDCA_TERM_TYPE_HEADSET_JACK:
+ return SDCA_TERM_TYPE_HEADSET_JACK_NAME;
+ default:
+ return NULL;
+ }
+}
+EXPORT_SYMBOL_NS(sdca_find_terminal_name, "SND_SOC_SDCA");
+
struct sdca_control *sdca_selector_find_control(struct device *dev,
struct sdca_entity *entity,
const int sel)