Commit 8aa19ad8 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa

parents 58a2c322 a25f175c
...@@ -527,6 +527,8 @@ struct _snd_ac97 { ...@@ -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 { ...@@ -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 = { ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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[] = { ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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[] = { ...@@ -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[] = { ...@@ -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[] = { ...@@ -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[] = { ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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) ...@@ -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 = ...@@ -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 = ...@@ -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[] = { ...@@ -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), ...@@ -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"), ...@@ -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"), ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment