Skip to contentSkip to conversation

ASoC: Use DMI name in sound card long name

PATCH Superseded [email protected] 4 participants 9 messages Dec 21, 2016 – Dec 22, 2016

Subsystems (3)

v1 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

cover ASoC: Use DMI name in sound card long name

From: Mengdong Lin <[email protected]>

This series is based on Liam's idea to use DMI name as the sound card short name in the audio workshop. Now we add DMI info to the card long name:
- Not change the card name (short name), keep it simple. So the card ID won't change as well.
- Use short name and DMI name together to make a readable and unqique long name.

Machine drivers can use a new API to get this feature.

In user space, when the sound server ask UCM to open a sound card, UCM will try to find the best configuration file based on the card long name, and only if not avaiable, fallback to the default configuration file that matches the card name (short name). Please see patch:
ucm: Automatically load the best config file based on the card long name

History:
v1 from RFC: Give up using a table to map DMI info to a simple string,
since we cannot maintain such a table for each machine. Just do verbatim copy of DMI info and let user space decide how to use the DMI info in card long name to find the best UCM config file.

If device driver adds a flavor string, just append it after the DMI info fields to the card long name.

Liam Girdwood (1):
ASoC: core: Add API to use DMI name in sound card long name

Mengdong Lin (1):
ASoC: Intel: Use DMI name for sound card long name in Broadwell
machine driver

 include/sound/soc.h                |  4 ++
 sound/soc/intel/boards/broadwell.c |  2 +
 sound/soc/soc-core.c               | 81 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 87 insertions(+)
Signature · 1 line
2.5.0
#1 lore raw

PATCH 1/2 ASoC: core: Add API to use DMI name in sound card long name

From: Liam Girdwood <[email protected]>

Intel DSP platform drivers are used by many different devices but are difficult for userspace to differentiate. This patch adds an API to allow the DMI name to be used in the sound card long name, thereby helping userspace load the correct UCM configuration. Usually machine drivers uses their own name as the sound card name (short name), and leave the long name and driver name blank. This API will append the DMI info like vendor, product and board info, to the card name to make up the card long name. If the machine driver has already explicitly set the long name, this API will do nothing.

This patch also allows for further differentiation as many devices that share the same DMI name i.e. Minnowboards, UP boards may be configured with different codecs or firmwares. The API supports flavoring the DMI name into the card longname to provide the extra differentiation required for these devices.

include/sound/soc.h +4 -0
index 795e6c4..e4f1844 100644
@@ -497,6 +497,8 @@ void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream);
 int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,
 	unsigned int dai_fmt);
 
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour);
+
 /* Utility functions to get clock rates from various things */
 int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
 int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);
@@ -1094,6 +1096,8 @@ struct snd_soc_card {
 	const char *name;
 	const char *long_name;
 	const char *driver_name;
+	char dmi_longname[80];
+
 	struct device *dev;
 	struct snd_card *snd_card;
 	struct module *owner;
sound/soc/soc-core.c +81 -0

93 lines not on this page · raw message

Signature · 1 line
2.5.0
#8 lore raw

PATCH 2/2 ASoC: Intel: Use DMI name for sound card long name in Broadwell machine driver

In reply to [email protected]

From: Mengdong Lin <[email protected]>

Intel Broadwell machine driver will call API snd_soc_set_dmi_name() to use DMI info to make the sound card long name.

Here are the changed long name for two Broadwell-based machines:
Dell XPS-13(2015): broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH

Intel WilsonBeach:
broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach SDS

They still share the same card name "broadwell-rt286".

sound/soc/intel/boards/broadwell.c +2 -0
index 5bb64d1..cda73bb 100644
@@ -266,6 +266,8 @@ static int broadwell_audio_probe(struct platform_device *pdev)
 {
 	broadwell_rt286.dev = &pdev->dev;
 
+	snd_soc_set_dmi_name(&broadwell_rt286, NULL);
+
 	return devm_snd_soc_register_card(&pdev->dev, &broadwell_rt286);
 }
 
Signature · 1 line
2.5.0
maintainer
#2 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

In reply to [email protected]
Quoted 66 lines · On Wed, 2016-12-21 at 21:04 +0800, [email protected] wrote:

From: Liam Girdwood <[email protected]>

Intel DSP platform drivers are used by many different devices but are difficult for userspace to differentiate. This patch adds an API to allow the DMI name to be used in the sound card long name, thereby helping userspace load the correct UCM configuration. Usually machine drivers uses their own name as the sound card name (short name), and leave the long name and driver name blank. This API will append the DMI info like vendor, product and board info, to the card name to make up the card long name. If the machine driver has already explicitly set the long name, this API will do nothing.

This patch also allows for further differentiation as many devices that share the same DMI name i.e. Minnowboards, UP boards may be configured with different codecs or firmwares. The API supports flavoring the DMI name into the card longname to provide the extra differentiation required for these devices.

include/sound/soc.h +4 -0
index 795e6c4..e4f1844 100644
@@ -497,6 +497,8 @@ void snd_soc_runtime_deactivate(struct snd_soc_pcm_runtime *rtd, int stream);
 int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,
 	unsigned int dai_fmt);
 
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour);
+
 /* Utility functions to get clock rates from various things */
 int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
 int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);
