ASoC: improve the DMI long card code in asoc-core
authorJaroslav Kysela <perex@perex.cz>
Wed, 20 Nov 2019 17:44:34 +0000 (18:44 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 22 Nov 2019 19:54:46 +0000 (19:54 +0000)
Add append_dmi_string() function and make the code more readable.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191120174435.30920-1-perex@perex.cz
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index cc0ef0fcc005531c3bf181fadcf5d34e80b7ed3e..a1f4d64a0a18da7287c0b55224471f0defd326e9 100644 (file)
@@ -1718,6 +1718,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
@@ -1752,61 +1769,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");
@@ -1814,16 +1806,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;