Message ID | 20191120174435.30920-1-perex@perex.cz (mailing list archive) |
---|---|
State | Accepted |
Commit | 4e01e5dbba96f731119f3f1a6bf51b54c98c5940 |
Headers | show |
Series | [v2,1/2] ASoC: improve the DMI long card code in asoc-core | expand |
On Wed, Nov 20, 2019 at 06:44:34PM +0100, Jaroslav Kysela wrote: > - /* make up dmi long name as: vendor.product.version.board */ > + /* make up dmi long name as: vendor-product-version-board */ I'm worried about this from an ABI point of view with people's UCM files. But perhaps I'm worrying about nothing?
Dne 21. 11. 19 v 12:51 Mark Brown napsal(a): > On Wed, Nov 20, 2019 at 06:44:34PM +0100, Jaroslav Kysela wrote: > >> - /* make up dmi long name as: vendor.product.version.board */ >> + /* make up dmi long name as: vendor-product-version-board */ > > I'm worried about this from an ABI point of view with people's UCM > files. But perhaps I'm worrying about nothing? Mark, this is just the C comment fix. The long name is already in vendor-product-version-board - no dots as delimiters (but does are allowed in the fields like version strings). This code improvement does not change the format of the generated long name string from the DMI information. Just see the examples in the soc-core.c comment for snd_soc_set_dmi_name(): * Possible card long names may be: * DellInc.-XPS139343-01-0310JH * ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA * Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX Jaroslav
On Thu, Nov 21, 2019 at 01:02:38PM +0100, Jaroslav Kysela wrote: > Dne 21. 11. 19 v 12:51 Mark Brown napsal(a): > > On Wed, Nov 20, 2019 at 06:44:34PM +0100, Jaroslav Kysela wrote: > > > - /* make up dmi long name as: vendor.product.version.board */ > > > + /* make up dmi long name as: vendor-product-version-board */ > > I'm worried about this from an ABI point of view with people's UCM > > files. But perhaps I'm worrying about nothing? > this is just the C comment fix. The long name is already in > vendor-product-version-board - no dots as delimiters (but does are allowed > in the fields like version strings). This code improvement does not change > the format of the generated long name string from the DMI information. Ah, it looked from my initial scan like it was being changed as a result of the factoring out of the append code.
On 11/21/19 6:11 AM, Mark Brown wrote: > On Thu, Nov 21, 2019 at 01:02:38PM +0100, Jaroslav Kysela wrote: >> Dne 21. 11. 19 v 12:51 Mark Brown napsal(a): >>> On Wed, Nov 20, 2019 at 06:44:34PM +0100, Jaroslav Kysela wrote: > >>>> - /* make up dmi long name as: vendor.product.version.board */ >>>> + /* make up dmi long name as: vendor-product-version-board */ > >>> I'm worried about this from an ABI point of view with people's UCM >>> files. But perhaps I'm worrying about nothing? > >> this is just the C comment fix. The long name is already in >> vendor-product-version-board - no dots as delimiters (but does are allowed >> in the fields like version strings). This code improvement does not change >> the format of the generated long name string from the DMI information. > > Ah, it looked from my initial scan like it was being changed as a result > of the factoring out of the append code. I had the same reaction on v1, it's just cleaning up a bad comment indeed. This looks good to me, especially the removal of redundant parts, so for the patch 1..2 Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b4683d4588ee..db56507174bd 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1755,6 +1755,23 @@ static int is_dmi_valid(const char *field) return 1; } +/* + * Append a string to card->dmi_longname with character cleanups. + */ +static void append_dmi_string(struct snd_soc_card *card, const char *str) +{ + char *dst = card->dmi_longname; + size_t dst_len = sizeof(card->dmi_longname); + size_t len; + + len = strlen(dst); + snprintf(dst + len, dst_len - len, "-%s", str); + + len++; /* skip the separator "-" */ + if (len < dst_len) + cleanup_dmi_name(dst + len); +} + /** * snd_soc_set_dmi_name() - Register DMI names to card * @card: The card to register DMI names @@ -1789,61 +1806,36 @@ static int is_dmi_valid(const char *field) int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) { const char *vendor, *product, *product_version, *board; - size_t longname_buf_size = sizeof(card->snd_card->longname); - size_t len; if (card->long_name) return 0; /* long name already set by driver or from DMI */ - /* make up dmi long name as: vendor.product.version.board */ + /* make up dmi long name as: vendor-product-version-board */ vendor = dmi_get_system_info(DMI_BOARD_VENDOR); if (!vendor || !is_dmi_valid(vendor)) { dev_warn(card->dev, "ASoC: no DMI vendor name!\n"); return 0; } - snprintf(card->dmi_longname, sizeof(card->snd_card->longname), - "%s", vendor); + snprintf(card->dmi_longname, sizeof(card->dmi_longname), "%s", vendor); cleanup_dmi_name(card->dmi_longname); product = dmi_get_system_info(DMI_PRODUCT_NAME); if (product && is_dmi_valid(product)) { - len = strlen(card->dmi_longname); - snprintf(card->dmi_longname + len, - longname_buf_size - len, - "-%s", product); - - len++; /* skip the separator "-" */ - if (len < longname_buf_size) - cleanup_dmi_name(card->dmi_longname + len); + append_dmi_string(card, product); /* * some vendors like Lenovo may only put a self-explanatory * name in the product version field */ product_version = dmi_get_system_info(DMI_PRODUCT_VERSION); - if (product_version && is_dmi_valid(product_version)) { - len = strlen(card->dmi_longname); - snprintf(card->dmi_longname + len, - longname_buf_size - len, - "-%s", product_version); - - len++; - if (len < longname_buf_size) - cleanup_dmi_name(card->dmi_longname + len); - } + if (product_version && is_dmi_valid(product_version)) + append_dmi_string(card, product_version); } board = dmi_get_system_info(DMI_BOARD_NAME); if (board && is_dmi_valid(board)) { - len = strlen(card->dmi_longname); - snprintf(card->dmi_longname + len, - longname_buf_size - len, - "-%s", board); - - len++; - if (len < longname_buf_size) - cleanup_dmi_name(card->dmi_longname + len); + append_dmi_string(card, board); } else if (!product) { /* fall back to using legacy name */ dev_warn(card->dev, "ASoC: no DMI board/product name!\n"); @@ -1851,16 +1843,8 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) } /* Add flavour to dmi long name */ - if (flavour) { - len = strlen(card->dmi_longname); - snprintf(card->dmi_longname + len, - longname_buf_size - len, - "-%s", flavour); - - len++; - if (len < longname_buf_size) - cleanup_dmi_name(card->dmi_longname + len); - } + if (flavour) + append_dmi_string(card, flavour); /* set the card long name */ card->long_name = card->dmi_longname;
Add append_dmi_string() function and make the code more readable. Signed-off-by: Jaroslav Kysela <perex@perex.cz> Cc: Mark Brown <broonie@kernel.org> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> --- sound/soc/soc-core.c | 66 +++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 41 deletions(-)