@@ -1094,6 +1096,8 @@ struct snd_soc_card {
 	const char *name;
 	const char *long_name;
 	const char *driver_name;
+	char dmi_longname[80];
+
 	struct device *dev;
 	struct snd_card *snd_card;
 	struct module *owner;
sound/soc/soc-core.c +8 -0
index aaab26a..8bcf241 100644
@@ -34,6 +34,7 @@
 #include <linux/ctype.h>
 #include <linux/slab.h>
 #include <linux/of.h>
+#include <linux/dmi.h>
 #include <sound/core.h>
 #include <sound/jack.h>
 #include <sound/pcm.h>
@@ -1886,6 +1887,86 @@ int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,
 }
 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt);
 
+/**
+ * snd_soc_set_dmi_name() - Register DMI names to card
+ * @card: The card to register DMI names
+ * @flavour: The flavour "differentiator" for the card amongst its peers.
+ *
+ * Intel DSP platform drivers are used by many different devices but are
+ * difficult for userspace to differentiate, since machine drivers ususally

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, · line 1906

Quoted 10 lines
sound/soc/soc-core.c +10 -0
+ * use their own name as the card name (short name) and leave the card long
+ * name blank. This function will allow DMI info to be used in the sound
+ * card long name, thereby helping userspace load the correct UCM (Use Case
+ * Manager) configuration.
+ * Possible card long names may be:
+ * broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH
+ * broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach SDS
+ * bytcr-rt5640-ASUSTeK COMPUTER INC.-T100TA-T100TA
+ * bytcr-rt5651-Circuitco-Minnowboard Max D0 PLATFORM-MinnowBoard MAX
+ *

Lets keep it simpler, we dont need to prepend the driver name to the longname as it's already available in driver_name.

The purpose of the patch is to uniquely identify the machine, so we dont need to provide or duplicate other information in the name.

So longname should be "dmi-flavour" where dmi is product OR board (if product is not available).

Liam

Quoted 66 lines
sound/soc/soc-core.c +63 -0
+ * This function also supports flavoring the card longname to provide
+ * the extra differentiation.
+ *
+ * Returns 0 on success, otherwise a negative error code.
+ */
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
+{
+	const char *vendor, *product, *board;
+
+	if (card->long_name)
+		return 0; /* long name already set by driver or from DMI */
+
+	vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
+	if (!vendor) {
+		dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
+		return 0;
+	}
+
+	product = dmi_get_system_info(DMI_PRODUCT_NAME);
+	board = dmi_get_system_info(DMI_BOARD_NAME);
+	if (!board && !product) {
+		/* fall back to using legacy name */
+		dev_warn(card->dev, "ASoC: no DMI board/product name!\n");
+		return 0;
+	}
+
+	/* make up dmi long name as:
+	 * card name (usually machine driver name) -vendor -product -board
+	 */
+	snprintf(card->dmi_longname, sizeof(card->snd_card->longname),
+			"%s-%s", card->name, vendor);
+
+	if (product) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, product,
+			sizeof(card->snd_card->longname));
+	}
+
+	if (board) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, board,
+			sizeof(card->snd_card->longname));
+	}
+
+
+	/* Add flavour to dmi long name */
+	if (flavour) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, flavour,
+			sizeof(card->snd_card->longname));
+	}
+
+	/* set long name */
+	card->long_name = card->dmi_longname;
+
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_set_dmi_name);
+
 static int snd_soc_instantiate_card(struct snd_soc_card *card)
 {
 	struct snd_soc_codec *codec;
#5 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

In reply to [email protected]

include/sound/soc.h struct snd_soc_card { · line 1099

Quoted 9 lines

/* Utility functions to get clock rates from various things */ int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);

include/sound/soc.h +1 -0
@@ -1094,6 +1096,8 @@ struct snd_soc_card {
 	const char *name;
 	const char *long_name;
 	const char *driver_name;
+	char dmi_longname[80];

why 80? is this linked to DMI restrictions on board/product names?

Quoted 7 lines
sound/soc/soc-core.c +6 -0
+/**
+ * snd_soc_set_dmi_name() - Register DMI names to card
+ * @card: The card to register DMI names
+ * @flavour: The flavour "differentiator" for the card amongst its peers.
+ *
+ * Intel DSP platform drivers are used by many different devices but are

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, · line 1905

Quoted 10 lines
sound/soc/soc-core.c +10 -0
+ * difficult for userspace to differentiate, since machine drivers ususally
+ * use their own name as the card name (short name) and leave the card long
+ * name blank. This function will allow DMI info to be used in the sound
+ * card long name, thereby helping userspace load the correct UCM (Use Case
+ * Manager) configuration.
+ * Possible card long names may be:
+ * broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH
+ * broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach SDS
+ * bytcr-rt5640-ASUSTeK COMPUTER INC.-T100TA-T100TA
+ * bytcr-rt5651-Circuitco-Minnowboard Max D0 PLATFORM-MinnowBoard MAX

You may want to add a comment that the '.' is not a separator but part of the DMI name. I was trying to figure out why there were cases with .-

Quoted 45 lines

+ *
+ * This function also supports flavoring the card longname to provide
+ * the extra differentiation.
+ *
+ * Returns 0 on success, otherwise a negative error code.
+ */

sound/soc/soc-core.c +39 -0
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
+{
+	const char *vendor, *product, *board;
+
+	if (card->long_name)
+		return 0; /* long name already set by driver or from DMI */
+
+	vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
+	if (!vendor) {
+		dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
+		return 0;
+	}
+
+	product = dmi_get_system_info(DMI_PRODUCT_NAME);
+	board = dmi_get_system_info(DMI_BOARD_NAME);
+	if (!board && !product) {
+		/* fall back to using legacy name */
+		dev_warn(card->dev, "ASoC: no DMI board/product name!\n");
+		return 0;
+	}
+
+	/* make up dmi long name as:
+	 * card name (usually machine driver name) -vendor -product -board
+	 */
+	snprintf(card->dmi_longname, sizeof(card->snd_card->longname),
+			"%s-%s", card->name, vendor);
+
+	if (product) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, product,
+			sizeof(card->snd_card->longname));
+	}
+
+	if (board) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, board,
+			sizeof(card->snd_card->longname));

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, · line 1960

