Skip to content

Commit 48fa77a

Browse files
charleskeepaxbroonie
authored andcommitted
ASoC: SDCA: Add terminal type into input/output widget name
There have been some complaints around the UCM files for SDCA devices that the control system is quite hard to follow. This is definitely true without the specification handy the naming can be a little cryptic. However, as most of the information is parsed from DisCo there are some limits to what the driver can safely do to improve this. However, one area that can be improved is the non-streaming input/output terminals. These have a field (enum sdca_terminal_type) that describes the usage of that terminal. These types can be appended to the entity name to give the users a better clue as to the purpose. For example "OT 43", would now become "OT 43 Headphone". This would follow through into the jack controls which would change from "OT 43 Jack" to "OT 43 Headphone Jack", making the purpose much more obvious to the user. This provides slightly more readable controls without relying on implicit knowledge that individual parts might not conform to. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20251127163426.2500633-3-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 5fee9ed commit 48fa77a

3 files changed

Lines changed: 59 additions & 47 deletions

File tree

include/sound/sdca_function.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,6 +1456,8 @@ int sdca_parse_function(struct device *dev, struct sdw_slave *sdw,
14561456
struct sdca_function_desc *desc,
14571457
struct sdca_function_data *function);
14581458

1459+
const char *sdca_find_terminal_name(enum sdca_terminal_type type);
1460+
14591461
struct sdca_control *sdca_selector_find_control(struct device *dev,
14601462
struct sdca_entity *entity,
14611463
const int sel);

sound/soc/sdca/sdca_asoc.c

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -115,50 +115,6 @@ int sdca_asoc_count_component(struct device *dev, struct sdca_function_data *fun
115115
}
116116
EXPORT_SYMBOL_NS(sdca_asoc_count_component, "SND_SOC_SDCA");
117117

