diff mbox series

[v2,1/2] ASoC: improve the DMI long card code in asoc-core

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

Commit Message

Jaroslav Kysela Nov. 20, 2019, 5:44 p.m. UTC
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(-)

Comments

Mark Brown Nov. 21, 2019, 11:51 a.m. UTC | #1
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?
Jaroslav Kysela Nov. 21, 2019, 12:02 p.m. UTC | #2
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
Mark Brown Nov. 21, 2019, 12:11 p.m. UTC | #3
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.
Pierre-Louis Bossart Nov. 21, 2019, 3:14 p.m. UTC | #4
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 mbox series

Patch

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;