Quoted 10 lines
sound/soc/soc-core.c +10 -0
+	}
+
+
+	/* Add flavour to dmi long name */
+	if (flavour) {
+		strncat(card->dmi_longname, "-",
+			sizeof(card->snd_card->longname));
+		strncat(card->dmi_longname, flavour,
+			sizeof(card->snd_card->longname));
+	}

how is the 'flavour' defined? This doesn't seem to come from the DMI decode information? Is this for example intended to be used with quirks?

Quoted 13 lines
sound/soc/soc-core.c +9 -0
+
+	/* set long name */
+	card->long_name = card->dmi_longname;
+
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_set_dmi_name);
+
 static int snd_soc_instantiate_card(struct snd_soc_card *card)
 {
 	struct snd_soc_codec *codec;
maintainer
#6 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

Quoted 9 lines · Pierre-Louis Bossart

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, · line 1960

Quoted 8 lines
sound/soc/soc-core.c +8 -0
+
+     /* Add flavour to dmi long name */
+     if (flavour) {
+             strncat(card->dmi_longname, "-",
+                     sizeof(card->snd_card->longname));
+             strncat(card->dmi_longname, flavour,
+                     sizeof(card->snd_card->longname));
+     }
Quoted 3 lines

how is the 'flavour' defined? This doesn't seem to come from the DMI decode information? Is this for example intended to be used with quirks?

Yes, it's intended for identifying quirks, different firmwares, etc

Liam

#3 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

In reply to Liam Girdwood
Quoted 102 lines

-----Original Message-----
From: Liam Girdwood [mailto:[email protected]]
Sent: Wednesday, December 21, 2016 10:27 PM
To: [email protected]
Cc: [email protected]; [email protected]; [email protected]; Bossart, Pierre-louis <[email protected]>; Koul, Vinod <[email protected]>; Lin, Mengdong <[email protected]>
Subject: Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

Quoted 26 lines · On Wed, 2016-12-21 at 21:04 +0800, [email protected] wrote:

From: Liam Girdwood <[email protected]>

Intel DSP platform drivers are used by many different devices but are difficult for userspace to differentiate. This patch adds an API to allow the DMI name to be used in the sound card long name, thereby helping userspace load the correct UCM configuration. Usually machine drivers uses their own name as the sound card name (short name), and leave the long name and driver name blank. This API will append the DMI info like vendor, product and board info, to the card name to make up the card long name. If the machine driver has already explicitly set the long name, this API will do nothing.

This patch also allows for further differentiation as many devices that share the same DMI name i.e. Minnowboards, UP boards may be configured with different codecs or firmwares. The API supports flavoring the DMI name into the card longname to provide the extra differentiation required for these devices.

include/sound/soc.h index renamed from include/sound/soc.h +0 -0

795e6c4..e4f1844 100644

include/sound/soc.h +0 -0
@@ -497,6 +497,8 @@ void snd_soc_runtime_deactivate(struct
Quoted 1 line

snd_soc_pcm_runtime *rtd, int stream); int

snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,

Quoted 8 lines
include/sound/soc.h +3 -0
 	unsigned int dai_fmt);
 
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char
+*flavour);
+
 /* Utility functions to get clock rates from various things */  int

snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);

@@

Quoted 37 lines

-1094,6 +1096,8 @@ struct snd_soc_card {

include/sound/soc.h +2 -0
 	const char *name;
 	const char *long_name;
 	const char *driver_name;
+	char dmi_longname[80];
+
 	struct device *dev;
 	struct snd_card *snd_card;
 	struct module *owner;
sound/soc/soc-core.c index renamed from sound/soc/soc-core.c +0 -0

aaab26a..8bcf241 100644

sound/soc/soc-core.c +13 -0
@@ -34,6 +34,7 @@
 #include <linux/ctype.h>
 #include <linux/slab.h>
 #include <linux/of.h>
+#include <linux/dmi.h>
 #include <sound/core.h>
 #include <sound/jack.h>
 #include <sound/pcm.h>
@@ -1886,6 +1887,86 @@ int snd_soc_runtime_set_dai_fmt(struct
 snd_soc_pcm_runtime *rtd,  }
 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt);
 
+/**
+ * snd_soc_set_dmi_name() - Register DMI names to card
+ * @card: The card to register DMI names
+ * @flavour: The flavour "differentiator" for the card amongst its peers.
+ *
+ * Intel DSP platform drivers are used by many different devices but
+are
+ * difficult for userspace to differentiate, since machine drivers
+ususally
+ * use their own name as the card name (short name) and leave the
+card long
+ * name blank. This function will allow DMI info to be used in the

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct · line 1911

Quoted 10 lines
sound/soc/soc-core.c +10 -0
+sound
+ * card long name, thereby helping userspace load the correct UCM
+(Use Case
+ * Manager) configuration.
+ * Possible card long names may be:
+ * broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH
+ * broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach
+SDS
+ * bytcr-rt5640-ASUSTeK COMPUTER INC.-T100TA-T100TA
+ * bytcr-rt5651-Circuitco-Minnowboard Max D0 PLATFORM-MinnowBoard

MAX

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct · line 1912

Quoted 1 line
sound/soc/soc-core.c +1 -0
+ *

Lets keep it simpler, we dont need to prepend the driver name to the longname as it's already available in driver_name.

Quoted 7 lines

The purpose of the patch is to uniquely identify the machine, so we dont need to provide or duplicate other information in the name.

So longname should be "dmi-flavour" where dmi is product OR board (if product is not available).

Liam

Hi Liam,

Yes, there is some duplication. But may we keep this?

It's because that if the card long name itself has all the information, the user space UCM code can just compare the configuration file names against the card long name, no need to involve the card name (driver name). In addition, I want to make the naming same as HD-Audio, their card long name is the card short name with some suffixes. Although HD-Audio does not use UCM now, but maybe in the future? So we can process ASoC and HD-Audio cards in the same way.

Thanks
Mengdong

#7 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

In reply to Pierre-Louis Bossart
Quoted 15 lines

-----Original Message-----
From: Pierre-Louis Bossart [mailto:[email protected]]
Sent: Wednesday, December 21, 2016 10:37 PM
To: [email protected]; [email protected]; [email protected]
Cc: [email protected]; Lin, Mengdong <[email protected]>; [email protected]; Koul, Vinod <[email protected]>; Bossart, Pierre-louis <[email protected]>
Subject: Re: [alsa-devel] [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

Quoted 3 lines

/* Utility functions to get clock rates from various things */ int
snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);

