#define AC97_RATES_MIC_ADC     4
 #define AC97_RATES_SPDIF       5
 
-/* shared controllers */
-enum {
-       AC97_SHARED_TYPE_NONE,
-       AC97_SHARED_TYPE_ICH,
-       AC97_SHARED_TYPE_ATIIXP,
-       AC97_SHARED_TYPE_VIA,
-       AC97_SHARED_TYPES
-};
-
 /*
  *
  */
        unsigned short used_slots[2][4]; /* actually used PCM slots */
        unsigned short pcms_count; /* count of PCMs */
        struct ac97_pcm *pcms;
-       unsigned int shared_type;       /* type of shared controller betwen audio and modem */
        ac97_t *codec[4];
        snd_info_entry_t *proc;
 };
 
   /*  31 */ "Reserved 31"
 };
 
-/*
- * Shared AC97 controllers (ICH, ATIIXP...)
- */
-static DECLARE_MUTEX(shared_codec_mutex);
-static ac97_t *shared_codec[AC97_SHARED_TYPES][4];
-
 
 /*
  *  I/O routines
 {
        if (ac97) {
                snd_ac97_proc_done(ac97);
-               if (ac97->bus) {
+               if (ac97->bus)
                        ac97->bus->codec[ac97->num] = NULL;
-                       if (ac97->bus->shared_type) {
-                               down(&shared_codec_mutex);
-                               shared_codec[ac97->bus->shared_type-1][ac97->num] = NULL;
-                               up(&shared_codec_mutex);
-                       }
-               }
                if (ac97->private_free)
                        ac97->private_free(ac97);
                kfree(ac97);
        snd_assert(bus != NULL && template != NULL, return -EINVAL);
        snd_assert(template->num < 4 && bus->codec[template->num] == NULL, return -EINVAL);
 
-       snd_assert(bus->shared_type <= AC97_SHARED_TYPES, return -EINVAL);
-       if (bus->shared_type) {
-               /* already shared? */
-               down(&shared_codec_mutex);
-               ac97 = shared_codec[bus->shared_type-1][template->num];
-               if (ac97) {
-                       if ((ac97_is_audio(ac97) && (template->scaps & AC97_SCAP_SKIP_AUDIO)) ||
-                           (ac97_is_modem(ac97) && (template->scaps & AC97_SCAP_SKIP_MODEM))) {
-                               up(&shared_codec_mutex);
-                               return -EACCES; /* skip this */
-                       }
-               }
-               up(&shared_codec_mutex);
-       }
-
        card = bus->card;
        ac97 = kzalloc(sizeof(*ac97), GFP_KERNEL);
        if (ac97 == NULL)
                }
        }
        /* make sure the proper powerdown bits are cleared */
-       if (ac97->scaps) {
+       if (ac97->scaps && ac97_is_audio(ac97)) {
                reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS);
                if (ac97->scaps & AC97_SCAP_SURROUND_DAC) 
                        reg &= ~AC97_EA_PRJ;
                return err;
        }
        *rac97 = ac97;
-
-       if (bus->shared_type) {
-               down(&shared_codec_mutex);
-               shared_codec[bus->shared_type-1][ac97->num] = ac97;
-               up(&shared_codec_mutex);
-       }
-
        return 0;
 }
 
 
        if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
                return err;
        pbus->clock = clock;
-       pbus->shared_type = AC97_SHARED_TYPE_ATIIXP;    /* shared with modem driver */
        chip->ac97_bus = pbus;
 
        codec_count = 0;
 
        if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
                return err;
        pbus->clock = clock;
-       pbus->shared_type = AC97_SHARED_TYPE_ATIIXP;    /* shared with audio driver */
        chip->ac97_bus = pbus;
 
        codec_count = 0;
 
        if ((err = snd_ac97_bus(chip->card, 0, ops, chip, &pbus)) < 0)
                goto __err;
        pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
-       pbus->shared_type = AC97_SHARED_TYPE_ICH;       /* shared with modem driver */
        if (ac97_clock >= 8000 && ac97_clock <= 48000)
                pbus->clock = ac97_clock;
        /* FIXME: my test board doesn't work well with VRA... */
 
        if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
                goto __err;
        pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
-       pbus->shared_type = AC97_SHARED_TYPE_ICH;       /* shared with audio driver */
        if (ac97_clock >= 8000 && ac97_clock <= 48000)
                pbus->clock = ac97_clock;
        chip->ac97_bus = pbus;
 
                return err;
        chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
        chip->ac97_bus->clock = chip->ac97_clock;
-       chip->ac97_bus->shared_type = AC97_SHARED_TYPE_VIA;
 
        memset(&ac97, 0, sizeof(ac97));
        ac97.private_data = chip;
        ac97.private_free = snd_via82xx_mixer_free_ac97;
        ac97.pci = chip->pci;
+       ac97.scaps = AC97_SCAP_SKIP_MODEM;
        if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0)
                return err;
 
 
                return err;
        chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
        chip->ac97_bus->clock = chip->ac97_clock;
-       chip->ac97_bus->shared_type = AC97_SHARED_TYPE_VIA;
 
        memset(&ac97, 0, sizeof(ac97));
        ac97.private_data = chip;