From: Liam Girdwood <liam.r.girdwood@linux.intel.com>
To: mengdong.lin@linux.intel.com
Cc: alsa-devel@alsa-project.org, tiwai@suse.de,
mengdong.lin@intel.com, vinod.koul@intel.com, broonie@kernel.org,
pierre-louis.bossart@intel.com
Subject: Re: [PATCH 1/2] ASoC: core: Add API to use DMI name in sound card long name
Date: Wed, 21 Dec 2016 14:27:11 +0000 [thread overview]
Message-ID: <1482330431.2554.94.camel@loki> (raw)
In-Reply-To: <748589b74f8f4a6fefe7e545c21a6db5e71a74e1.1482324245.git.mengdong.lin@linux.intel.com>
On Wed, 2016-12-21 at 21:04 +0800, mengdong.lin@linux.intel.com wrote:
> From: Liam Girdwood <liam.r.girdwood@linux.intel.com>
>
> 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.
>
> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
>
> diff --git a/include/sound/soc.h b/include/sound/soc.h
> index 795e6c4..e4f1844 100644
> --- a/include/sound/soc.h
> +++ b/include/sound/soc.h
> @@ -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;
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index aaab26a..8bcf241 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -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
> + * 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
> + * 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;
next prev parent reply other threads:[~2016-12-21 14:27 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-21 13:02 [PATCH 0/2] ASoC: Use DMI name in sound card long name mengdong.lin
2016-12-21 13:04 ` [PATCH 1/2] ASoC: core: Add API to use " mengdong.lin
2016-12-21 14:27 ` Liam Girdwood [this message]
2016-12-21 15:46 ` Lin, Mengdong
2016-12-22 3:07 ` Mengdong Lin
2016-12-21 14:37 ` Pierre-Louis Bossart
2016-12-21 15:01 ` Liam Girdwood
2016-12-21 16:01 ` Lin, Mengdong
2016-12-21 13:04 ` [PATCH 2/2] ASoC: Intel: Use DMI name for sound card long name in Broadwell machine driver mengdong.lin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1482330431.2554.94.camel@loki \
--to=liam.r.girdwood@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=mengdong.lin@intel.com \
--cc=mengdong.lin@linux.intel.com \
--cc=pierre-louis.bossart@intel.com \
--cc=tiwai@suse.de \
--cc=vinod.koul@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.