Quoted 8 lines

@@

include/sound/soc.h struct snd_soc_card { · line 1099

Quoted 5 lines

-1094,6 +1096,8 @@ struct snd_soc_card {

include/sound/soc.h +1 -0
 	const char *name;
 	const char *long_name;
 	const char *driver_name;
+	char dmi_longname[80];

why 80? is this linked to DMI restrictions on board/product names?

Because kernel uses a 80-character array to give the card long name to user space, in struct snd_ctl_card_info in include/uapi/sound/asound.h

Quoted 25 lines
Quoted 13 lines
(quoted diff) +12 -0
+/**
+ * snd_soc_set_dmi_name() - Register DMI names to card
+ * @card: The card to register DMI names
+ * @flavour: The flavour "differentiator" for the card amongst its peers.
+ *
+ * Intel DSP platform drivers are used by many different devices but
+are
+ * difficult for userspace to differentiate, since machine drivers
+ususally
+ * use their own name as the card name (short name) and leave the
+card long
+ * name blank. This function will allow DMI info to be used in the

Review

Quoted 10 lines
(quoted diff) +10 -0
+sound
+ * card long name, thereby helping userspace load the correct UCM
+(Use Case
+ * Manager) configuration.
+ * Possible card long names may be:
+ * broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH
+ * broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach
+SDS
+ * bytcr-rt5640-ASUSTeK COMPUTER INC.-T100TA-T100TA
+ * bytcr-rt5651-Circuitco-Minnowboard Max D0 PLATFORM-MinnowBoard

MAX

Quoted 2 lines

You may want to add a comment that the '.' is not a separator but part of the DMI name. I was trying to figure out why there were cases with .-

Okay, I'll add the comment. Actually the '-' is not necessary for the user space UCM code to do the matching. It's just give a hint to the developer to identify DMI fields in the card long name. I choose '-' since both '.' and SPACE can be part of the DMI vendor or product names. I'll to add a UCM command to show both the card long name and its best matched configuration file, for developers to revise the name for a new configuration file.

Thanks
Mengdong

#4 lore raw

Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

In reply to Lin, Mengdong
Quoted 112 lines · Mengdong
Quoted 102 lines

-----Original Message-----
From: Liam Girdwood [mailto:[email protected]]
Sent: Wednesday, December 21, 2016 10:27 PM
To: [email protected]
Cc: [email protected]; [email protected]; [email protected]; Bossart, Pierre-louis <[email protected]>; Koul, Vinod <[email protected]>; Lin, Mengdong <[email protected]>
Subject: Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name

Quoted 26 lines · On Wed, 2016-12-21 at 21:04 +0800, [email protected] wrote:

From: Liam Girdwood <[email protected]>

Intel DSP platform drivers are used by many different devices but are difficult for userspace to differentiate. This patch adds an API to allow the DMI name to be used in the sound card long name, thereby helping userspace load the correct UCM configuration. Usually machine drivers uses their own name as the sound card name (short name), and leave the long name and driver name blank. This API will append the DMI info like vendor, product and board info, to the card name to make up the card long name. If the machine driver has already explicitly set the long name, this API will do nothing.

This patch also allows for further differentiation as many devices that share the same DMI name i.e. Minnowboards, UP boards may be configured with different codecs or firmwares. The API supports flavoring the DMI name into the card longname to provide the extra differentiation required for these devices.

include/sound/soc.h index renamed from include/sound/soc.h +0 -0

795e6c4..e4f1844 100644

include/sound/soc.h +0 -0
@@ -497,6 +497,8 @@ void snd_soc_runtime_deactivate(struct
Quoted 1 line

snd_soc_pcm_runtime *rtd, int stream); int

snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd,

Quoted 8 lines

unsigned int dai_fmt);

include/sound/soc.h +3 -0
+int snd_soc_set_dmi_name(struct snd_soc_card *card, const char
+*flavour);
+
  /* Utility functions to get clock rates from various things */  int

snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots); int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);

