[ALSA] Removing obsolete AC97_SHARED_TYPES
This patch cleans last ac97 audio/modem codec interception in initialization procedures (ac97_mixer_new()) and removes obsolete SHARED_TYPE 'locking' which prevents from AMC codecs to function correctly. Signed-off-by: Sasha Khapyorsky <sashak@smlink.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
6632d198c6
commit
2ba71978c0
|
@ -387,15 +387,6 @@
|
||||||
#define AC97_RATES_MIC_ADC 4
|
#define AC97_RATES_MIC_ADC 4
|
||||||
#define AC97_RATES_SPDIF 5
|
#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
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -468,7 +459,6 @@ struct _snd_ac97_bus {
|
||||||
unsigned short used_slots[2][4]; /* actually used PCM slots */
|
unsigned short used_slots[2][4]; /* actually used PCM slots */
|
||||||
unsigned short pcms_count; /* count of PCMs */
|
unsigned short pcms_count; /* count of PCMs */
|
||||||
struct ac97_pcm *pcms;
|
struct ac97_pcm *pcms;
|
||||||
unsigned int shared_type; /* type of shared controller betwen audio and modem */
|
|
||||||
ac97_t *codec[4];
|
ac97_t *codec[4];
|
||||||
snd_info_entry_t *proc;
|
snd_info_entry_t *proc;
|
||||||
};
|
};
|
||||||
|
|
|
@ -220,12 +220,6 @@ const char *snd_ac97_stereo_enhancements[] =
|
||||||
/* 31 */ "Reserved 31"
|
/* 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
|
* I/O routines
|
||||||
|
@ -996,14 +990,8 @@ static int snd_ac97_free(ac97_t *ac97)
|
||||||
{
|
{
|
||||||
if (ac97) {
|
if (ac97) {
|
||||||
snd_ac97_proc_done(ac97);
|
snd_ac97_proc_done(ac97);
|
||||||
if (ac97->bus) {
|
if (ac97->bus)
|
||||||
ac97->bus->codec[ac97->num] = NULL;
|
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)
|
if (ac97->private_free)
|
||||||
ac97->private_free(ac97);
|
ac97->private_free(ac97);
|
||||||
kfree(ac97);
|
kfree(ac97);
|
||||||
|
@ -1889,21 +1877,6 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
|
||||||
snd_assert(bus != NULL && template != NULL, return -EINVAL);
|
snd_assert(bus != NULL && template != NULL, return -EINVAL);
|
||||||
snd_assert(template->num < 4 && bus->codec[template->num] == 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;
|
card = bus->card;
|
||||||
ac97 = kzalloc(sizeof(*ac97), GFP_KERNEL);
|
ac97 = kzalloc(sizeof(*ac97), GFP_KERNEL);
|
||||||
if (ac97 == NULL)
|
if (ac97 == NULL)
|
||||||
|
@ -2153,7 +2126,7 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* make sure the proper powerdown bits are cleared */
|
/* 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);
|
reg = snd_ac97_read(ac97, AC97_EXTENDED_STATUS);
|
||||||
if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
|
if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
|
||||||
reg &= ~AC97_EA_PRJ;
|
reg &= ~AC97_EA_PRJ;
|
||||||
|
@ -2167,13 +2140,6 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
*rac97 = ac97;
|
*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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1372,7 +1372,6 @@ static int __devinit snd_atiixp_mixer_new(atiixp_t *chip, int clock, const char
|
||||||
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
||||||
return err;
|
return err;
|
||||||
pbus->clock = clock;
|
pbus->clock = clock;
|
||||||
pbus->shared_type = AC97_SHARED_TYPE_ATIIXP; /* shared with modem driver */
|
|
||||||
chip->ac97_bus = pbus;
|
chip->ac97_bus = pbus;
|
||||||
|
|
||||||
codec_count = 0;
|
codec_count = 0;
|
||||||
|
|
|
@ -1068,7 +1068,6 @@ static int __devinit snd_atiixp_mixer_new(atiixp_t *chip, int clock)
|
||||||
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
||||||
return err;
|
return err;
|
||||||
pbus->clock = clock;
|
pbus->clock = clock;
|
||||||
pbus->shared_type = AC97_SHARED_TYPE_ATIIXP; /* shared with audio driver */
|
|
||||||
chip->ac97_bus = pbus;
|
chip->ac97_bus = pbus;
|
||||||
|
|
||||||
codec_count = 0;
|
codec_count = 0;
|
||||||
|
|
|
@ -2022,7 +2022,6 @@ static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock, const
|
||||||
if ((err = snd_ac97_bus(chip->card, 0, ops, chip, &pbus)) < 0)
|
if ((err = snd_ac97_bus(chip->card, 0, ops, chip, &pbus)) < 0)
|
||||||
goto __err;
|
goto __err;
|
||||||
pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
|
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)
|
if (ac97_clock >= 8000 && ac97_clock <= 48000)
|
||||||
pbus->clock = ac97_clock;
|
pbus->clock = ac97_clock;
|
||||||
/* FIXME: my test board doesn't work well with VRA... */
|
/* FIXME: my test board doesn't work well with VRA... */
|
||||||
|
|
|
@ -855,7 +855,6 @@ static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock)
|
||||||
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
|
||||||
goto __err;
|
goto __err;
|
||||||
pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
|
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)
|
if (ac97_clock >= 8000 && ac97_clock <= 48000)
|
||||||
pbus->clock = ac97_clock;
|
pbus->clock = ac97_clock;
|
||||||
chip->ac97_bus = pbus;
|
chip->ac97_bus = pbus;
|
||||||
|
|
|
@ -1616,12 +1616,12 @@ static int __devinit snd_via82xx_mixer_new(via82xx_t *chip, const char *quirk_ov
|
||||||
return err;
|
return err;
|
||||||
chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
|
chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
|
||||||
chip->ac97_bus->clock = chip->ac97_clock;
|
chip->ac97_bus->clock = chip->ac97_clock;
|
||||||
chip->ac97_bus->shared_type = AC97_SHARED_TYPE_VIA;
|
|
||||||
|
|
||||||
memset(&ac97, 0, sizeof(ac97));
|
memset(&ac97, 0, sizeof(ac97));
|
||||||
ac97.private_data = chip;
|
ac97.private_data = chip;
|
||||||
ac97.private_free = snd_via82xx_mixer_free_ac97;
|
ac97.private_free = snd_via82xx_mixer_free_ac97;
|
||||||
ac97.pci = chip->pci;
|
ac97.pci = chip->pci;
|
||||||
|
ac97.scaps = AC97_SCAP_SKIP_MODEM;
|
||||||
if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0)
|
if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
|
@ -879,7 +879,6 @@ static int __devinit snd_via82xx_mixer_new(via82xx_t *chip)
|
||||||
return err;
|
return err;
|
||||||
chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
|
chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
|
||||||
chip->ac97_bus->clock = chip->ac97_clock;
|
chip->ac97_bus->clock = chip->ac97_clock;
|
||||||
chip->ac97_bus->shared_type = AC97_SHARED_TYPE_VIA;
|
|
||||||
|
|
||||||
memset(&ac97, 0, sizeof(ac97));
|
memset(&ac97, 0, sizeof(ac97));
|
||||||
ac97.private_data = chip;
|
ac97.private_data = chip;
|
||||||
|
|
Loading…
Reference in New Issue