Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Update
alsa.4188
0080-topology-Add-C-API-support-for-BE-and-CC-L...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0080-topology-Add-C-API-support-for-BE-and-CC-Links.patch of Package alsa.4188
From 2286a6fd4de6e2eb4e16b50ceb253a9f934ae4b1 Mon Sep 17 00:00:00 2001 From: Vedang Patel <vedang.patel@intel.com> Date: Thu, 5 Nov 2015 20:49:23 +0800 Subject: [PATCH] topology: Add C API support for BE and CC Links. Adding BE and CC Link support for C API reference. This will be used to populate the .hw_params element for BE and .params for CC, enabling us to update already existing DAI Links created by the kernel. Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz> --- include/topology.h | 23 +++++++++++++++++++++++ src/topology/builder.c | 4 ++-- src/topology/parser.c | 3 +++ src/topology/pcm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/include/topology.h b/include/topology.h index 9b84bd9331dc..ccd69d7ae2d5 100644 --- a/include/topology.h +++ b/include/topology.h @@ -648,6 +648,28 @@ struct snd_tplg_widget_template { struct snd_tplg_ctl_template *ctl[0]; /*!< array of widget controls */ }; +/** \struct snd_tplg_stream_template + * \brief Stream configurations. + */ +struct snd_tplg_stream_template { + const char *name; /*!< name of the stream config */ + int format; /*!< SNDRV_PCM_FMTBIT_* */ + int rate; /*!< SNDRV_PCM_RATE_* */ + int period_bytes; /*!< size of period in bytes */ + int buffer_bytes; /*!< size of buffer in bytes. */ + int channels; /*!< number of channels */ +}; + +/** \struct snd_tplg_link_template + * \brief Template type for BE and CC DAI Links. + */ +struct snd_tplg_link_template { + const char *name; /*!< link name */ + int id; /*!< unique ID - used to match with existing BE and CC links */ + int num_streams; /*!< number of configs */ + struct snd_tplg_stream_template stream[0]; /*!< supported configs */ +}; + /** \struct snd_tplg_obj_template * \brief Generic Template Object */ @@ -662,6 +684,7 @@ typedef struct snd_tplg_obj_template { struct snd_tplg_bytes_template *bytes_ctl; /*!< Bytes control */ struct snd_tplg_enum_template *enum_ctl; /*!< Enum control */ struct snd_tplg_graph_template *graph; /*!< Graph elements */ + struct snd_tplg_link_template *link; /*!< BE and CC Links */ }; } snd_tplg_obj_template_t; diff --git a/src/topology/builder.c b/src/topology/builder.c index 8d57a8b719f7..154bd6302fe6 100644 --- a/src/topology/builder.c +++ b/src/topology/builder.c @@ -221,10 +221,10 @@ static int write_block(snd_tplg_t *tplg, struct list_head *base, SND_SOC_TPLG_TYPE_PCM, "pcm"); case SND_TPLG_TYPE_BE: return write_elem_block(tplg, base, size, - SND_SOC_TPLG_TYPE_DAI_LINK, "be"); + SND_SOC_TPLG_TYPE_BACKEND_LINK, "be"); case SND_TPLG_TYPE_CC: return write_elem_block(tplg, base, size, - SND_SOC_TPLG_TYPE_DAI_LINK, "cc"); + SND_SOC_TPLG_TYPE_CODEC_LINK, "cc"); case SND_TPLG_TYPE_DATA: return write_elem_block(tplg, base, size, SND_SOC_TPLG_TYPE_PDATA, "data"); diff --git a/src/topology/parser.c b/src/topology/parser.c index ab5ca1bc3780..1851459f44b6 100644 --- a/src/topology/parser.c +++ b/src/topology/parser.c @@ -311,6 +311,9 @@ int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) return tplg_add_widget_object(tplg, t); case SND_TPLG_TYPE_DAPM_GRAPH: return tplg_add_graph_object(tplg, t); + case SND_TPLG_TYPE_BE: + case SND_TPLG_TYPE_CC: + return tplg_add_link_object(tplg, t); default: SNDERR("error: invalid object type %d\n", t->type); return -EINVAL; diff --git a/src/topology/pcm.c b/src/topology/pcm.c index ec26f9c5a061..c2b2b9818ce0 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -480,3 +480,49 @@ int tplg_parse_cc(snd_tplg_t *tplg, return 0; } + +/* copy stream object */ +static void tplg_add_stream_object(struct snd_soc_tplg_stream *strm, + struct snd_tplg_stream_template *strm_tpl) +{ + elem_copy_text(strm->name, strm_tpl->name, + SNDRV_CTL_ELEM_ID_NAME_MAXLEN); + strm->format = strm_tpl->format; + strm->rate = strm_tpl->rate; + strm->period_bytes = strm_tpl->period_bytes; + strm->buffer_bytes = strm_tpl->buffer_bytes; + strm->channels = strm_tpl->channels; +} + +int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) +{ + struct snd_tplg_link_template *link = t->link; + struct snd_soc_tplg_link_config *lk; + struct tplg_elem *elem; + int i; + + if (t->type != SND_TPLG_TYPE_BE && t->type != SND_TPLG_TYPE_CC) + return -EINVAL; + + /* here type can be either BE or CC. */ + elem = tplg_elem_new_common(tplg, NULL, link->name, t->type); + if (!elem) + return -ENOMEM; + + if (t->type == SND_TPLG_TYPE_BE) { + tplg_dbg("BE Link: %s", link->name); + lk = elem->be; + } else { + tplg_dbg("CC Link: %s", link->name); + lk = elem->cc; + } + + lk->size = elem->size; + lk->id = link->id; + lk->num_streams = link->num_streams; + + for (i = 0; i < lk->num_streams; i++) + tplg_add_stream_object(&lk->stream[i], &link->stream[i]); + + return 0; +} -- 2.6.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor