Message ID | 20170628070139.18340-1-mengdong.lin@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 98faf436ee05503e258ee934a9de8d8a3472b40f |
Headers | show |
On Wed, 28 Jun 2017 09:01:39 +0200, mengdong.lin@linux.intel.com wrote: > > From: Mengdong Lin <mengdong.lin@linux.intel.com> > > Sometimes DMI fields may be invalid and so can't give useful vendor, > product or board info, such as "Type2 - Board Manufacturer" or > "Type1 - TBD by OEM". Including such invalid DMI fileds may create silly > card long name. So this patch creates a black list of invalid strings. > And if a DMI field contains any string in this list, it will be excluded > from the card long name. > > Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com> > > diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c > index cfa9cf1476f2..419b788fd801 100644 > --- a/sound/soc/soc-core.c > +++ b/sound/soc/soc-core.c > @@ -69,6 +69,20 @@ static int pmdown_time = 5000; > module_param(pmdown_time, int, 0); > MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); > > +/* If a DMI filed contain strings in this blacklist (e.g. > + * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken > + * as invalid and dropped when setting the card long name from DMI info. > + */ > +static const char * const dmi_blacklist[] = { > + "To be filled by OEM", > + "TBD by OEM", > + "Default String", We found also a case with "Default string" (note the case-sensitive). thanks, Takashi
On Wed, Jun 28, 2017 at 04:22:10PM +0200, Takashi Iwai wrote: > mengdong.lin@linux.intel.com wrote: > > +static const char * const dmi_blacklist[] = { > > + "To be filled by OEM", > > + "TBD by OEM", > > + "Default String", > We found also a case with "Default string" (note the case-sensitive). I'll apply Mengdong's current patch, that can be added incrementally.
On 06/28/2017 10:22 PM, Takashi Iwai wrote: > On Wed, 28 Jun 2017 09:01:39 +0200, > mengdong.lin@linux.intel.com wrote: >> >> From: Mengdong Lin <mengdong.lin@linux.intel.com> >> >> Sometimes DMI fields may be invalid and so can't give useful vendor, >> product or board info, such as "Type2 - Board Manufacturer" or >> "Type1 - TBD by OEM". Including such invalid DMI fileds may create silly >> card long name. So this patch creates a black list of invalid strings. >> And if a DMI field contains any string in this list, it will be excluded >> from the card long name. >> >> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com> >> >> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c >> index cfa9cf1476f2..419b788fd801 100644 >> --- a/sound/soc/soc-core.c >> +++ b/sound/soc/soc-core.c >> @@ -69,6 +69,20 @@ static int pmdown_time = 5000; >> module_param(pmdown_time, int, 0); >> MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); >> >> +/* If a DMI filed contain strings in this blacklist (e.g. >> + * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken >> + * as invalid and dropped when setting the card long name from DMI info. >> + */ >> +static const char * const dmi_blacklist[] = { >> + "To be filled by OEM", >> + "TBD by OEM", >> + "Default String", > > We found also a case with "Default string" (note the case-sensitive). I added it in the v2 patch. Please review. It seems we'll add more strings later to handle such case-sensitive cases. Thanks Mengdong
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index cfa9cf1476f2..419b788fd801 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -69,6 +69,20 @@ static int pmdown_time = 5000; module_param(pmdown_time, int, 0); MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)"); +/* If a DMI filed contain strings in this blacklist (e.g. + * "Type2 - Board Manufacturer" or "Type1 - TBD by OEM"), it will be taken + * as invalid and dropped when setting the card long name from DMI info. + */ +static const char * const dmi_blacklist[] = { + "To be filled by OEM", + "TBD by OEM", + "Default String", + "Board Manufacturer", + "Board Vendor Name", + "Board Product Name", + NULL, /* terminator */ +}; + /* returns the minimum number of bytes needed to represent * a particular given value */ static int min_bytes_needed(unsigned long val) @@ -1934,6 +1948,22 @@ static void cleanup_dmi_name(char *name) name[j] = '\0'; } +/* Check if a DMI field is valid, i.e. not containing any string + * in the black list. + */ +static int is_dmi_valid(const char *field) +{ + int i = 0; + + while (dmi_blacklist[i]) { + if (strstr(field, dmi_blacklist[i])) + return 0; + i++; + }; + + return 1; +} + /** * snd_soc_set_dmi_name() - Register DMI names to card * @card: The card to register DMI names @@ -1976,17 +2006,18 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) /* make up dmi long name as: vendor.product.version.board */ vendor = dmi_get_system_info(DMI_BOARD_VENDOR); - if (!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); cleanup_dmi_name(card->dmi_longname); product = dmi_get_system_info(DMI_PRODUCT_NAME); - if (product) { + if (product && is_dmi_valid(product)) { len = strlen(card->dmi_longname); snprintf(card->dmi_longname + len, longname_buf_size - len, @@ -2000,7 +2031,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) * name in the product version field */ product_version = dmi_get_system_info(DMI_PRODUCT_VERSION); - if (product_version) { + if (product_version && is_dmi_valid(product_version)) { len = strlen(card->dmi_longname); snprintf(card->dmi_longname + len, longname_buf_size - len, @@ -2013,7 +2044,7 @@ int snd_soc_set_dmi_name(struct snd_soc_card *card, const char *flavour) } board = dmi_get_system_info(DMI_BOARD_NAME); - if (board) { + if (board && is_dmi_valid(board)) { len = strlen(card->dmi_longname); snprintf(card->dmi_longname + len, longname_buf_size - len,