@@

Quoted 37 lines

-1094,6 +1096,8 @@ struct snd_soc_card {
const char *name;
const char *long_name;
const char *driver_name;

include/sound/soc.h +2 -0
+	char dmi_longname[80];
+
  	struct device *dev;
  	struct snd_card *snd_card;
  	struct module *owner;
sound/soc/soc-core.c index renamed from sound/soc/soc-core.c +0 -0

aaab26a..8bcf241 100644

sound/soc/soc-core.c +13 -0
@@ -34,6 +34,7 @@
  #include <linux/ctype.h>
  #include <linux/slab.h>
  #include <linux/of.h>
+#include <linux/dmi.h>
  #include <sound/core.h>
  #include <sound/jack.h>
  #include <sound/pcm.h>
@@ -1886,6 +1887,86 @@ int snd_soc_runtime_set_dai_fmt(struct
 snd_soc_pcm_runtime *rtd,  }
 EXPORT_SYMBOL_GPL(snd_soc_runtime_set_dai_fmt);
 
+/**
+ * snd_soc_set_dmi_name() - Register DMI names to card
+ * @card: The card to register DMI names
+ * @flavour: The flavour "differentiator" for the card amongst its peers.
+ *
+ * Intel DSP platform drivers are used by many different devices but
+are
+ * difficult for userspace to differentiate, since machine drivers
+ususally
+ * use their own name as the card name (short name) and leave the
+card long
+ * name blank. This function will allow DMI info to be used in the

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct · line 1911

Quoted 10 lines
sound/soc/soc-core.c +10 -0
+sound
+ * card long name, thereby helping userspace load the correct UCM
+(Use Case
+ * Manager) configuration.
+ * Possible card long names may be:
+ * broadwell-rt286-Dell Inc.-XPS 13 9343-0310JH
+ * broadwell-rt286-Intel Corp.-Broadwell Client platform-Wilson Beach
+SDS
+ * bytcr-rt5640-ASUSTeK COMPUTER INC.-T100TA-T100TA
+ * bytcr-rt5651-Circuitco-Minnowboard Max D0 PLATFORM-MinnowBoard

MAX

sound/soc/soc-core.c int snd_soc_runtime_set_dai_fmt(struct · line 1912

Quoted 1 line
sound/soc/soc-core.c +1 -0
+ *

Lets keep it simpler, we dont need to prepend the driver name to the longname as it's already available in driver_name.

Quoted 7 lines

The purpose of the patch is to uniquely identify the machine, so we dont need to provide or duplicate other information in the name.

So longname should be "dmi-flavour" where dmi is product OR board (if product is not available).

Liam

Hi Liam,

Quoted 7 lines

Yes, there is some duplication. But may we keep this?

It's because that if the card long name itself has all the information, the user space UCM code can just compare the configuration file names against the card long name, no need to involve the card name (driver name). In addition, I want to make the naming same as HD-Audio, their card long name is the card short name with some suffixes. Although HD-Audio does not use UCM now, but maybe in the future? So we can process ASoC and HD-Audio cards in the same way.

Thanks
Mengdong

Hi Liam,

I'll remove the driver name from the long name and keep the long name as "dmi-flavor" as you suggested. I found dmi info could be quite long and if we keep the duplicated info, we may not have enough room for the "flavor" field. user space can accept 80 characters at most.

I'll modify the UCM code.

Thanks
Mengdong