|
@@ -4816,121 +4816,6 @@ int snd_hda_build_pcms(struct hda_bus *bus)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(snd_hda_build_pcms);
|
|
|
|
|
|
-/**
|
|
|
- * snd_hda_check_board_config - compare the current codec with the config table
|
|
|
- * @codec: the HDA codec
|
|
|
- * @num_configs: number of config enums
|
|
|
- * @models: array of model name strings
|
|
|
- * @tbl: configuration table, terminated by null entries
|
|
|
- *
|
|
|
- * Compares the modelname or PCI subsystem id of the current codec with the
|
|
|
- * given configuration table. If a matching entry is found, returns its
|
|
|
- * config value (supposed to be 0 or positive).
|
|
|
- *
|
|
|
- * If no entries are matching, the function returns a negative value.
|
|
|
- */
|
|
|
-int snd_hda_check_board_config(struct hda_codec *codec,
|
|
|
- int num_configs, const char * const *models,
|
|
|
- const struct snd_pci_quirk *tbl)
|
|
|
-{
|
|
|
- if (codec->modelname && models) {
|
|
|
- int i;
|
|
|
- for (i = 0; i < num_configs; i++) {
|
|
|
- if (models[i] &&
|
|
|
- !strcmp(codec->modelname, models[i])) {
|
|
|
- codec_info(codec, "model '%s' is selected\n",
|
|
|
- models[i]);
|
|
|
- return i;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!codec->bus->pci || !tbl)
|
|
|
- return -1;
|
|
|
-
|
|
|
- tbl = snd_pci_quirk_lookup(codec->bus->pci, tbl);
|
|
|
- if (!tbl)
|
|
|
- return -1;
|
|
|
- if (tbl->value >= 0 && tbl->value < num_configs) {
|
|
|
-#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
- char tmp[10];
|
|
|
- const char *model = NULL;
|
|
|
- if (models)
|
|
|
- model = models[tbl->value];
|
|
|
- if (!model) {
|
|
|
- sprintf(tmp, "#%d", tbl->value);
|
|
|
- model = tmp;
|
|
|
- }
|
|
|
- codec_info(codec, "model '%s' is selected for config %x:%x (%s)\n",
|
|
|
- model, tbl->subvendor, tbl->subdevice,
|
|
|
- (tbl->name ? tbl->name : "Unknown device"));
|
|
|
-#endif
|
|
|
- return tbl->value;
|
|
|
- }
|
|
|
- return -1;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(snd_hda_check_board_config);
|
|
|
-
|
|
|
-/**
|
|
|
- * snd_hda_check_board_codec_sid_config - compare the current codec
|
|
|
- subsystem ID with the
|
|
|
- config table
|
|
|
-
|
|
|
- This is important for Gateway notebooks with SB450 HDA Audio
|
|
|
- where the vendor ID of the PCI device is:
|
|
|
- ATI Technologies Inc SB450 HDA Audio [1002:437b]
|
|
|
- and the vendor/subvendor are found only at the codec.
|
|
|
-
|
|
|
- * @codec: the HDA codec
|
|
|
- * @num_configs: number of config enums
|
|
|
- * @models: array of model name strings
|
|
|
- * @tbl: configuration table, terminated by null entries
|
|
|
- *
|
|
|
- * Compares the modelname or PCI subsystem id of the current codec with the
|
|
|
- * given configuration table. If a matching entry is found, returns its
|
|
|
- * config value (supposed to be 0 or positive).
|
|
|
- *
|
|
|
- * If no entries are matching, the function returns a negative value.
|
|
|
- */
|
|
|
-int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
|
|
|
- int num_configs, const char * const *models,
|
|
|
- const struct snd_pci_quirk *tbl)
|
|
|
-{
|
|
|
- const struct snd_pci_quirk *q;
|
|
|
-
|
|
|
- /* Search for codec ID */
|
|
|
- for (q = tbl; q->subvendor; q++) {
|
|
|
- unsigned int mask = 0xffff0000 | q->subdevice_mask;
|
|
|
- unsigned int id = (q->subdevice | (q->subvendor << 16)) & mask;
|
|
|
- if ((codec->subsystem_id & mask) == id)
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if (!q->subvendor)
|
|
|
- return -1;
|
|
|
-
|
|
|
- tbl = q;
|
|
|
-
|
|
|
- if (tbl->value >= 0 && tbl->value < num_configs) {
|
|
|
-#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
- char tmp[10];
|
|
|
- const char *model = NULL;
|
|
|
- if (models)
|
|
|
- model = models[tbl->value];
|
|
|
- if (!model) {
|
|
|
- sprintf(tmp, "#%d", tbl->value);
|
|
|
- model = tmp;
|
|
|
- }
|
|
|
- codec_info(codec, "model '%s' is selected for config %x:%x (%s)\n",
|
|
|
- model, tbl->subvendor, tbl->subdevice,
|
|
|
- (tbl->name ? tbl->name : "Unknown device"));
|
|
|
-#endif
|
|
|
- return tbl->value;
|
|
|
- }
|
|
|
- return -1;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(snd_hda_check_board_codec_sid_config);
|
|
|
-
|
|
|
/**
|
|
|
* snd_hda_add_new_ctls - create controls from the array
|
|
|
* @codec: the HDA codec
|