118-
static const char *get_terminal_name(enum sdca_terminal_type type)
119-
{
120-
switch (type) {
121-
case SDCA_TERM_TYPE_LINEIN_STEREO:
122-
return SDCA_TERM_TYPE_LINEIN_STEREO_NAME;
123-
case SDCA_TERM_TYPE_LINEIN_FRONT_LR:
124-
return SDCA_TERM_TYPE_LINEIN_FRONT_LR_NAME;
125-
case SDCA_TERM_TYPE_LINEIN_CENTER_LFE:
126-
return SDCA_TERM_TYPE_LINEIN_CENTER_LFE_NAME;
127-
case SDCA_TERM_TYPE_LINEIN_SURROUND_LR:
128-
return SDCA_TERM_TYPE_LINEIN_SURROUND_LR_NAME;
129-
case SDCA_TERM_TYPE_LINEIN_REAR_LR:
130-
return SDCA_TERM_TYPE_LINEIN_REAR_LR_NAME;
131-
case SDCA_TERM_TYPE_LINEOUT_STEREO:
132-
return SDCA_TERM_TYPE_LINEOUT_STEREO_NAME;
133-
case SDCA_TERM_TYPE_LINEOUT_FRONT_LR:
134-
return SDCA_TERM_TYPE_LINEOUT_FRONT_LR_NAME;
135-
case SDCA_TERM_TYPE_LINEOUT_CENTER_LFE:
136-
return SDCA_TERM_TYPE_LINEOUT_CENTER_LFE_NAME;
137-
case SDCA_TERM_TYPE_LINEOUT_SURROUND_LR:
138-
return SDCA_TERM_TYPE_LINEOUT_SURROUND_LR_NAME;
139-
case SDCA_TERM_TYPE_LINEOUT_REAR_LR:
140-
return SDCA_TERM_TYPE_LINEOUT_REAR_LR_NAME;
141-
case SDCA_TERM_TYPE_MIC_JACK:
142-
return SDCA_TERM_TYPE_MIC_JACK_NAME;
143-
case SDCA_TERM_TYPE_STEREO_JACK:
144-
return SDCA_TERM_TYPE_STEREO_JACK_NAME;
145-
case SDCA_TERM_TYPE_FRONT_LR_JACK:
146-
return SDCA_TERM_TYPE_FRONT_LR_JACK_NAME;
147-
case SDCA_TERM_TYPE_CENTER_LFE_JACK:
148-
return SDCA_TERM_TYPE_CENTER_LFE_JACK_NAME;
149-
case SDCA_TERM_TYPE_SURROUND_LR_JACK:
150-
return SDCA_TERM_TYPE_SURROUND_LR_JACK_NAME;
151-
case SDCA_TERM_TYPE_REAR_LR_JACK:
152-
return SDCA_TERM_TYPE_REAR_LR_JACK_NAME;
153-
case SDCA_TERM_TYPE_HEADPHONE_JACK:
154-
return SDCA_TERM_TYPE_HEADPHONE_JACK_NAME;
155-
case SDCA_TERM_TYPE_HEADSET_JACK:
156-
return SDCA_TERM_TYPE_HEADSET_JACK_NAME;
157-
default:
158-
return NULL;
159-
}
160-
}
161-
162118
static int entity_early_parse_ge(struct device *dev,
163119
struct sdca_function_data *function,
164120
struct sdca_entity *entity)
@@ -217,7 +173,7 @@ static int entity_early_parse_ge(struct device *dev,
217173
type = sdca_range(range, SDCA_SELECTED_MODE_TERM_TYPE, i);
218174

219175
values[i + 3] = sdca_range(range, SDCA_SELECTED_MODE_INDEX, i);
220-
texts[i + 3] = get_terminal_name(type);
176+
texts[i + 3] = sdca_find_terminal_name(type);
221177
if (!texts[i + 3]) {
222178
dev_err(dev, "%s: unrecognised terminal type: %#x\n",
223179
entity->label, type);
@@ -499,7 +455,7 @@ static int entity_parse_su_device(struct device *dev,
499455
return -EINVAL;
500456
}
501457

502-
add_route(route, entity->label, get_terminal_name(term),
458+
add_route(route, entity->label, sdca_find_terminal_name(term),
503459
entity->sources[affected->val - 1]->label);
504460
}
505461
}

sound/soc/sdca/sdca_functions.c

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <linux/module.h>
1515
#include <linux/property.h>
1616
#include <linux/soundwire/sdw.h>
17+
#include <linux/string.h>
1718
#include <linux/types.h>
1819
#include <sound/sdca.h>
1920
#include <sound/sdca_function.h>
@@ -1120,6 +1121,14 @@ static int find_sdca_entity_iot(struct device *dev,
11201121
terminal->type = tmp;
11211122
terminal->is_dataport = find_sdca_iot_dataport(terminal);
11221123

1124+
if (!terminal->is_dataport) {
1125+
const char *type_name = sdca_find_terminal_name(terminal->type);
1126+
1127+
if (type_name)
1128+
entity->label = devm_kasprintf(dev, GFP_KERNEL, "%s %s",
1129+
entity->label, type_name);
1130+
}
1131+
11231132
ret = fwnode_property_read_u32(entity_node,
11241133
"mipi-sdca-terminal-reference-number", &tmp);
11251134
if (!ret)
@@ -1565,7 +1574,7 @@ static struct sdca_entity *find_sdca_entity_by_label(struct sdca_function_data *
15651574
for (i = 0; i < function->num_entities; i++) {
15661575
struct sdca_entity *entity = &function->entities[i];
15671576

1568-
if (!strcmp(entity->label, entity_label))
1577+
if (!strncmp(entity->label, entity_label, strlen(entity_label)))
15691578
return entity;
15701579
}
15711580

@@ -2156,6 +2165,51 @@ int sdca_parse_function(struct device *dev, struct sdw_slave *sdw,
21562165
}
21572166
EXPORT_SYMBOL_NS(sdca_parse_function, "SND_SOC_SDCA");
21582167

2168+
const char *sdca_find_terminal_name(enum sdca_terminal_type type)
2169+
{
2170+
switch (type) {
2171+
case SDCA_TERM_TYPE_LINEIN_STEREO:
2172+
return SDCA_TERM_TYPE_LINEIN_STEREO_NAME;
2173+
case SDCA_TERM_TYPE_LINEIN_FRONT_LR:
2174+
return SDCA_TERM_TYPE_LINEIN_FRONT_LR_NAME;
2175+
case SDCA_TERM_TYPE_LINEIN_CENTER_LFE:
2176+
return SDCA_TERM_TYPE_LINEIN_CENTER_LFE_NAME;
2177+
case SDCA_TERM_TYPE_LINEIN_SURROUND_LR:
2178+
return SDCA_TERM_TYPE_LINEIN_SURROUND_LR_NAME;
2179+
case SDCA_TERM_TYPE_LINEIN_REAR_LR:
2180+
return SDCA_TERM_TYPE_LINEIN_REAR_LR_NAME;
2181+
case SDCA_TERM_TYPE_LINEOUT_STEREO:
2182+
return SDCA_TERM_TYPE_LINEOUT_STEREO_NAME;
2183+
case SDCA_TERM_TYPE_LINEOUT_FRONT_LR:
2184+
return SDCA_TERM_TYPE_LINEOUT_FRONT_LR_NAME;
2185+
case SDCA_TERM_TYPE_LINEOUT_CENTER_LFE:
2186+
return SDCA_TERM_TYPE_LINEOUT_CENTER_LFE_NAME;
2187+
case SDCA_TERM_TYPE_LINEOUT_SURROUND_LR:
2188+
return SDCA_TERM_TYPE_LINEOUT_SURROUND_LR_NAME;
2189+
case SDCA_TERM_TYPE_LINEOUT_REAR_LR:
2190+
return SDCA_TERM_TYPE_LINEOUT_REAR_LR_NAME;
2191+
case SDCA_TERM_TYPE_MIC_JACK:
2192+
return SDCA_TERM_TYPE_MIC_JACK_NAME;
2193+
case SDCA_TERM_TYPE_STEREO_JACK:
2194+
return SDCA_TERM_TYPE_STEREO_JACK_NAME;
2195+
case SDCA_TERM_TYPE_FRONT_LR_JACK:
2196+
return SDCA_TERM_TYPE_FRONT_LR_JACK_NAME;
2197+
case SDCA_TERM_TYPE_CENTER_LFE_JACK:
2198+
return SDCA_TERM_TYPE_CENTER_LFE_JACK_NAME;
2199+
case SDCA_TERM_TYPE_SURROUND_LR_JACK:
2200+
return SDCA_TERM_TYPE_SURROUND_LR_JACK_NAME;
2201+
case SDCA_TERM_TYPE_REAR_LR_JACK:
2202+
return SDCA_TERM_TYPE_REAR_LR_JACK_NAME;
2203+
case SDCA_TERM_TYPE_HEADPHONE_JACK:
2204+
return SDCA_TERM_TYPE_HEADPHONE_JACK_NAME;
2205+
case SDCA_TERM_TYPE_HEADSET_JACK:
2206+
return SDCA_TERM_TYPE_HEADSET_JACK_NAME;
2207+
default:
2208+
return NULL;
2209+
}
2210+
}
2211+
EXPORT_SYMBOL_NS(sdca_find_terminal_name, "SND_SOC_SDCA");
2212+
21592213
struct sdca_control *sdca_selector_find_control(struct device *dev,
21602214
struct sdca_entity *entity,
21612215
const int sel)

0 commit comments

Comments
 (0)