aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r--sound/soc/soc-core.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 754e3ef8d7ae..180bfbfe833d 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -68,6 +68,20 @@ static int pmdown_time = 5000;
68module_param(pmdown_time, int, 0); 68module_param(pmdown_time, int, 0);
69MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); 69MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
70 70
71/* If a DMI filed contain strings in this blacklist (e.g.
72 * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken
73 * as invalid and dropped when setting the card long name from DMI info.
74 */
75static const char * const dmi_blacklist[] = {
76 "To be filled by OEM",
77 "TBD by OEM",
78 "Default String",
79 "Board Manufacturer",
80 "Board Vendor Name",
81 "Board Product Name",
82 NULL, /* terminator */
83};
84
71/* returns the minimum number of bytes needed to represent 85/* returns the minimum number of bytes needed to represent
72 * a particular given value */ 86 * a particular given value */
73static int min_bytes_needed(unsigned long val) 87static int min_bytes_needed(unsigned long val)
@@ -1933,6 +1947,22 @@ static void cleanup_dmi_name(char *name)
1933 name[j] = '\0'; 1947 name[j] = '\0';
1934} 1948}
1935 1949
1950/* Check if a DMI field is valid, i.e. not containing any string
1951 * in the black list.
1952 */
1953static int is_dmi_valid(const char *field)
1954{
1955 int i = 0;
1956
1957 while (dmi_blacklist[i]) {
1958 if (strstr(field, dmi_blacklist[i]))
1959 return 0;
1960 i++;
1961 }
1962
1963 return 1;
1964}
1965
1936/** 1966/**
1937 * snd_soc_set_dmi_name() - Register DMI names to card 1967 * snd_soc_set_dmi_name() - Register DMI names to card
1938 * @card: The card to register DMI names 1968 * @card: The card to register DMI names
@@ -1975,17 +2005,18 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1975 2005
1976 /* make up dmi long name as: vendor.product.version.board */ 2006 /* make up dmi long name as: vendor.product.version.board */
1977 vendor = dmi_get_system_info(DMI_BOARD_VENDOR); 2007 vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
1978 if (!vendor) { 2008 if (!vendor || !is_dmi_valid(vendor)) {
1979 dev_warn(card->dev, "ASoC: no DMI vendor name!\n"); 2009 dev_warn(card->dev, "ASoC: no DMI vendor name!\n");
1980 return 0; 2010 return 0;
1981 } 2011 }
1982 2012
2013
1983 snprintf(card->dmi_longname, sizeof(card->snd_card->longname), 2014 snprintf(card->dmi_longname, sizeof(card->snd_card->longname),
1984 "%s", vendor); 2015 "%s", vendor);
1985 cleanup_dmi_name(card->dmi_longname); 2016 cleanup_dmi_name(card->dmi_longname);
1986 2017
1987 product = dmi_get_system_info(DMI_PRODUCT_NAME); 2018 product = dmi_get_system_info(DMI_PRODUCT_NAME);
1988 if (product) { 2019 if (product && is_dmi_valid(product)) {
1989 len = strlen(card->dmi_longname); 2020 len = strlen(card->dmi_longname);
1990 snprintf(card->dmi_longname + len, 2021 snprintf(card->dmi_longname + len,
1991 longname_buf_size - len, 2022 longname_buf_size - len,
@@ -1999,7 +2030,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
1999 * name in the product version field 2030 * name in the product version field
2000 */ 2031 */
2001 product_version = dmi_get_system_info(DMI_PRODUCT_VERSION); 2032 product_version = dmi_get_system_info(DMI_PRODUCT_VERSION);
2002 if (product_version) { 2033 if (product_version && is_dmi_valid(product_version)) {
2003 len = strlen(card->dmi_longname); 2034 len = strlen(card->dmi_longname);
2004 snprintf(card->dmi_longname + len, 2035 snprintf(card->dmi_longname + len,
2005 longname_buf_size - len, 2036 longname_buf_size - len,
@@ -2012,7 +2043,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour)
2012 } 2043 }
2013 2044
2014 board = dmi_get_system_info(DMI_BOARD_NAME); 2045 board = dmi_get_system_info(DMI_BOARD_NAME);
2015 if (board) { 2046 if (board && is_dmi_valid(board)) {
2016 len = strlen(card->dmi_longname); 2047 len = strlen(card->dmi_longname);
2017 snprintf(card->dmi_longname + len, 2048 snprintf(card->dmi_longname + len,
2018 longname_buf_size - len, 2049 longname_buf_size - len,