Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
This commit is contained in:
commit
8aa19ad84c
19 changed files with 115 additions and 53 deletions
|
@ -527,6 +527,8 @@ struct _snd_ac97 {
|
||||||
struct device dev;
|
struct device dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define to_ac97_t(d) container_of(d, struct _snd_ac97, dev)
|
||||||
|
|
||||||
/* conditions */
|
/* conditions */
|
||||||
static inline int ac97_is_audio(ac97_t * ac97)
|
static inline int ac97_is_audio(ac97_t * ac97)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1059,7 +1059,7 @@ typedef struct {
|
||||||
unsigned char spk71; /* Has 7.1 speakers */
|
unsigned char spk71; /* Has 7.1 speakers */
|
||||||
unsigned char sblive51; /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
|
unsigned char sblive51; /* SBLive! 5.1 - extout 0x11 -> center, 0x12 -> lfe */
|
||||||
unsigned char spdif_bug; /* Has Spdif phasing bug */
|
unsigned char spdif_bug; /* Has Spdif phasing bug */
|
||||||
unsigned char ac97_chip; /* Has an AC97 chip */
|
unsigned char ac97_chip; /* Has an AC97 chip: 1 = mandatory, 2 = optional */
|
||||||
unsigned char ecard; /* APS EEPROM */
|
unsigned char ecard; /* APS EEPROM */
|
||||||
const char *driver;
|
const char *driver;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
|
@ -245,7 +245,7 @@ static pxa2xx_pcm_client_t pxa2xx_ac97_pcm_client = {
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
|
||||||
static int pxa2xx_ac97_do_suspend(snd_card_t *card, unsigned int state)
|
static int pxa2xx_ac97_do_suspend(snd_card_t *card, pm_message_t state)
|
||||||
{
|
{
|
||||||
if (card->power_state != SNDRV_CTL_POWER_D3cold) {
|
if (card->power_state != SNDRV_CTL_POWER_D3cold) {
|
||||||
pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data;
|
pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data;
|
||||||
|
|
|
@ -914,6 +914,7 @@ static int __init alsa_card_opl3sa2_init(void)
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PNP
|
#ifdef CONFIG_PNP
|
||||||
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
||||||
|
pnp_unregister_driver(&opl3sa2_pnp_driver);
|
||||||
#endif
|
#endif
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
@ -927,6 +928,7 @@ static void __exit alsa_card_opl3sa2_exit(void)
|
||||||
#ifdef CONFIG_PNP
|
#ifdef CONFIG_PNP
|
||||||
/* PnP cards first */
|
/* PnP cards first */
|
||||||
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
pnp_unregister_card_driver(&opl3sa2_pnpc_driver);
|
||||||
|
pnp_unregister_driver(&opl3sa2_pnp_driver);
|
||||||
#endif
|
#endif
|
||||||
for (idx = 0; idx < SNDRV_CARDS; idx++)
|
for (idx = 0; idx < SNDRV_CARDS; idx++)
|
||||||
snd_card_free(snd_opl3sa2_legacy[idx]);
|
snd_card_free(snd_opl3sa2_legacy[idx]);
|
||||||
|
|
|
@ -17,25 +17,21 @@
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Codec families have names seperated by commas, so we search for an
|
* Let drivers decide whether they want to support given codec from their
|
||||||
* individual codec name within the family string.
|
* probe method. Drivers have direct access to the ac97_t structure and may
|
||||||
|
* decide based on the id field amongst other things.
|
||||||
*/
|
*/
|
||||||
static int ac97_bus_match(struct device *dev, struct device_driver *drv)
|
static int ac97_bus_match(struct device *dev, struct device_driver *drv)
|
||||||
{
|
{
|
||||||
return (strstr(dev->bus_id, drv->name) != NULL);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ac97_bus_suspend(struct device *dev, pm_message_t state)
|
static int ac97_bus_suspend(struct device *dev, pm_message_t state)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (dev->driver && dev->driver->suspend) {
|
if (dev->driver && dev->driver->suspend)
|
||||||
ret = dev->driver->suspend(dev, state, SUSPEND_DISABLE);
|
ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN);
|
||||||
if (ret == 0)
|
|
||||||
ret = dev->driver->suspend(dev, state, SUSPEND_SAVE_STATE);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN);
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,13 +39,8 @@ static int ac97_bus_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (dev->driver && dev->driver->resume) {
|
if (dev->driver && dev->driver->resume)
|
||||||
ret = dev->driver->resume(dev, RESUME_POWER_ON);
|
ret = dev->driver->resume(dev, RESUME_POWER_ON);
|
||||||
if (ret == 0)
|
|
||||||
ret = dev->driver->resume(dev, RESUME_RESTORE_STATE);
|
|
||||||
if (ret == 0)
|
|
||||||
ret = dev->driver->resume(dev, RESUME_ENABLE);
|
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1557,7 +1557,7 @@ static int snd_ac97_modem_build(snd_card_t * card, ac97_t * ac97)
|
||||||
|
|
||||||
/* build modem switches */
|
/* build modem switches */
|
||||||
for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_modem_switches); idx++)
|
for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_modem_switches); idx++)
|
||||||
if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_modem_switches[idx], ac97))) < 0)
|
if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ac97_controls_modem_switches[idx], ac97))) < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* build chip specific controls */
|
/* build chip specific controls */
|
||||||
|
@ -1828,7 +1828,6 @@ static int snd_ac97_dev_register(snd_device_t *device)
|
||||||
|
|
||||||
ac97->dev.bus = &ac97_bus_type;
|
ac97->dev.bus = &ac97_bus_type;
|
||||||
ac97->dev.parent = ac97->bus->card->dev;
|
ac97->dev.parent = ac97->bus->card->dev;
|
||||||
ac97->dev.platform_data = ac97;
|
|
||||||
ac97->dev.release = ac97_device_release;
|
ac97->dev.release = ac97_device_release;
|
||||||
snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "card%d-%d", ac97->bus->card->number, ac97->num);
|
snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "card%d-%d", ac97->bus->card->number, ac97->num);
|
||||||
if ((err = device_register(&ac97->dev)) < 0) {
|
if ((err = device_register(&ac97->dev)) < 0) {
|
||||||
|
|
|
@ -2752,7 +2752,11 @@ AC97_DOUBLE("Modem Speaker Volume", 0x5c, 14, 12, 3, 1)
|
||||||
|
|
||||||
static int patch_si3036_specific(ac97_t * ac97)
|
static int patch_si3036_specific(ac97_t * ac97)
|
||||||
{
|
{
|
||||||
return patch_build_controls(ac97, snd_ac97_controls_si3036, ARRAY_SIZE(snd_ac97_controls_si3036));
|
int idx, err;
|
||||||
|
for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_si3036); idx++)
|
||||||
|
if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_si3036[idx], ac97))) < 0)
|
||||||
|
return err;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct snd_ac97_build_ops patch_si3036_ops = {
|
static struct snd_ac97_build_ops patch_si3036_ops = {
|
||||||
|
|
|
@ -1993,8 +1993,10 @@ static int __devinit snd_ali_mixer(ali_t * codec)
|
||||||
if ((err = snd_ac97_mixer(codec->ac97_bus, &ac97, &codec->ac97[i])) < 0) {
|
if ((err = snd_ac97_mixer(codec->ac97_bus, &ac97, &codec->ac97[i])) < 0) {
|
||||||
snd_printk("ali mixer %d creating error.\n", i);
|
snd_printk("ali mixer %d creating error.\n", i);
|
||||||
if(i == 0)
|
if(i == 0)
|
||||||
return err;
|
return err;
|
||||||
}
|
codec->num_of_codecs = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (codec->spdif_support) {
|
if (codec->spdif_support) {
|
||||||
|
|
|
@ -756,9 +756,12 @@ static emu_chip_details_t emu_chip_details[] = {
|
||||||
.sblive51 = 1} ,
|
.sblive51 = 1} ,
|
||||||
/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
|
/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
|
||||||
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
|
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
|
||||||
.driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]",
|
.driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]",
|
||||||
.id = "Live",
|
.id = "Live",
|
||||||
.emu10k1_chip = 1,
|
.emu10k1_chip = 1,
|
||||||
|
.ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
|
||||||
|
* share the same IDs!
|
||||||
|
*/
|
||||||
.sblive51 = 1} ,
|
.sblive51 = 1} ,
|
||||||
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
|
{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
|
||||||
.driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
|
.driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
|
||||||
|
|
|
@ -810,8 +810,14 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
|
||||||
ac97.private_data = emu;
|
ac97.private_data = emu;
|
||||||
ac97.private_free = snd_emu10k1_mixer_free_ac97;
|
ac97.private_free = snd_emu10k1_mixer_free_ac97;
|
||||||
ac97.scaps = AC97_SCAP_NO_SPDIF;
|
ac97.scaps = AC97_SCAP_NO_SPDIF;
|
||||||
if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0)
|
if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) {
|
||||||
return err;
|
if (emu->card_capabilities->ac97_chip == 1)
|
||||||
|
return err;
|
||||||
|
snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n");
|
||||||
|
snd_printd(KERN_INFO" Proceeding without ac97 mixers...\n");
|
||||||
|
snd_device_free(emu->card, pbus);
|
||||||
|
goto no_ac97; /* FIXME: get rid of ugly gotos.. */
|
||||||
|
}
|
||||||
if (emu->audigy) {
|
if (emu->audigy) {
|
||||||
/* set master volume to 0 dB */
|
/* set master volume to 0 dB */
|
||||||
snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000);
|
snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000);
|
||||||
|
@ -836,6 +842,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu,
|
||||||
for (; *c; c++)
|
for (; *c; c++)
|
||||||
remove_ctl(card, *c);
|
remove_ctl(card, *c);
|
||||||
} else {
|
} else {
|
||||||
|
no_ac97:
|
||||||
if (emu->card_capabilities->ecard)
|
if (emu->card_capabilities->ecard)
|
||||||
strcpy(emu->card->mixername, "EMU APS");
|
strcpy(emu->card->mixername, "EMU APS");
|
||||||
else if (emu->audigy)
|
else if (emu->audigy)
|
||||||
|
|
|
@ -881,10 +881,8 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec)
|
||||||
struct hda_gspec *spec;
|
struct hda_gspec *spec;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if(!codec->afg) {
|
if(!codec->afg)
|
||||||
snd_printdd("hda_generic: no generic modem yet\n");
|
return 0;
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
spec = kzalloc(sizeof(*spec), GFP_KERNEL);
|
spec = kzalloc(sizeof(*spec), GFP_KERNEL);
|
||||||
if (spec == NULL) {
|
if (spec == NULL) {
|
||||||
|
|
|
@ -1137,6 +1137,7 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream)
|
||||||
pos = azx_sd_readl(azx_dev, SD_LPIB);
|
pos = azx_sd_readl(azx_dev, SD_LPIB);
|
||||||
if (chip->position_fix == POS_FIX_FIFO)
|
if (chip->position_fix == POS_FIX_FIFO)
|
||||||
pos += azx_dev->fifo_size;
|
pos += azx_dev->fifo_size;
|
||||||
|
#if 0 /* disabled temprarily, auto-correction doesn't work well... */
|
||||||
else if (chip->position_fix == POS_FIX_AUTO && azx_dev->period_updating) {
|
else if (chip->position_fix == POS_FIX_AUTO && azx_dev->period_updating) {
|
||||||
/* check the validity of DMA position */
|
/* check the validity of DMA position */
|
||||||
unsigned int diff = 0;
|
unsigned int diff = 0;
|
||||||
|
@ -1157,6 +1158,10 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream)
|
||||||
}
|
}
|
||||||
azx_dev->period_updating = 0;
|
azx_dev->period_updating = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
else if (chip->position_fix == POS_FIX_AUTO)
|
||||||
|
pos += azx_dev->fifo_size;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (pos >= azx_dev->bufsize)
|
if (pos >= azx_dev->bufsize)
|
||||||
pos = 0;
|
pos = 0;
|
||||||
|
|
|
@ -1385,8 +1385,8 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
|
||||||
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
|
||||||
ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
|
||||||
ALC_BIND_MUTE("CLFE Playback Volume", 0x0e, 2, HDA_INPUT),
|
ALC_BIND_MUTE("CLFE Playback Switch", 0x0e, 2, HDA_INPUT),
|
||||||
ALC_BIND_MUTE("Side Playback Volume", 0x0f, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
|
||||||
PIN_CTL_TEST("Front Pin Mode", 0x14),
|
PIN_CTL_TEST("Front Pin Mode", 0x14),
|
||||||
PIN_CTL_TEST("Surround Pin Mode", 0x15),
|
PIN_CTL_TEST("Surround Pin Mode", 0x15),
|
||||||
PIN_CTL_TEST("CLFE Pin Mode", 0x16),
|
PIN_CTL_TEST("CLFE Pin Mode", 0x16),
|
||||||
|
@ -1409,18 +1409,6 @@ static snd_kcontrol_new_t alc880_test_mixer[] = {
|
||||||
HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT),
|
HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT),
|
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT),
|
||||||
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT),
|
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
|
|
||||||
HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
|
|
||||||
HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x09, 0x0, HDA_INPUT),
|
|
||||||
HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x09, 0x0, HDA_INPUT),
|
|
||||||
{
|
|
||||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
|
||||||
.name = "Input Source",
|
|
||||||
.count = 2,
|
|
||||||
.info = alc_mux_enum_info,
|
|
||||||
.get = alc_mux_enum_get,
|
|
||||||
.put = alc_mux_enum_put,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||||
.name = "Channel Mode",
|
.name = "Channel Mode",
|
||||||
|
@ -2243,7 +2231,7 @@ static snd_kcontrol_new_t alc260_base_mixer[] = {
|
||||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT),
|
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT),
|
HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT),
|
||||||
HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT),
|
HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT),
|
||||||
{
|
{
|
||||||
|
@ -2270,7 +2258,7 @@ static snd_kcontrol_new_t alc260_hp_mixer[] = {
|
||||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT),
|
ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME("Capture Volume", 0x05, 0x0, HDA_INPUT),
|
HDA_CODEC_VOLUME("Capture Volume", 0x05, 0x0, HDA_INPUT),
|
||||||
HDA_CODEC_MUTE("Capture Switch", 0x05, 0x0, HDA_INPUT),
|
HDA_CODEC_MUTE("Capture Switch", 0x05, 0x0, HDA_INPUT),
|
||||||
{
|
{
|
||||||
|
@ -2501,7 +2489,7 @@ static snd_kcontrol_new_t alc882_base_mixer[] = {
|
||||||
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT),
|
||||||
HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
|
ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
|
||||||
ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_OUTPUT),
|
ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT),
|
||||||
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
|
||||||
ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
|
ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT),
|
||||||
HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
|
||||||
|
|
|
@ -442,7 +442,7 @@ static char* stateName[] = {
|
||||||
"Setup for play",
|
"Setup for play",
|
||||||
"Playing",
|
"Playing",
|
||||||
"Monitor mode on",
|
"Monitor mode on",
|
||||||
"Calibrating"
|
"Calibrating",
|
||||||
"Invalid"
|
"Invalid"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2147,11 +2147,13 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
|
||||||
{ .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K },
|
{ .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K },
|
||||||
{ .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */
|
{ .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */
|
||||||
{ .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */
|
{ .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */
|
||||||
|
{ .subvendor = 0x1019, .subdevice = 0xa101, .action = VIA_DXS_SRC },
|
||||||
{ .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */
|
{ .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */
|
||||||
{ .subvendor = 0x1025, .subdevice = 0x0046, .action = VIA_DXS_SRC }, /* Acer Aspire 1524 WLMi */
|
{ .subvendor = 0x1025, .subdevice = 0x0046, .action = VIA_DXS_SRC }, /* Acer Aspire 1524 WLMi */
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/
|
{ .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */
|
{ .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/
|
{ .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/
|
||||||
|
{ .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */
|
||||||
{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */
|
{ .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */
|
||||||
{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
|
{ .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
|
||||||
{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */
|
{ .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */
|
||||||
|
|
|
@ -988,6 +988,7 @@ static int __init snd_pmac_detect(pmac_t *chip)
|
||||||
case 0x33:
|
case 0x33:
|
||||||
case 0x29:
|
case 0x29:
|
||||||
case 0x24:
|
case 0x24:
|
||||||
|
case 0x50:
|
||||||
case 0x5c:
|
case 0x5c:
|
||||||
chip->num_freqs = ARRAY_SIZE(tumbler_freqs);
|
chip->num_freqs = ARRAY_SIZE(tumbler_freqs);
|
||||||
chip->model = PMAC_SNAPPER;
|
chip->model = PMAC_SNAPPER;
|
||||||
|
|
|
@ -1444,9 +1444,9 @@ static snd_pcm_hardware_t snd_usb_playback =
|
||||||
SNDRV_PCM_INFO_BATCH |
|
SNDRV_PCM_INFO_BATCH |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
||||||
.buffer_bytes_max = (256*1024),
|
.buffer_bytes_max = 1024 * 1024,
|
||||||
.period_bytes_min = 64,
|
.period_bytes_min = 64,
|
||||||
.period_bytes_max = (128*1024),
|
.period_bytes_max = 512 * 1024,
|
||||||
.periods_min = 2,
|
.periods_min = 2,
|
||||||
.periods_max = 1024,
|
.periods_max = 1024,
|
||||||
};
|
};
|
||||||
|
@ -1458,9 +1458,9 @@ static snd_pcm_hardware_t snd_usb_capture =
|
||||||
SNDRV_PCM_INFO_BATCH |
|
SNDRV_PCM_INFO_BATCH |
|
||||||
SNDRV_PCM_INFO_INTERLEAVED |
|
SNDRV_PCM_INFO_INTERLEAVED |
|
||||||
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
SNDRV_PCM_INFO_BLOCK_TRANSFER,
|
||||||
.buffer_bytes_max = (256*1024),
|
.buffer_bytes_max = 1024 * 1024,
|
||||||
.period_bytes_min = 64,
|
.period_bytes_min = 64,
|
||||||
.period_bytes_max = (128*1024),
|
.period_bytes_max = 512 * 1024,
|
||||||
.periods_min = 2,
|
.periods_min = 2,
|
||||||
.periods_max = 1024,
|
.periods_max = 1024,
|
||||||
};
|
};
|
||||||
|
|
|
@ -237,6 +237,16 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
||||||
.map = audigy2nx_map,
|
.map = audigy2nx_map,
|
||||||
.selector_map = audigy2nx_selectors,
|
.selector_map = audigy2nx_selectors,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
/* Hercules DJ Console (Windows Edition) */
|
||||||
|
.id = USB_ID(0x06f8, 0xb000),
|
||||||
|
.ignore_ctl_error = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/* Hercules DJ Console (Macintosh Edition) */
|
||||||
|
.id = USB_ID(0x06f8, 0xd002),
|
||||||
|
.ignore_ctl_error = 1,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.id = USB_ID(0x08bb, 0x2702),
|
.id = USB_ID(0x08bb, 0x2702),
|
||||||
.map = linex_map,
|
.map = linex_map,
|
||||||
|
|
|
@ -117,6 +117,10 @@ YAMAHA_DEVICE(0x103a, NULL),
|
||||||
YAMAHA_DEVICE(0x103b, NULL),
|
YAMAHA_DEVICE(0x103b, NULL),
|
||||||
YAMAHA_DEVICE(0x103c, NULL),
|
YAMAHA_DEVICE(0x103c, NULL),
|
||||||
YAMAHA_DEVICE(0x103d, NULL),
|
YAMAHA_DEVICE(0x103d, NULL),
|
||||||
|
YAMAHA_DEVICE(0x103e, NULL),
|
||||||
|
YAMAHA_DEVICE(0x103f, NULL),
|
||||||
|
YAMAHA_DEVICE(0x1040, NULL),
|
||||||
|
YAMAHA_DEVICE(0x1041, NULL),
|
||||||
YAMAHA_DEVICE(0x2000, "DGP-7"),
|
YAMAHA_DEVICE(0x2000, "DGP-7"),
|
||||||
YAMAHA_DEVICE(0x2001, "DGP-5"),
|
YAMAHA_DEVICE(0x2001, "DGP-5"),
|
||||||
YAMAHA_DEVICE(0x2002, NULL),
|
YAMAHA_DEVICE(0x2002, NULL),
|
||||||
|
@ -1010,6 +1014,40 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a),
|
||||||
|
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||||
|
.vendor_name = "Roland",
|
||||||
|
/* RD-700SX, RD-300SX */
|
||||||
|
.ifnum = 0,
|
||||||
|
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||||
|
.data = & (const snd_usb_midi_endpoint_info_t) {
|
||||||
|
.out_cables = 0x0003,
|
||||||
|
.in_cables = 0x0003
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Guillemot devices */
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This is for the "Windows Edition" where the external MIDI ports are
|
||||||
|
* the only MIDI ports; the control data is reported through HID
|
||||||
|
* interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard
|
||||||
|
* compliant USB MIDI ports for external MIDI and controls.
|
||||||
|
*/
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000),
|
||||||
|
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||||
|
.vendor_name = "Hercules",
|
||||||
|
.product_name = "DJ Console (WE)",
|
||||||
|
.ifnum = 4,
|
||||||
|
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||||
|
.data = & (const snd_usb_midi_endpoint_info_t) {
|
||||||
|
.out_cables = 0x0001,
|
||||||
|
.in_cables = 0x0001
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/* Midiman/M-Audio devices */
|
/* Midiman/M-Audio devices */
|
||||||
{
|
{
|
||||||
|
@ -1339,10 +1377,20 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* TerraTec devices */
|
||||||
|
{
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
|
||||||
|
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||||
|
.vendor_name = "TerraTec",
|
||||||
|
.product_name = "PHASE 26",
|
||||||
|
.ifnum = 3,
|
||||||
|
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
|
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013),
|
||||||
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
|
||||||
.vendor_name = "Terratec",
|
.vendor_name = "TerraTec",
|
||||||
.product_name = "PHASE 26",
|
.product_name = "PHASE 26",
|
||||||
.ifnum = 3,
|
.ifnum = 3,
|
||||||
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
.type = QUIRK_MIDI_STANDARD_INTERFACE
|
||||||
|
|
Reference in a new issue