- memset(&ac97, 0, sizeof(ac97));
- ac97.private_data = chip;
- ac97.private_free = snd_cs46xx_mixer_free_ac97;
- ac97.num = CS46XX_SECONDARY_CODEC_INDEX;
-
- snd_cs46xx_codec_write(chip, AC97_RESET, 0,
- CS46XX_SECONDARY_CODEC_INDEX);
- udelay(10);
-
- if (snd_cs46xx_codec_read(chip, AC97_RESET,
- CS46XX_SECONDARY_CODEC_INDEX) & 0x8000) {
- snd_printdd("snd_cs46xx: seconadry codec not present\n");
- goto _no_sec_codec;
- }
-
- snd_cs46xx_codec_write(chip, AC97_MASTER, 0x8000,
- CS46XX_SECONDARY_CODEC_INDEX);
- for (idx = 0; idx < 100; ++idx) {
- if (snd_cs46xx_codec_read(chip, AC97_MASTER,
- CS46XX_SECONDARY_CODEC_INDEX) == 0x8000) {
- goto _ok2;
- }
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(HZ/100);
- }
-
- _no_sec_codec:
- snd_printdd("snd_cs46xx: secondary codec did not respond ...\n");
-
- chip->nr_ac97_codecs = 1;
-
- /* well, one codec only ... */
- goto _end;
- _ok2:
- if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97[CS46XX_SECONDARY_CODEC_INDEX])) < 0)
- return err;
- chip->nr_ac97_codecs = 2;
-
- _end:
-