2234 return -ENOMEM;
2235 }
2236 }
2237 if (ac97_is_modem(ac97)) {
2238 char comp[16];
2239 if (card->mixername[0] == '\0') {
2240 strcpy(card->mixername, name);
2241 } else {
2242 if (strlen(card->mixername) + 1 + strlen(name) + 1 <= sizeof(card->mixername)) {
2243 strcat(card->mixername, ",");
2244 strcat(card->mixername, name);
2245 }
2246 }
2247 sprintf(comp, "AC97m:%08x", ac97->id);
2248 if ((err = snd_component_add(card, comp)) < 0) {
2249 snd_ac97_free(ac97);
2250 return err;
2251 }
2252 if (snd_ac97_modem_build(card, ac97) < 0) {
2253 snd_ac97_free(ac97);
2254 return -ENOMEM;
2255 }
2256 }
2257 if (ac97_is_audio(ac97))
2258 update_power_regs(ac97);
2259 snd_ac97_proc_init(ac97);
2260 if ((err = snd_device_new(card, SNDRV_DEV_CODEC, ac97, &ops)) < 0) {
2261 snd_ac97_free(ac97);
2262 return err;
2263 }
2264 *rac97 = ac97;
2265 return 0;
2266}
2267
2268EXPORT_SYMBOL(snd_ac97_mixer);
2269
2270
2271
2272
2273
2274