[alsa-devel] [PATCH 0/6] topology: Updates for PCM object in ABI v5
From: Mengdong Lin mengdong.lin@linux.intel.com
These ABI updates for PCM have just been applied to ASoC kernel. And kernel can handle the PCM ABI updates in a backward compatible way.
So we update the user space code for PCM now.
The updates for physical DAI link and DAIs will come later after their kernel updates be applied at first.
Mengdong Lin (6): topology: ABI - Update stream caps and PCM objects to ABI v5 topology: Parse sig_bits of stream caps topology: Parse flags for PCM topology: Define a function to build a single PCM element topology: Parse and build private data for PCM topology: tplg_elem_lookup() checks parameter before searching
include/sound/asoc.h | 9 ++++ include/topology.h | 11 +++++ src/topology/elem.c | 3 ++ src/topology/parser.c | 2 +- src/topology/pcm.c | 120 ++++++++++++++++++++++++++++++++++++++++++++-- src/topology/tplg_local.h | 2 +- 6 files changed, 140 insertions(+), 7 deletions(-)
From: Mengdong Lin mengdong.lin@linux.intel.com
Here are the ABI updates for PCM (Front DAI & DAI link) objects:
- add sig_bits to stream caps. - add flags and private data to PCM.
The kernel can handle the ABI update in a backward compatible way with the patch "ASoC: topology: Make PCM backward compatible from ABI v4".
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/sound/asoc.h b/include/sound/asoc.h index abe49c5..1f2c230 100644 --- a/include/sound/asoc.h +++ b/include/sound/asoc.h @@ -115,6 +115,11 @@ #define SND_SOC_TPLG_TUPLE_TYPE_WORD 4 #define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5
+/* DAI link flags */ +#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0) +#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1) +#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2) + /* * Block Header. * This header precedes all object and object arrays below. @@ -242,6 +247,7 @@ struct snd_soc_tplg_stream_caps { __le32 period_size_max; /* max period size bytes */ __le32 buffer_size_min; /* min buffer size bytes */ __le32 buffer_size_max; /* max buffer size bytes */ + __le32 sig_bits; /* number of bits of content */ } __attribute__((packed));
/* @@ -422,6 +428,9 @@ struct snd_soc_tplg_pcm { struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */ __le32 num_streams; /* number of streams */ struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */ + __le32 flag_mask; /* bitmask of flags to configure */ + __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */ + struct snd_soc_tplg_private priv; } __attribute__((packed));
From: Mengdong Lin mengdong.lin@linux.intel.com
Add sig_bits to stream caps template of C API and parse it.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/topology.h b/include/topology.h index 0675b52..ccd8401 100644 --- a/include/topology.h +++ b/include/topology.h @@ -848,6 +848,7 @@ struct snd_tplg_stream_caps_template { unsigned int period_size_max; /*!< max period size bytes */ unsigned int buffer_size_min; /*!< min buffer size bytes */ unsigned int buffer_size_max; /*!< max buffer size bytes */ + unsigned int sig_bits; /*!< number of bits of content */ };
/** \struct snd_tplg_pcm_template diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 0a90cb9..6fdf047 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -572,6 +572,7 @@ static void tplg_add_stream_caps(struct snd_soc_tplg_stream_caps *caps, caps->period_size_max = caps_tpl->period_size_max; caps->buffer_size_min = caps_tpl->buffer_size_min; caps->buffer_size_max = caps_tpl->buffer_size_max; + caps->sig_bits = caps_tpl->sig_bits; }
int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
From: Mengdong Lin mengdong.lin@linux.intel.com
Users can define flags by both text conf file and C API. Add flags and flag_mask to C API template of PCM object.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/topology.h b/include/topology.h index ccd8401..b6a6f19 100644 --- a/include/topology.h +++ b/include/topology.h @@ -606,6 +606,11 @@ extern "C" { * "config3" * ] * } + * + * # Optional boolean flags + * symmetric_rates "true" + * symmetric_channels "true" + * symmetric_sample_bits "false" * } * </pre> * @@ -863,6 +868,8 @@ struct snd_tplg_pcm_template { unsigned int capture; /*!< supports capture mode */ unsigned int compress; /*!< 1 = compressed; 0 = PCM */ struct snd_tplg_stream_caps_template *caps[2]; /*!< playback & capture for DAI */ + unsigned int flag_mask; /*!< bitmask of flags to configure */ + unsigned int flags; /*!< flag value SND_SOC_TPLG_LNK_FLGBIT_* */ int num_streams; /*!< number of supported configs */ struct snd_tplg_stream_template stream[0]; /*!< supported configs */ }; diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 6fdf047..bd70dc9 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -364,6 +364,24 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED, return 0; }
+/* parse a flag bit of the given mask */ +static int parse_flag(snd_config_t *n, unsigned int mask_in, + unsigned int *mask, unsigned int *flags) +{ + const char *val = NULL; + + if (snd_config_get_string(n, &val) < 0) + return -EINVAL; + + *mask |= mask_in; + if (strcmp(val, "true") == 0) + *flags |= mask_in; + else + *flags &= ~mask_in; + + return 0; +} + /* Parse pcm (for front end DAI & DAI link) */ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED) @@ -430,6 +448,34 @@ int tplg_parse_pcm(snd_tplg_t *tplg, return err; continue; } + + /* flags */ + if (strcmp(id, "symmetric_rates") == 0) { + err = parse_flag(n, + SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES, + &pcm->flag_mask, &pcm->flags); + if (err < 0) + return err; + continue; + } + + if (strcmp(id, "symmetric_channels") == 0) { + err = parse_flag(n, + SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS, + &pcm->flag_mask, &pcm->flags); + if (err < 0) + return err; + continue; + } + + if (strcmp(id, "symmetric_sample_bits") == 0) { + err = parse_flag(n, + SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS, + &pcm->flag_mask, &pcm->flags); + if (err < 0) + return err; + continue; + } }
return 0; @@ -610,6 +656,9 @@ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) tplg_add_stream_caps(&pcm->caps[i], pcm_tpl->caps[i]); }
+ pcm->flag_mask = pcm_tpl->flag_mask; + pcm->flags = pcm_tpl->flags; + pcm->num_streams = pcm_tpl->num_streams; for (i = 0; i < pcm_tpl->num_streams; i++) tplg_add_stream_object(&pcm->stream[i], &pcm_tpl->stream[i]);
On Fri, 04 Nov 2016 00:07:06 +0100, mengdong.lin@linux.intel.com wrote:
From: Mengdong Lin mengdong.lin@linux.intel.com
Users can define flags by both text conf file and C API. Add flags and flag_mask to C API template of PCM object.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/topology.h b/include/topology.h index ccd8401..b6a6f19 100644 --- a/include/topology.h +++ b/include/topology.h @@ -606,6 +606,11 @@ extern "C" {
"config3"
]
- }
- # Optional boolean flags
- symmetric_rates "true"
- symmetric_channels "true"
- symmetric_sample_bits "false"
- }
- </pre>
@@ -863,6 +868,8 @@ struct snd_tplg_pcm_template { unsigned int capture; /*!< supports capture mode */ unsigned int compress; /*!< 1 = compressed; 0 = PCM */ struct snd_tplg_stream_caps_template *caps[2]; /*!< playback & capture for DAI */
- unsigned int flag_mask; /*!< bitmask of flags to configure */
- unsigned int flags; /*!< flag value SND_SOC_TPLG_LNK_FLGBIT_* */ int num_streams; /*!< number of supported configs */ struct snd_tplg_stream_template stream[0]; /*!< supported configs */
}; diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 6fdf047..bd70dc9 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -364,6 +364,24 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED, return 0; }
+/* parse a flag bit of the given mask */ +static int parse_flag(snd_config_t *n, unsigned int mask_in,
unsigned int *mask, unsigned int *flags)
+{
- const char *val = NULL;
- if (snd_config_get_string(n, &val) < 0)
return -EINVAL;
- *mask |= mask_in;
- if (strcmp(val, "true") == 0)
*flags |= mask_in;
- else
*flags &= ~mask_in;
This can be simplified with snd_config_get_bool().
thanks,
Takashi
- return 0;
+}
/* Parse pcm (for front end DAI & DAI link) */ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED) @@ -430,6 +448,34 @@ int tplg_parse_pcm(snd_tplg_t *tplg, return err; continue; }
/* flags */
if (strcmp(id, "symmetric_rates") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
if (strcmp(id, "symmetric_channels") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
if (strcmp(id, "symmetric_sample_bits") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
}
return 0;
@@ -610,6 +656,9 @@ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) tplg_add_stream_caps(&pcm->caps[i], pcm_tpl->caps[i]); }
- pcm->flag_mask = pcm_tpl->flag_mask;
- pcm->flags = pcm_tpl->flags;
- pcm->num_streams = pcm_tpl->num_streams; for (i = 0; i < pcm_tpl->num_streams; i++) tplg_add_stream_object(&pcm->stream[i], &pcm_tpl->stream[i]);
-- 2.7.4
-----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: Saturday, November 5, 2016 11:46 PM
+/* parse a flag bit of the given mask */ static int +parse_flag(snd_config_t *n, unsigned int mask_in,
unsigned int *mask, unsigned int *flags) {
- const char *val = NULL;
- if (snd_config_get_string(n, &val) < 0)
return -EINVAL;
- *mask |= mask_in;
- if (strcmp(val, "true") == 0)
*flags |= mask_in;
- else
*flags &= ~mask_in;
This can be simplified with snd_config_get_bool().
Okay, I'll fix it in my later patches. Thank you so much for the review!
There will be ~15 patches left for topology user space. I'll split into 2 series.
Regards Mengdong
thanks,
Takashi
- return 0;
+}
/* Parse pcm (for front end DAI & DAI link) */ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED) @@ -430,6
+448,34
@@ int tplg_parse_pcm(snd_tplg_t *tplg, return err; continue; }
/* flags */
if (strcmp(id, "symmetric_rates") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
if (strcmp(id, "symmetric_channels") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
if (strcmp(id, "symmetric_sample_bits") == 0) {
err = parse_flag(n,
SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS,
&pcm->flag_mask, &pcm->flags);
if (err < 0)
return err;
continue;
}
}
return 0;
@@ -610,6 +656,9 @@ int tplg_add_pcm_object(snd_tplg_t *tplg,
snd_tplg_obj_template_t *t)
tplg_add_stream_caps(&pcm->caps[i], pcm_tpl-
caps[i]); }
- pcm->flag_mask = pcm_tpl->flag_mask;
- pcm->flags = pcm_tpl->flags;
- pcm->num_streams = pcm_tpl->num_streams; for (i = 0; i < pcm_tpl->num_streams; i++) tplg_add_stream_object(&pcm->stream[i], &pcm_tpl-
stream[i]);
2.7.4
From: Mengdong Lin mengdong.lin@linux.intel.com
Code refactoring. Rename tplg_build_pcm() to tplg_build_pcms() to build all PCM (FE DAI & DAI link) elements. It will call a new function build_pcm() to build a single PCM elemement.
build_pcm() will be extended to handle more properties of a PCM.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/src/topology/parser.c b/src/topology/parser.c index 3ab64f4..7b2c879 100644 --- a/src/topology/parser.c +++ b/src/topology/parser.c @@ -267,7 +267,7 @@ static int tplg_build_integ(snd_tplg_t *tplg) if (err < 0) return err;
- err = tplg_build_pcm(tplg, SND_TPLG_TYPE_PCM); + err = tplg_build_pcms(tplg, SND_TPLG_TYPE_PCM); if (err < 0) return err;
diff --git a/src/topology/pcm.c b/src/topology/pcm.c index bd70dc9..77b7605 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -70,8 +70,20 @@ static int tplg_build_stream_caps(snd_tplg_t *tplg, return 0; }
-/* build FE DAI/PCM configurations */ -int tplg_build_pcm(snd_tplg_t *tplg, unsigned int type) +/* build a PCM (FE DAI & DAI link) element */ +static int build_pcm(snd_tplg_t *tplg, struct tplg_elem *elem) +{ + int err; + + err = tplg_build_stream_caps(tplg, elem->id, elem->pcm->caps); + if (err < 0) + return err; + + return 0; +} + +/* build all PCM (FE DAI & DAI link) elements */ +int tplg_build_pcms(snd_tplg_t *tplg, unsigned int type) { struct list_head *base, *pos; struct tplg_elem *elem; @@ -86,7 +98,7 @@ int tplg_build_pcm(snd_tplg_t *tplg, unsigned int type) return -EINVAL; }
- err = tplg_build_stream_caps(tplg, elem->id, elem->pcm->caps); + err = build_pcm(tplg, elem); if (err < 0) return err;
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h index cfde4cc..7b30b84 100644 --- a/src/topology/tplg_local.h +++ b/src/topology/tplg_local.h @@ -284,7 +284,7 @@ int tplg_add_enum(snd_tplg_t *tplg, struct snd_tplg_enum_template *enum_ctl, int tplg_add_bytes(snd_tplg_t *tplg, struct snd_tplg_bytes_template *bytes_ctl, struct tplg_elem **e);
-int tplg_build_pcm(snd_tplg_t *tplg, unsigned int type); +int tplg_build_pcms(snd_tplg_t *tplg, unsigned int type); int tplg_build_link_cfg(snd_tplg_t *tplg, unsigned int type); int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t); int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
From: Mengdong Lin mengdong.lin@linux.intel.com
Users can define private for PCM (FE DAI & DAI links) elements by both text conf file and C API:
- Text conf file may define multiple data blocks for a PCM and they will be merged in building phase;
- Add private data to C API template of PCM object.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/topology.h b/include/topology.h index b6a6f19..481b408 100644 --- a/include/topology.h +++ b/include/topology.h @@ -611,6 +611,8 @@ extern "C" { * symmetric_rates "true" * symmetric_channels "true" * symmetric_sample_bits "false" + * + * data "name" # optional private data * } * </pre> * @@ -870,6 +872,7 @@ struct snd_tplg_pcm_template { struct snd_tplg_stream_caps_template *caps[2]; /*!< playback & capture for DAI */ unsigned int flag_mask; /*!< bitmask of flags to configure */ unsigned int flags; /*!< flag value SND_SOC_TPLG_LNK_FLGBIT_* */ + struct snd_soc_tplg_private *priv; /*!< private data */ int num_streams; /*!< number of supported configs */ struct snd_tplg_stream_template stream[0]; /*!< supported configs */ }; diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 77b7605..3f54e94 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -73,12 +73,32 @@ static int tplg_build_stream_caps(snd_tplg_t *tplg, /* build a PCM (FE DAI & DAI link) element */ static int build_pcm(snd_tplg_t *tplg, struct tplg_elem *elem) { + struct tplg_ref *ref; + struct list_head *base, *pos; int err;
err = tplg_build_stream_caps(tplg, elem->id, elem->pcm->caps); if (err < 0) return err;
+ /* merge private data from the referenced data elements */ + base = &elem->ref_list; + list_for_each(pos, base) { + + ref = list_entry(pos, struct tplg_ref, list); + if (ref->type == SND_TPLG_TYPE_DATA) { + err = tplg_copy_data(tplg, elem, ref); + if (err < 0) + return err; + } + if (!ref->elem) { + SNDERR("error: cannot find '%s' referenced by" + " PCM '%s'\n", ref->id, elem->id); + return -EINVAL; + } else if (err < 0) + return err; + } + return 0; }
@@ -394,7 +414,7 @@ static int parse_flag(snd_config_t *n, unsigned int mask_in, return 0; }
-/* Parse pcm (for front end DAI & DAI link) */ +/* Parse PCM (for front end DAI & DAI link) in text conf file */ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED) { @@ -501,6 +521,7 @@ int tplg_parse_be(snd_tplg_t *tplg, snd_config_iterator_t i, next; snd_config_t *n; const char *id, *val = NULL; + int err;
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_BE); if (!elem) @@ -540,6 +561,13 @@ int tplg_parse_be(snd_tplg_t *tplg, tplg_dbg("\t%s: %d\n", id, link->id); continue; } + + if (strcmp(id, "data") == 0) { + err = tplg_parse_data_refs(n, elem); + if (err < 0) + return err; + continue; + } }
return 0; @@ -633,10 +661,11 @@ static void tplg_add_stream_caps(struct snd_soc_tplg_stream_caps *caps, caps->sig_bits = caps_tpl->sig_bits; }
+/* Add a PCM element (FE DAI & DAI link) from C API */ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) { struct snd_tplg_pcm_template *pcm_tpl = t->pcm; - struct snd_soc_tplg_pcm *pcm; + struct snd_soc_tplg_pcm *pcm, *_pcm; struct tplg_elem *elem; int i;
@@ -675,6 +704,25 @@ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) for (i = 0; i < pcm_tpl->num_streams; i++) tplg_add_stream_object(&pcm->stream[i], &pcm_tpl->stream[i]);
+ /* private data */ + if (pcm_tpl->priv != NULL && pcm_tpl->priv->size) { + tplg_dbg("\t priv data size %d\n", pcm_tpl->priv->size); + _pcm = realloc(pcm, + elem->size + pcm_tpl->priv->size); + if (!_pcm) { + tplg_elem_free(elem); + return -ENOMEM; + } + + pcm = _pcm; + elem->pcm = pcm; + elem->size += pcm_tpl->priv->size; + + memcpy(pcm->priv.data, pcm_tpl->priv->data, + pcm_tpl->priv->size); + pcm->priv.size = pcm_tpl->priv->size; + } + return 0; }
From: Mengdong Lin mengdong.lin@linux.intel.com
Check the parameters at first in case of misuse.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/src/topology/elem.c b/src/topology/elem.c index 029c9ab..724bf26 100644 --- a/src/topology/elem.c +++ b/src/topology/elem.c @@ -111,6 +111,9 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base, const char* id, struct list_head *pos; struct tplg_elem *elem;
+ if (!base || !id) + return NULL; + list_for_each(pos, base) {
elem = list_entry(pos, struct tplg_elem, list);
I'm so sorry, please overlook the duplicated cover letters. I sent them out by mistake.
Thanks Mengdong
-----Original Message----- From: mengdong.lin@linux.intel.com [mailto:mengdong.lin@linux.intel.com] Sent: Friday, November 4, 2016 7:00 AM To: alsa-devel@alsa-project.org Cc: tiwai@suse.de; broonie@kernel.org; perex@perex.cz; liam.r.girdwood@linux.intel.com; Shah, Hardik T hardik.t.shah@intel.com; Singh, Guneshwor O guneshwor.o.singh@intel.com; Koul, Vinod vinod.koul@intel.com; Lin, Mengdong mengdong.lin@intel.com; Mengdong Lin mengdong.lin@linux.intel.com Subject: [PATCH 0/6] topology: Updates for PCM object in ABI v5
From: Mengdong Lin mengdong.lin@linux.intel.com
These ABI updates for PCM have just been applied to ASoC kernel. And kernel can handle the PCM ABI updates in a backward compatible way.
So we update the user space code for PCM now.
The updates for physical DAI link and DAIs will come later after their kernel updates be applied at first.
Mengdong Lin (6): topology: ABI - Update stream caps and PCM objects to ABI v5 topology: Parse sig_bits of stream caps topology: Parse flags for PCM topology: Define a function to build a single PCM element topology: Parse and build private data for PCM topology: tplg_elem_lookup() checks parameter before searching
include/sound/asoc.h | 9 ++++ include/topology.h | 11 +++++ src/topology/elem.c | 3 ++ src/topology/parser.c | 2 +- src/topology/pcm.c | 120 ++++++++++++++++++++++++++++++++++++++++++++-- src/topology/tplg_local.h | 2 +- 6 files changed, 140 insertions(+), 7 deletions(-)
-- 2.7.4
On Fri, 04 Nov 2016 00:00:19 +0100, mengdong.lin@linux.intel.com wrote:
From: Mengdong Lin mengdong.lin@linux.intel.com
These ABI updates for PCM have just been applied to ASoC kernel. And kernel can handle the PCM ABI updates in a backward compatible way.
So we update the user space code for PCM now.
The updates for physical DAI link and DAIs will come later after their kernel updates be applied at first.
Mengdong Lin (6): topology: ABI - Update stream caps and PCM objects to ABI v5 topology: Parse sig_bits of stream caps topology: Parse flags for PCM topology: Define a function to build a single PCM element topology: Parse and build private data for PCM topology: tplg_elem_lookup() checks parameter before searching
Applied all patches now. There was a minor issue, but we can address it later.
thanks,
Takashi
participants (3)
-
Lin, Mengdong
-
mengdong.lin@linux.intel.com
-
Takashi Iwai