ALSA: hda - Split codec->name to vendor and chip name strings
Split the name string in hda_codec struct to vendor_name and chip_name strings to be stored directly from the preset name. Since mostly only the chip name is referred in many patch_*.c, this results in the reduction of many codes in the end. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
2fc9989079
Коммит
812a2cca29
|
@ -623,7 +623,10 @@ static int get_codec_name(struct hda_codec *codec)
|
|||
const struct hda_vendor_id *c;
|
||||
const char *vendor = NULL;
|
||||
u16 vendor_id = codec->vendor_id >> 16;
|
||||
char tmp[16], name[32];
|
||||
char tmp[16];
|
||||
|
||||
if (codec->vendor_name)
|
||||
goto get_chip_name;
|
||||
|
||||
for (c = hda_vendor_ids; c->id; c++) {
|
||||
if (c->id == vendor_id) {
|
||||
|
@ -635,14 +638,21 @@ static int get_codec_name(struct hda_codec *codec)
|
|||
sprintf(tmp, "Generic %04x", vendor_id);
|
||||
vendor = tmp;
|
||||
}
|
||||
codec->vendor_name = kstrdup(vendor, GFP_KERNEL);
|
||||
if (!codec->vendor_name)
|
||||
return -ENOMEM;
|
||||
|
||||
get_chip_name:
|
||||
if (codec->chip_name)
|
||||
return 0;
|
||||
|
||||
if (codec->preset && codec->preset->name)
|
||||
snprintf(name, sizeof(name), "%s %s", vendor,
|
||||
codec->preset->name);
|
||||
else
|
||||
snprintf(name, sizeof(name), "%s ID %x", vendor,
|
||||
codec->vendor_id & 0xffff);
|
||||
codec->name = kstrdup(name, GFP_KERNEL);
|
||||
if (!codec->name)
|
||||
codec->chip_name = kstrdup(codec->preset->name, GFP_KERNEL);
|
||||
else {
|
||||
sprintf(tmp, "ID %x", codec->vendor_id & 0xffff);
|
||||
codec->chip_name = kstrdup(tmp, GFP_KERNEL);
|
||||
}
|
||||
if (!codec->chip_name)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
@ -848,7 +858,8 @@ static void snd_hda_codec_free(struct hda_codec *codec)
|
|||
module_put(codec->owner);
|
||||
free_hda_cache(&codec->amp_cache);
|
||||
free_hda_cache(&codec->cmd_cache);
|
||||
kfree(codec->name);
|
||||
kfree(codec->vendor_name);
|
||||
kfree(codec->chip_name);
|
||||
kfree(codec->modelname);
|
||||
kfree(codec->wcaps);
|
||||
kfree(codec);
|
||||
|
@ -989,15 +1000,16 @@ int snd_hda_codec_configure(struct hda_codec *codec)
|
|||
int err;
|
||||
|
||||
codec->preset = find_codec_preset(codec);
|
||||
if (!codec->name) {
|
||||
if (!codec->vendor_name || !codec->chip_name) {
|
||||
err = get_codec_name(codec);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
/* audio codec should override the mixer name */
|
||||
if (codec->afg || !*codec->bus->card->mixername)
|
||||
strlcpy(codec->bus->card->mixername, codec->name,
|
||||
sizeof(codec->bus->card->mixername));
|
||||
snprintf(codec->bus->card->mixername,
|
||||
sizeof(codec->bus->card->mixername),
|
||||
"%s %s", codec->vendor_name, codec->chip_name);
|
||||
|
||||
if (is_generic_config(codec)) {
|
||||
err = snd_hda_parse_generic_codec(codec);
|
||||
|
|
|
@ -748,7 +748,8 @@ struct hda_codec {
|
|||
/* detected preset */
|
||||
const struct hda_codec_preset *preset;
|
||||
struct module *owner;
|
||||
const char *name; /* codec name */
|
||||
const char *vendor_name; /* codec vendor name */
|
||||
const char *chip_name; /* codec chip name */
|
||||
const char *modelname; /* model name for preset */
|
||||
|
||||
/* set by patch */
|
||||
|
|
|
@ -242,7 +242,8 @@ CODEC_INFO_SHOW(subsystem_id);
|
|||
CODEC_INFO_SHOW(revision_id);
|
||||
CODEC_INFO_SHOW(afg);
|
||||
CODEC_INFO_SHOW(mfg);
|
||||
CODEC_INFO_STR_SHOW(name);
|
||||
CODEC_INFO_STR_SHOW(vendor_name);
|
||||
CODEC_INFO_STR_SHOW(chip_name);
|
||||
CODEC_INFO_STR_SHOW(modelname);
|
||||
|
||||
#define CODEC_INFO_STORE(type) \
|
||||
|
@ -275,7 +276,8 @@ static ssize_t type##_store(struct device *dev, \
|
|||
CODEC_INFO_STORE(vendor_id);
|
||||
CODEC_INFO_STORE(subsystem_id);
|
||||
CODEC_INFO_STORE(revision_id);
|
||||
CODEC_INFO_STR_STORE(name);
|
||||
CODEC_INFO_STR_STORE(vendor_name);
|
||||
CODEC_INFO_STR_STORE(chip_name);
|
||||
CODEC_INFO_STR_STORE(modelname);
|
||||
|
||||
#define CODEC_ACTION_STORE(type) \
|
||||
|
@ -499,7 +501,8 @@ static struct device_attribute codec_attrs[] = {
|
|||
CODEC_ATTR_RW(revision_id),
|
||||
CODEC_ATTR_RO(afg),
|
||||
CODEC_ATTR_RO(mfg),
|
||||
CODEC_ATTR_RW(name),
|
||||
CODEC_ATTR_RW(vendor_name),
|
||||
CODEC_ATTR_RW(chip_name),
|
||||
CODEC_ATTR_RW(modelname),
|
||||
CODEC_ATTR_RW(init_verbs),
|
||||
CODEC_ATTR_RW(hints),
|
||||
|
|
|
@ -466,8 +466,12 @@ static void print_codec_info(struct snd_info_entry *entry,
|
|||
hda_nid_t nid;
|
||||
int i, nodes;
|
||||
|
||||
snd_iprintf(buffer, "Codec: %s\n",
|
||||
codec->name ? codec->name : "Not Set");
|
||||
snd_iprintf(buffer, "Codec: ");
|
||||
if (codec->vendor_name && codec->chip_name)
|
||||
snd_iprintf(buffer, "%s %s\n",
|
||||
codec->vendor_name, codec->chip_name);
|
||||
else
|
||||
snd_iprintf(buffer, "Not Set\n");
|
||||
snd_iprintf(buffer, "Address: %d\n", codec->addr);
|
||||
snd_iprintf(buffer, "Function Id: 0x%x\n", codec->function_id);
|
||||
snd_iprintf(buffer, "Vendor Id: 0x%08x\n", codec->vendor_id);
|
||||
|
|
|
@ -277,13 +277,13 @@ struct alc_spec {
|
|||
*/
|
||||
unsigned int num_init_verbs;
|
||||
|
||||
char *stream_name_analog; /* analog PCM stream */
|
||||
char stream_name_analog[16]; /* analog PCM stream */
|
||||
struct hda_pcm_stream *stream_analog_playback;
|
||||
struct hda_pcm_stream *stream_analog_capture;
|
||||
struct hda_pcm_stream *stream_analog_alt_playback;
|
||||
struct hda_pcm_stream *stream_analog_alt_capture;
|
||||
|
||||
char *stream_name_digital; /* digital PCM stream */
|
||||
char stream_name_digital[16]; /* digital PCM stream */
|
||||
struct hda_pcm_stream *stream_digital_playback;
|
||||
struct hda_pcm_stream *stream_digital_capture;
|
||||
|
||||
|
@ -3169,7 +3169,10 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||
if (spec->no_analog)
|
||||
goto skip_analog;
|
||||
|
||||
snprintf(spec->stream_name_analog, sizeof(spec->stream_name_analog),
|
||||
"%s Analog", codec->chip_name);
|
||||
info->name = spec->stream_name_analog;
|
||||
|
||||
if (spec->stream_analog_playback) {
|
||||
if (snd_BUG_ON(!spec->multiout.dac_nids))
|
||||
return -EINVAL;
|
||||
|
@ -3195,6 +3198,9 @@ static int alc_build_pcms(struct hda_codec *codec)
|
|||
skip_analog:
|
||||
/* SPDIF for stream index #1 */
|
||||
if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
|
||||
snprintf(spec->stream_name_digital,
|
||||
sizeof(spec->stream_name_digital),
|
||||
"%s Digital", codec->chip_name);
|
||||
codec->num_pcms = 2;
|
||||
codec->slave_dig_outs = spec->multiout.slave_dig_outs;
|
||||
info = spec->pcm_rec + 1;
|
||||
|
@ -4432,12 +4438,10 @@ static int patch_alc880(struct hda_codec *codec)
|
|||
if (board_config != ALC880_AUTO)
|
||||
setup_preset(spec, &alc880_presets[board_config]);
|
||||
|
||||
spec->stream_name_analog = "ALC880 Analog";
|
||||
spec->stream_analog_playback = &alc880_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc880_pcm_analog_capture;
|
||||
spec->stream_analog_alt_capture = &alc880_pcm_analog_alt_capture;
|
||||
|
||||
spec->stream_name_digital = "ALC880 Digital";
|
||||
spec->stream_digital_playback = &alc880_pcm_digital_playback;
|
||||
spec->stream_digital_capture = &alc880_pcm_digital_capture;
|
||||
|
||||
|
@ -6078,11 +6082,9 @@ static int patch_alc260(struct hda_codec *codec)
|
|||
if (board_config != ALC260_AUTO)
|
||||
setup_preset(spec, &alc260_presets[board_config]);
|
||||
|
||||
spec->stream_name_analog = "ALC260 Analog";
|
||||
spec->stream_analog_playback = &alc260_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc260_pcm_analog_capture;
|
||||
|
||||
spec->stream_name_digital = "ALC260 Digital";
|
||||
spec->stream_digital_playback = &alc260_pcm_digital_playback;
|
||||
spec->stream_digital_capture = &alc260_pcm_digital_capture;
|
||||
|
||||
|
@ -7337,14 +7339,6 @@ static int patch_alc882(struct hda_codec *codec)
|
|||
if (board_config != ALC882_AUTO)
|
||||
setup_preset(spec, &alc882_presets[board_config]);
|
||||
|
||||
if (codec->vendor_id == 0x10ec0885) {
|
||||
spec->stream_name_analog = "ALC885 Analog";
|
||||
spec->stream_name_digital = "ALC885 Digital";
|
||||
} else {
|
||||
spec->stream_name_analog = "ALC882 Analog";
|
||||
spec->stream_name_digital = "ALC882 Digital";
|
||||
}
|
||||
|
||||
spec->stream_analog_playback = &alc882_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc882_pcm_analog_capture;
|
||||
/* FIXME: setup DAC5 */
|
||||
|
@ -9232,13 +9226,6 @@ static int patch_alc883(struct hda_codec *codec)
|
|||
|
||||
switch (codec->vendor_id) {
|
||||
case 0x10ec0888:
|
||||
if (codec->revision_id == 0x100101) {
|
||||
spec->stream_name_analog = "ALC1200 Analog";
|
||||
spec->stream_name_digital = "ALC1200 Digital";
|
||||
} else {
|
||||
spec->stream_name_analog = "ALC888 Analog";
|
||||
spec->stream_name_digital = "ALC888 Digital";
|
||||
}
|
||||
if (!spec->num_adc_nids) {
|
||||
spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids);
|
||||
spec->adc_nids = alc883_adc_nids;
|
||||
|
@ -9249,8 +9236,6 @@ static int patch_alc883(struct hda_codec *codec)
|
|||
spec->init_amp = ALC_INIT_DEFAULT; /* always initialize */
|
||||
break;
|
||||
case 0x10ec0889:
|
||||
spec->stream_name_analog = "ALC889 Analog";
|
||||
spec->stream_name_digital = "ALC889 Digital";
|
||||
if (!spec->num_adc_nids) {
|
||||
spec->num_adc_nids = ARRAY_SIZE(alc889_adc_nids);
|
||||
spec->adc_nids = alc889_adc_nids;
|
||||
|
@ -9261,8 +9246,6 @@ static int patch_alc883(struct hda_codec *codec)
|
|||
capture */
|
||||
break;
|
||||
default:
|
||||
spec->stream_name_analog = "ALC883 Analog";
|
||||
spec->stream_name_digital = "ALC883 Digital";
|
||||
if (!spec->num_adc_nids) {
|
||||
spec->num_adc_nids = ARRAY_SIZE(alc883_adc_nids);
|
||||
spec->adc_nids = alc883_adc_nids;
|
||||
|
@ -11087,11 +11070,9 @@ static int patch_alc262(struct hda_codec *codec)
|
|||
if (board_config != ALC262_AUTO)
|
||||
setup_preset(spec, &alc262_presets[board_config]);
|
||||
|
||||
spec->stream_name_analog = "ALC262 Analog";
|
||||
spec->stream_analog_playback = &alc262_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc262_pcm_analog_capture;
|
||||
|
||||
spec->stream_name_digital = "ALC262 Digital";
|
||||
spec->stream_digital_playback = &alc262_pcm_digital_playback;
|
||||
spec->stream_digital_capture = &alc262_pcm_digital_capture;
|
||||
|
||||
|
@ -12117,14 +12098,6 @@ static int patch_alc268(struct hda_codec *codec)
|
|||
if (board_config != ALC268_AUTO)
|
||||
setup_preset(spec, &alc268_presets[board_config]);
|
||||
|
||||
if (codec->vendor_id == 0x10ec0267) {
|
||||
spec->stream_name_analog = "ALC267 Analog";
|
||||
spec->stream_name_digital = "ALC267 Digital";
|
||||
} else {
|
||||
spec->stream_name_analog = "ALC268 Analog";
|
||||
spec->stream_name_digital = "ALC268 Digital";
|
||||
}
|
||||
|
||||
spec->stream_analog_playback = &alc268_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc268_pcm_analog_capture;
|
||||
spec->stream_analog_alt_capture = &alc268_pcm_analog_alt_capture;
|
||||
|
@ -12979,7 +12952,6 @@ static int patch_alc269(struct hda_codec *codec)
|
|||
if (board_config != ALC269_AUTO)
|
||||
setup_preset(spec, &alc269_presets[board_config]);
|
||||
|
||||
spec->stream_name_analog = "ALC269 Analog";
|
||||
if (codec->subsystem_id == 0x17aa3bf8) {
|
||||
/* Due to a hardware problem on Lenovo Ideadpad, we need to
|
||||
* fix the sample rate of analog I/O to 44.1kHz
|
||||
|
@ -12990,7 +12962,6 @@ static int patch_alc269(struct hda_codec *codec)
|
|||
spec->stream_analog_playback = &alc269_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc269_pcm_analog_capture;
|
||||
}
|
||||
spec->stream_name_digital = "ALC269 Digital";
|
||||
spec->stream_digital_playback = &alc269_pcm_digital_playback;
|
||||
spec->stream_digital_capture = &alc269_pcm_digital_capture;
|
||||
|
||||
|
@ -14080,11 +14051,9 @@ static int patch_alc861(struct hda_codec *codec)
|
|||
if (board_config != ALC861_AUTO)
|
||||
setup_preset(spec, &alc861_presets[board_config]);
|
||||
|
||||
spec->stream_name_analog = "ALC861 Analog";
|
||||
spec->stream_analog_playback = &alc861_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc861_pcm_analog_capture;
|
||||
|
||||
spec->stream_name_digital = "ALC861 Digital";
|
||||
spec->stream_digital_playback = &alc861_pcm_digital_playback;
|
||||
spec->stream_digital_capture = &alc861_pcm_digital_capture;
|
||||
|
||||
|
@ -15007,13 +14976,8 @@ static int patch_alc861vd(struct hda_codec *codec)
|
|||
setup_preset(spec, &alc861vd_presets[board_config]);
|
||||
|
||||
if (codec->vendor_id == 0x10ec0660) {
|
||||
spec->stream_name_analog = "ALC660-VD Analog";
|
||||
spec->stream_name_digital = "ALC660-VD Digital";
|
||||
/* always turn on EAPD */
|
||||
add_verb(spec, alc660vd_eapd_verbs);
|
||||
} else {
|
||||
spec->stream_name_analog = "ALC861VD Analog";
|
||||
spec->stream_name_digital = "ALC861VD Digital";
|
||||
}
|
||||
|
||||
spec->stream_analog_playback = &alc861vd_pcm_analog_playback;
|
||||
|
@ -16936,17 +16900,6 @@ static int patch_alc662(struct hda_codec *codec)
|
|||
if (board_config != ALC662_AUTO)
|
||||
setup_preset(spec, &alc662_presets[board_config]);
|
||||
|
||||
if (codec->vendor_id == 0x10ec0663) {
|
||||
spec->stream_name_analog = "ALC663 Analog";
|
||||
spec->stream_name_digital = "ALC663 Digital";
|
||||
} else if (codec->vendor_id == 0x10ec0272) {
|
||||
spec->stream_name_analog = "ALC272 Analog";
|
||||
spec->stream_name_digital = "ALC272 Digital";
|
||||
} else {
|
||||
spec->stream_name_analog = "ALC662 Analog";
|
||||
spec->stream_name_digital = "ALC662 Digital";
|
||||
}
|
||||
|
||||
spec->stream_analog_playback = &alc662_pcm_analog_playback;
|
||||
spec->stream_analog_capture = &alc662_pcm_analog_capture;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче