ASoC: SOF: Use input/output pin consistently
Currently we use input/output and sink/source pins interchangeably. Remove the references to sink/source pins and replace with input/output pins everywhere for consistency and clarity. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20230313124856.8140-3-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>pull/795/merge
parent
3f738e4a12
commit
bb79f2a608
|
|
@ -88,14 +88,14 @@
|
|||
#define SOF_TKN_COMP_CPC 406
|
||||
#define SOF_TKN_COMP_IS_PAGES 409
|
||||
#define SOF_TKN_COMP_NUM_AUDIO_FORMATS 410
|
||||
#define SOF_TKN_COMP_NUM_SINK_PINS 411
|
||||
#define SOF_TKN_COMP_NUM_SOURCE_PINS 412
|
||||
#define SOF_TKN_COMP_NUM_INPUT_PINS 411
|
||||
#define SOF_TKN_COMP_NUM_OUTPUT_PINS 412
|
||||
/*
|
||||
* The token for sink/source pin binding, it specifies the widget
|
||||
* name that the sink/source pin is connected from/to.
|
||||
* The token for input/output pin binding, it specifies the widget
|
||||
* name that the input/output pin is connected from/to.
|
||||
*/
|
||||
#define SOF_TKN_COMP_SINK_PIN_BINDING_WNAME 413
|
||||
#define SOF_TKN_COMP_SRC_PIN_BINDING_WNAME 414
|
||||
#define SOF_TKN_COMP_INPUT_PIN_BINDING_WNAME 413
|
||||
#define SOF_TKN_COMP_OUTPUT_PIN_BINDING_WNAME 414
|
||||
|
||||
|
||||
/* SSP */
|
||||
|
|
|
|||
|
|
@ -1698,17 +1698,17 @@ static int sof_ipc4_get_queue_id(struct snd_sof_widget *src_widget,
|
|||
u32 num_pins;
|
||||
int i;
|
||||
|
||||
if (pin_type == SOF_PIN_TYPE_SOURCE) {
|
||||
if (pin_type == SOF_PIN_TYPE_OUTPUT) {
|
||||
current_swidget = src_widget;
|
||||
pin_binding = src_widget->src_pin_binding;
|
||||
queue_ida = &src_widget->src_queue_ida;
|
||||
num_pins = src_widget->num_source_pins;
|
||||
pin_binding = src_widget->output_pin_binding;
|
||||
queue_ida = &src_widget->output_queue_ida;
|
||||
num_pins = src_widget->num_output_pins;
|
||||
buddy_name = sink_widget->widget->name;
|
||||
} else {
|
||||
current_swidget = sink_widget;
|
||||
pin_binding = sink_widget->sink_pin_binding;
|
||||
queue_ida = &sink_widget->sink_queue_ida;
|
||||
num_pins = sink_widget->num_sink_pins;
|
||||
pin_binding = sink_widget->input_pin_binding;
|
||||
queue_ida = &sink_widget->input_queue_ida;
|
||||
num_pins = sink_widget->num_input_pins;
|
||||
buddy_name = src_widget->widget->name;
|
||||
}
|
||||
|
||||
|
|
@ -1716,12 +1716,12 @@ static int sof_ipc4_get_queue_id(struct snd_sof_widget *src_widget,
|
|||
|
||||
if (num_pins < 1) {
|
||||
dev_err(scomp->dev, "invalid %s num_pins: %d for queue allocation for %s\n",
|
||||
(pin_type == SOF_PIN_TYPE_SOURCE ? "source" : "sink"),
|
||||
(pin_type == SOF_PIN_TYPE_OUTPUT ? "output" : "input"),
|
||||
num_pins, current_swidget->widget->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* If there is only one sink/source pin, queue id must be 0 */
|
||||
/* If there is only one input/output pin, queue id must be 0 */
|
||||
if (num_pins == 1)
|
||||
return 0;
|
||||
|
||||
|
|
@ -1736,7 +1736,7 @@ static int sof_ipc4_get_queue_id(struct snd_sof_widget *src_widget,
|
|||
* mixed use pin binding array and ida for queue ID allocation.
|
||||
*/
|
||||
dev_err(scomp->dev, "no %s queue id found from pin binding array for %s\n",
|
||||
(pin_type == SOF_PIN_TYPE_SOURCE ? "source" : "sink"),
|
||||
(pin_type == SOF_PIN_TYPE_OUTPUT ? "output" : "input"),
|
||||
current_swidget->widget->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
@ -1752,14 +1752,14 @@ static void sof_ipc4_put_queue_id(struct snd_sof_widget *swidget, int queue_id,
|
|||
char **pin_binding;
|
||||
int num_pins;
|
||||
|
||||
if (pin_type == SOF_PIN_TYPE_SOURCE) {
|
||||
pin_binding = swidget->src_pin_binding;
|
||||
queue_ida = &swidget->src_queue_ida;
|
||||
num_pins = swidget->num_source_pins;
|
||||
if (pin_type == SOF_PIN_TYPE_OUTPUT) {
|
||||
pin_binding = swidget->output_pin_binding;
|
||||
queue_ida = &swidget->output_queue_ida;
|
||||
num_pins = swidget->num_output_pins;
|
||||
} else {
|
||||
pin_binding = swidget->sink_pin_binding;
|
||||
queue_ida = &swidget->sink_queue_ida;
|
||||
num_pins = swidget->num_sink_pins;
|
||||
pin_binding = swidget->input_pin_binding;
|
||||
queue_ida = &swidget->input_queue_ida;
|
||||
num_pins = swidget->num_input_pins;
|
||||
}
|
||||
|
||||
/* Nothing to free if queue ID is not allocated with ida. */
|
||||
|
|
@ -1829,7 +1829,7 @@ static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
|||
int ret;
|
||||
|
||||
sroute->src_queue_id = sof_ipc4_get_queue_id(src_widget, sink_widget,
|
||||
SOF_PIN_TYPE_SOURCE);
|
||||
SOF_PIN_TYPE_OUTPUT);
|
||||
if (sroute->src_queue_id < 0) {
|
||||
dev_err(sdev->dev, "failed to get queue ID for source widget: %s\n",
|
||||
src_widget->widget->name);
|
||||
|
|
@ -1837,12 +1837,12 @@ static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
|||
}
|
||||
|
||||
sroute->dst_queue_id = sof_ipc4_get_queue_id(src_widget, sink_widget,
|
||||
SOF_PIN_TYPE_SINK);
|
||||
SOF_PIN_TYPE_INPUT);
|
||||
if (sroute->dst_queue_id < 0) {
|
||||
dev_err(sdev->dev, "failed to get queue ID for sink widget: %s\n",
|
||||
sink_widget->widget->name);
|
||||
sof_ipc4_put_queue_id(src_widget, sroute->src_queue_id,
|
||||
SOF_PIN_TYPE_SOURCE);
|
||||
SOF_PIN_TYPE_OUTPUT);
|
||||
return sroute->dst_queue_id;
|
||||
}
|
||||
|
||||
|
|
@ -1886,8 +1886,8 @@ static int sof_ipc4_route_setup(struct snd_sof_dev *sdev, struct snd_sof_route *
|
|||
return ret;
|
||||
|
||||
out:
|
||||
sof_ipc4_put_queue_id(src_widget, sroute->src_queue_id, SOF_PIN_TYPE_SOURCE);
|
||||
sof_ipc4_put_queue_id(sink_widget, sroute->dst_queue_id, SOF_PIN_TYPE_SINK);
|
||||
sof_ipc4_put_queue_id(src_widget, sroute->src_queue_id, SOF_PIN_TYPE_OUTPUT);
|
||||
sof_ipc4_put_queue_id(sink_widget, sroute->dst_queue_id, SOF_PIN_TYPE_INPUT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -1932,8 +1932,8 @@ static int sof_ipc4_route_free(struct snd_sof_dev *sdev, struct snd_sof_route *s
|
|||
src_widget->widget->name, sroute->src_queue_id,
|
||||
sink_widget->widget->name, sroute->dst_queue_id);
|
||||
out:
|
||||
sof_ipc4_put_queue_id(sink_widget, sroute->dst_queue_id, SOF_PIN_TYPE_SINK);
|
||||
sof_ipc4_put_queue_id(src_widget, sroute->src_queue_id, SOF_PIN_TYPE_SOURCE);
|
||||
sof_ipc4_put_queue_id(sink_widget, sroute->dst_queue_id, SOF_PIN_TYPE_INPUT);
|
||||
sof_ipc4_put_queue_id(src_widget, sroute->src_queue_id, SOF_PIN_TYPE_OUTPUT);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,9 @@
|
|||
*/
|
||||
#define SOF_WIDGET_MAX_NUM_PINS 8
|
||||
|
||||
/* The type of a widget pin is either sink or source */
|
||||
#define SOF_PIN_TYPE_SINK 0
|
||||
#define SOF_PIN_TYPE_SOURCE 1
|
||||
/* Widget pin type */
|
||||
#define SOF_PIN_TYPE_INPUT 0
|
||||
#define SOF_PIN_TYPE_OUTPUT 1
|
||||
|
||||
/* max number of FE PCMs before BEs */
|
||||
#define SOF_BE_PCM_BASE 16
|
||||
|
|
@ -433,31 +433,31 @@ struct snd_sof_widget {
|
|||
struct snd_sof_tuple *tuples;
|
||||
|
||||
/*
|
||||
* The allowed range for num_sink/source_pins is [0, SOF_WIDGET_MAX_NUM_PINS].
|
||||
* Widgets may have zero sink or source pins, for example the tone widget has
|
||||
* zero sink pins.
|
||||
* The allowed range for num_input/output_pins is [0, SOF_WIDGET_MAX_NUM_PINS].
|
||||
* Widgets may have zero input or output pins, for example the tone widget has
|
||||
* zero input pins.
|
||||
*/
|
||||
u32 num_sink_pins;
|
||||
u32 num_source_pins;
|
||||
u32 num_input_pins;
|
||||
u32 num_output_pins;
|
||||
|
||||
/*
|
||||
* The sink/source pin binding array, it takes the form of
|
||||
* The input/output pin binding array, it takes the form of
|
||||
* [widget_name_connected_to_pin0, widget_name_connected_to_pin1, ...],
|
||||
* with the index as the queue ID.
|
||||
*
|
||||
* The array is used for special pin binding. Note that even if there
|
||||
* is only one sink/source pin requires special pin binding, pin binding
|
||||
* should be defined for all sink/source pins in topology, for pin(s) that
|
||||
* is only one input/output pin requires special pin binding, pin binding
|
||||
* should be defined for all input/output pins in topology, for pin(s) that
|
||||
* are not used, give the value "NotConnected".
|
||||
*
|
||||
* If pin binding is not defined in topology, nothing to parse in the kernel,
|
||||
* sink_pin_binding and src_pin_binding shall be NULL.
|
||||
* input_pin_binding and output_pin_binding shall be NULL.
|
||||
*/
|
||||
char **sink_pin_binding;
|
||||
char **src_pin_binding;
|
||||
char **input_pin_binding;
|
||||
char **output_pin_binding;
|
||||
|
||||
struct ida src_queue_ida;
|
||||
struct ida sink_queue_ida;
|
||||
struct ida output_queue_ida;
|
||||
struct ida input_queue_ida;
|
||||
|
||||
void *private; /* core does not touch this */
|
||||
};
|
||||
|
|
|
|||
|
|
@ -416,19 +416,19 @@ static const struct sof_topology_token led_tokens[] = {
|
|||
};
|
||||
|
||||
static const struct sof_topology_token comp_pin_tokens[] = {
|
||||
{SOF_TKN_COMP_NUM_SINK_PINS, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct snd_sof_widget, num_sink_pins)},
|
||||
{SOF_TKN_COMP_NUM_SOURCE_PINS, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct snd_sof_widget, num_source_pins)},
|
||||
{SOF_TKN_COMP_NUM_INPUT_PINS, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct snd_sof_widget, num_input_pins)},
|
||||
{SOF_TKN_COMP_NUM_OUTPUT_PINS, SND_SOC_TPLG_TUPLE_TYPE_WORD, get_token_u32,
|
||||
offsetof(struct snd_sof_widget, num_output_pins)},
|
||||
};
|
||||
|
||||
static const struct sof_topology_token comp_sink_pin_binding_tokens[] = {
|
||||
{SOF_TKN_COMP_SINK_PIN_BINDING_WNAME, SND_SOC_TPLG_TUPLE_TYPE_STRING,
|
||||
static const struct sof_topology_token comp_input_pin_binding_tokens[] = {
|
||||
{SOF_TKN_COMP_INPUT_PIN_BINDING_WNAME, SND_SOC_TPLG_TUPLE_TYPE_STRING,
|
||||
get_token_string, 0},
|
||||
};
|
||||
|
||||
static const struct sof_topology_token comp_src_pin_binding_tokens[] = {
|
||||
{SOF_TKN_COMP_SRC_PIN_BINDING_WNAME, SND_SOC_TPLG_TUPLE_TYPE_STRING,
|
||||
static const struct sof_topology_token comp_output_pin_binding_tokens[] = {
|
||||
{SOF_TKN_COMP_OUTPUT_PIN_BINDING_WNAME, SND_SOC_TPLG_TUPLE_TYPE_STRING,
|
||||
get_token_string, 0},
|
||||
};
|
||||
|
||||
|
|
@ -1286,12 +1286,12 @@ static void sof_free_pin_binding(struct snd_sof_widget *swidget,
|
|||
u32 num_pins;
|
||||
int i;
|
||||
|
||||
if (pin_type == SOF_PIN_TYPE_SINK) {
|
||||
pin_binding = swidget->sink_pin_binding;
|
||||
num_pins = swidget->num_sink_pins;
|
||||
if (pin_type == SOF_PIN_TYPE_INPUT) {
|
||||
pin_binding = swidget->input_pin_binding;
|
||||
num_pins = swidget->num_input_pins;
|
||||
} else {
|
||||
pin_binding = swidget->src_pin_binding;
|
||||
num_pins = swidget->num_source_pins;
|
||||
pin_binding = swidget->output_pin_binding;
|
||||
num_pins = swidget->num_output_pins;
|
||||
}
|
||||
|
||||
if (pin_binding) {
|
||||
|
|
@ -1313,14 +1313,14 @@ static int sof_parse_pin_binding(struct snd_sof_widget *swidget,
|
|||
int ret;
|
||||
int i;
|
||||
|
||||
if (pin_type == SOF_PIN_TYPE_SINK) {
|
||||
num_pins = swidget->num_sink_pins;
|
||||
pin_binding_token = comp_sink_pin_binding_tokens;
|
||||
token_count = ARRAY_SIZE(comp_sink_pin_binding_tokens);
|
||||
if (pin_type == SOF_PIN_TYPE_INPUT) {
|
||||
num_pins = swidget->num_input_pins;
|
||||
pin_binding_token = comp_input_pin_binding_tokens;
|
||||
token_count = ARRAY_SIZE(comp_input_pin_binding_tokens);
|
||||
} else {
|
||||
num_pins = swidget->num_source_pins;
|
||||
pin_binding_token = comp_src_pin_binding_tokens;
|
||||
token_count = ARRAY_SIZE(comp_src_pin_binding_tokens);
|
||||
num_pins = swidget->num_output_pins;
|
||||
pin_binding_token = comp_output_pin_binding_tokens;
|
||||
token_count = ARRAY_SIZE(comp_output_pin_binding_tokens);
|
||||
}
|
||||
|
||||
memset(pin_binding, 0, SOF_WIDGET_MAX_NUM_PINS * sizeof(char *));
|
||||
|
|
@ -1337,10 +1337,10 @@ static int sof_parse_pin_binding(struct snd_sof_widget *swidget,
|
|||
ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
if (pin_type == SOF_PIN_TYPE_SINK)
|
||||
swidget->sink_pin_binding = pb;
|
||||
if (pin_type == SOF_PIN_TYPE_INPUT)
|
||||
swidget->input_pin_binding = pb;
|
||||
else
|
||||
swidget->src_pin_binding = pb;
|
||||
swidget->output_pin_binding = pb;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1379,8 +1379,8 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
|
|||
swidget->private = NULL;
|
||||
mutex_init(&swidget->setup_mutex);
|
||||
|
||||
ida_init(&swidget->src_queue_ida);
|
||||
ida_init(&swidget->sink_queue_ida);
|
||||
ida_init(&swidget->output_queue_ida);
|
||||
ida_init(&swidget->input_queue_ida);
|
||||
|
||||
ret = sof_parse_tokens(scomp, swidget, comp_pin_tokens,
|
||||
ARRAY_SIZE(comp_pin_tokens), priv->array,
|
||||
|
|
@ -1391,29 +1391,29 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
|
|||
goto widget_free;
|
||||
}
|
||||
|
||||
if (swidget->num_sink_pins > SOF_WIDGET_MAX_NUM_PINS ||
|
||||
swidget->num_source_pins > SOF_WIDGET_MAX_NUM_PINS) {
|
||||
dev_err(scomp->dev, "invalid pins for %s: [sink: %d, src: %d]\n",
|
||||
swidget->widget->name, swidget->num_sink_pins, swidget->num_source_pins);
|
||||
if (swidget->num_input_pins > SOF_WIDGET_MAX_NUM_PINS ||
|
||||
swidget->num_output_pins > SOF_WIDGET_MAX_NUM_PINS) {
|
||||
dev_err(scomp->dev, "invalid pins for %s: [input: %d, output: %d]\n",
|
||||
swidget->widget->name, swidget->num_input_pins, swidget->num_output_pins);
|
||||
ret = -EINVAL;
|
||||
goto widget_free;
|
||||
}
|
||||
|
||||
if (swidget->num_sink_pins > 1) {
|
||||
ret = sof_parse_pin_binding(swidget, priv, SOF_PIN_TYPE_SINK);
|
||||
if (swidget->num_input_pins > 1) {
|
||||
ret = sof_parse_pin_binding(swidget, priv, SOF_PIN_TYPE_INPUT);
|
||||
/* on parsing error, pin binding is not allocated, nothing to free. */
|
||||
if (ret < 0) {
|
||||
dev_err(scomp->dev, "failed to parse sink pin binding for %s\n",
|
||||
dev_err(scomp->dev, "failed to parse input pin binding for %s\n",
|
||||
w->name);
|
||||
goto widget_free;
|
||||
}
|
||||
}
|
||||
|
||||
if (swidget->num_source_pins > 1) {
|
||||
ret = sof_parse_pin_binding(swidget, priv, SOF_PIN_TYPE_SOURCE);
|
||||
if (swidget->num_output_pins > 1) {
|
||||
ret = sof_parse_pin_binding(swidget, priv, SOF_PIN_TYPE_OUTPUT);
|
||||
/* on parsing error, pin binding is not allocated, nothing to free. */
|
||||
if (ret < 0) {
|
||||
dev_err(scomp->dev, "failed to parse source pin binding for %s\n",
|
||||
dev_err(scomp->dev, "failed to parse output pin binding for %s\n",
|
||||
w->name);
|
||||
goto widget_free;
|
||||
}
|
||||
|
|
@ -1422,7 +1422,7 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index,
|
|||
dev_dbg(scomp->dev,
|
||||
"tplg: widget %d (%s) is ready [type: %d, pipe: %d, pins: %d / %d, stream: %s]\n",
|
||||
swidget->comp_id, w->name, swidget->id, index,
|
||||
swidget->num_sink_pins, swidget->num_source_pins,
|
||||
swidget->num_input_pins, swidget->num_output_pins,
|
||||
strnlen(w->sname, SNDRV_CTL_ELEM_ID_NAME_MAXLEN) > 0 ? w->sname : "none");
|
||||
|
||||
widget_ops = tplg_ops ? tplg_ops->widget : NULL;
|
||||
|
|
@ -1643,11 +1643,11 @@ out:
|
|||
if (widget_ops && widget_ops[swidget->id].ipc_free)
|
||||
widget_ops[swidget->id].ipc_free(swidget);
|
||||
|
||||
ida_destroy(&swidget->src_queue_ida);
|
||||
ida_destroy(&swidget->sink_queue_ida);
|
||||
ida_destroy(&swidget->output_queue_ida);
|
||||
ida_destroy(&swidget->input_queue_ida);
|
||||
|
||||
sof_free_pin_binding(swidget, SOF_PIN_TYPE_SINK);
|
||||
sof_free_pin_binding(swidget, SOF_PIN_TYPE_SOURCE);
|
||||
sof_free_pin_binding(swidget, SOF_PIN_TYPE_INPUT);
|
||||
sof_free_pin_binding(swidget, SOF_PIN_TYPE_OUTPUT);
|
||||
|
||||
kfree(swidget->tuples);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue