diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/arm/aaci.c | 2 | ||||
-rw-r--r-- | sound/arm/pxa2xx-ac97.c | 2 | ||||
-rw-r--r-- | sound/core/memalloc.c | 2 | ||||
-rw-r--r-- | sound/core/memory.c | 10 | ||||
-rw-r--r-- | sound/core/seq/instr/ainstr_iw.c | 2 | ||||
-rw-r--r-- | sound/core/wrappers.c | 2 | ||||
-rw-r--r-- | sound/isa/opl3sa2.c | 2 | ||||
-rw-r--r-- | sound/oss/au1000.c | 2 | ||||
-rw-r--r-- | sound/oss/ite8172.c | 2 | ||||
-rw-r--r-- | sound/pci/ac97/ac97_bus.c | 23 | ||||
-rw-r--r-- | sound/pci/ac97/ac97_codec.c | 3 | ||||
-rw-r--r-- | sound/pci/ac97/ac97_patch.c | 6 | ||||
-rw-r--r-- | sound/pci/ali5451/ali5451.c | 6 | ||||
-rw-r--r-- | sound/pci/atiixp_modem.c | 16 | ||||
-rw-r--r-- | sound/pci/emu10k1/emu10k1_main.c | 5 | ||||
-rw-r--r-- | sound/pci/emu10k1/emumixer.c | 11 | ||||
-rw-r--r-- | sound/pci/hda/hda_generic.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 5 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 22 | ||||
-rw-r--r-- | sound/pci/korg1212/korg1212.c | 2 | ||||
-rw-r--r-- | sound/pci/via82xx.c | 2 | ||||
-rw-r--r-- | sound/ppc/pmac.c | 1 | ||||
-rw-r--r-- | sound/sparc/cs4231.c | 323 | ||||
-rw-r--r-- | sound/usb/usbaudio.c | 8 | ||||
-rw-r--r-- | sound/usb/usbmixer_maps.c | 10 | ||||
-rw-r--r-- | sound/usb/usbquirks.h | 50 |
26 files changed, 297 insertions, 228 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 34195b74860..b2d5db20ec8 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
@@ -650,7 +650,7 @@ static int aaci_do_resume(snd_card_t *card, unsigned int state) | |||
650 | return 0; | 650 | return 0; |
651 | } | 651 | } |
652 | 652 | ||
653 | static int aaci_suspend(struct amba_device *dev, u32 state) | 653 | static int aaci_suspend(struct amba_device *dev, pm_message_t state) |
654 | { | 654 | { |
655 | snd_card_t *card = amba_get_drvdata(dev); | 655 | snd_card_t *card = amba_get_drvdata(dev); |
656 | return card ? aaci_do_suspend(card) : 0; | 656 | return card ? aaci_do_suspend(card) : 0; |
diff --git a/sound/arm/pxa2xx-ac97.c b/sound/arm/pxa2xx-ac97.c index 29450befb5d..38b20efc9c0 100644 --- a/sound/arm/pxa2xx-ac97.c +++ b/sound/arm/pxa2xx-ac97.c | |||
@@ -245,7 +245,7 @@ static pxa2xx_pcm_client_t pxa2xx_ac97_pcm_client = { | |||
245 | 245 | ||
246 | #ifdef CONFIG_PM | 246 | #ifdef CONFIG_PM |
247 | 247 | ||
248 | static int pxa2xx_ac97_do_suspend(snd_card_t *card, unsigned int state) | 248 | static int pxa2xx_ac97_do_suspend(snd_card_t *card, pm_message_t state) |
249 | { | 249 | { |
250 | if (card->power_state != SNDRV_CTL_POWER_D3cold) { | 250 | if (card->power_state != SNDRV_CTL_POWER_D3cold) { |
251 | pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; | 251 | pxa2xx_audio_ops_t *platform_ops = card->dev->platform_data; |
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 91124ddbdda..e72cec77f0d 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c | |||
@@ -106,7 +106,7 @@ struct snd_mem_list { | |||
106 | 106 | ||
107 | static void *snd_dma_hack_alloc_coherent(struct device *dev, size_t size, | 107 | static void *snd_dma_hack_alloc_coherent(struct device *dev, size_t size, |
108 | dma_addr_t *dma_handle, | 108 | dma_addr_t *dma_handle, |
109 | unsigned int __nocast flags) | 109 | gfp_t flags) |
110 | { | 110 | { |
111 | void *ret; | 111 | void *ret; |
112 | u64 dma_mask, coherent_dma_mask; | 112 | u64 dma_mask, coherent_dma_mask; |
diff --git a/sound/core/memory.c b/sound/core/memory.c index 8fa888fc53a..7d8e2eebba5 100644 --- a/sound/core/memory.c +++ b/sound/core/memory.c | |||
@@ -89,7 +89,7 @@ void snd_memory_done(void) | |||
89 | } | 89 | } |
90 | } | 90 | } |
91 | 91 | ||
92 | static void *__snd_kmalloc(size_t size, unsigned int __nocast flags, void *caller) | 92 | static void *__snd_kmalloc(size_t size, gfp_t flags, void *caller) |
93 | { | 93 | { |
94 | unsigned long cpu_flags; | 94 | unsigned long cpu_flags; |
95 | struct snd_alloc_track *t; | 95 | struct snd_alloc_track *t; |
@@ -111,12 +111,12 @@ static void *__snd_kmalloc(size_t size, unsigned int __nocast flags, void *calle | |||
111 | } | 111 | } |
112 | 112 | ||
113 | #define _snd_kmalloc(size, flags) __snd_kmalloc((size), (flags), __builtin_return_address(0)); | 113 | #define _snd_kmalloc(size, flags) __snd_kmalloc((size), (flags), __builtin_return_address(0)); |
114 | void *snd_hidden_kmalloc(size_t size, unsigned int __nocast flags) | 114 | void *snd_hidden_kmalloc(size_t size, gfp_t flags) |
115 | { | 115 | { |
116 | return _snd_kmalloc(size, flags); | 116 | return _snd_kmalloc(size, flags); |
117 | } | 117 | } |
118 | 118 | ||
119 | void *snd_hidden_kzalloc(size_t size, unsigned int __nocast flags) | 119 | void *snd_hidden_kzalloc(size_t size, gfp_t flags) |
120 | { | 120 | { |
121 | void *ret = _snd_kmalloc(size, flags); | 121 | void *ret = _snd_kmalloc(size, flags); |
122 | if (ret) | 122 | if (ret) |
@@ -125,7 +125,7 @@ void *snd_hidden_kzalloc(size_t size, unsigned int __nocast flags) | |||
125 | } | 125 | } |
126 | EXPORT_SYMBOL(snd_hidden_kzalloc); | 126 | EXPORT_SYMBOL(snd_hidden_kzalloc); |
127 | 127 | ||
128 | void *snd_hidden_kcalloc(size_t n, size_t size, unsigned int __nocast flags) | 128 | void *snd_hidden_kcalloc(size_t n, size_t size, gfp_t flags) |
129 | { | 129 | { |
130 | void *ret = NULL; | 130 | void *ret = NULL; |
131 | if (n != 0 && size > INT_MAX / n) | 131 | if (n != 0 && size > INT_MAX / n) |
@@ -190,7 +190,7 @@ void snd_hidden_vfree(void *obj) | |||
190 | snd_wrapper_vfree(obj); | 190 | snd_wrapper_vfree(obj); |
191 | } | 191 | } |
192 | 192 | ||
193 | char *snd_hidden_kstrdup(const char *s, unsigned int __nocast flags) | 193 | char *snd_hidden_kstrdup(const char *s, gfp_t flags) |
194 | { | 194 | { |
195 | int len; | 195 | int len; |
196 | char *buf; | 196 | char *buf; |
diff --git a/sound/core/seq/instr/ainstr_iw.c b/sound/core/seq/instr/ainstr_iw.c index b3cee092b1a..67c24c8e8e7 100644 --- a/sound/core/seq/instr/ainstr_iw.c +++ b/sound/core/seq/instr/ainstr_iw.c | |||
@@ -58,7 +58,7 @@ static int snd_seq_iwffff_copy_env_from_stream(__u32 req_stype, | |||
58 | iwffff_xenv_t *ex, | 58 | iwffff_xenv_t *ex, |
59 | char __user **data, | 59 | char __user **data, |
60 | long *len, | 60 | long *len, |
61 | unsigned int __nocast gfp_mask) | 61 | gfp_t gfp_mask) |
62 | { | 62 | { |
63 | __u32 stype; | 63 | __u32 stype; |
64 | iwffff_env_record_t *rp, *rp_last; | 64 | iwffff_env_record_t *rp, *rp_last; |
diff --git a/sound/core/wrappers.c b/sound/core/wrappers.c index 508e6d67ee1..296b716f137 100644 --- a/sound/core/wrappers.c +++ b/sound/core/wrappers.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <linux/fs.h> | 27 | #include <linux/fs.h> |
28 | 28 | ||
29 | #ifdef CONFIG_SND_DEBUG_MEMORY | 29 | #ifdef CONFIG_SND_DEBUG_MEMORY |
30 | void *snd_wrapper_kmalloc(size_t size, unsigned int __nocast flags) | 30 | void *snd_wrapper_kmalloc(size_t size, gfp_t flags) |
31 | { | 31 | { |
32 | return kmalloc(size, flags); | 32 | return kmalloc(size, flags); |
33 | } | 33 | } |
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c index e2d2babcd20..4ba268f251e 100644 --- a/sound/isa/opl3sa2.c +++ b/sound/isa/opl3sa2.c | |||
@@ -914,6 +914,7 @@ static int __init alsa_card_opl3sa2_init(void) | |||
914 | #endif | 914 | #endif |
915 | #ifdef CONFIG_PNP | 915 | #ifdef CONFIG_PNP |
916 | pnp_unregister_card_driver(&opl3sa2_pnpc_driver); | 916 | pnp_unregister_card_driver(&opl3sa2_pnpc_driver); |
917 | pnp_unregister_driver(&opl3sa2_pnp_driver); | ||
917 | #endif | 918 | #endif |
918 | return -ENODEV; | 919 | return -ENODEV; |
919 | } | 920 | } |
@@ -927,6 +928,7 @@ static void __exit alsa_card_opl3sa2_exit(void) | |||
927 | #ifdef CONFIG_PNP | 928 | #ifdef CONFIG_PNP |
928 | /* PnP cards first */ | 929 | /* PnP cards first */ |
929 | pnp_unregister_card_driver(&opl3sa2_pnpc_driver); | 930 | pnp_unregister_card_driver(&opl3sa2_pnpc_driver); |
931 | pnp_unregister_driver(&opl3sa2_pnp_driver); | ||
930 | #endif | 932 | #endif |
931 | for (idx = 0; idx < SNDRV_CARDS; idx++) | 933 | for (idx = 0; idx < SNDRV_CARDS; idx++) |
932 | snd_card_free(snd_opl3sa2_legacy[idx]); | 934 | snd_card_free(snd_opl3sa2_legacy[idx]); |
diff --git a/sound/oss/au1000.c b/sound/oss/au1000.c index 4491733c9e4..2c2ae2ee01a 100644 --- a/sound/oss/au1000.c +++ b/sound/oss/au1000.c | |||
@@ -1295,7 +1295,7 @@ static int au1000_mmap(struct file *file, struct vm_area_struct *vma) | |||
1295 | unsigned long size; | 1295 | unsigned long size; |
1296 | int ret = 0; | 1296 | int ret = 0; |
1297 | 1297 | ||
1298 | dbg(__FUNCTION__); | 1298 | dbg("%s", __FUNCTION__); |
1299 | 1299 | ||
1300 | lock_kernel(); | 1300 | lock_kernel(); |
1301 | down(&s->sem); | 1301 | down(&s->sem); |
diff --git a/sound/oss/ite8172.c b/sound/oss/ite8172.c index 58f879fda97..26e5944b6ba 100644 --- a/sound/oss/ite8172.c +++ b/sound/oss/ite8172.c | |||
@@ -1859,7 +1859,7 @@ static int it8172_release(struct inode *inode, struct file *file) | |||
1859 | struct it8172_state *s = (struct it8172_state *)file->private_data; | 1859 | struct it8172_state *s = (struct it8172_state *)file->private_data; |
1860 | 1860 | ||
1861 | #ifdef IT8172_VERBOSE_DEBUG | 1861 | #ifdef IT8172_VERBOSE_DEBUG |
1862 | dbg(__FUNCTION__); | 1862 | dbg("%s", __FUNCTION__); |
1863 | #endif | 1863 | #endif |
1864 | lock_kernel(); | 1864 | lock_kernel(); |
1865 | if (file->f_mode & FMODE_WRITE) | 1865 | if (file->f_mode & FMODE_WRITE) |
diff --git a/sound/pci/ac97/ac97_bus.c b/sound/pci/ac97/ac97_bus.c index 227f8b9f67c..becbc420ba4 100644 --- a/sound/pci/ac97/ac97_bus.c +++ b/sound/pci/ac97/ac97_bus.c | |||
@@ -17,25 +17,21 @@ | |||
17 | #include <linux/string.h> | 17 | #include <linux/string.h> |
18 | 18 | ||
19 | /* | 19 | /* |
20 | * Codec families have names seperated by commas, so we search for an | 20 | * Let drivers decide whether they want to support given codec from their |
21 | * individual codec name within the family string. | 21 | * probe method. Drivers have direct access to the ac97_t structure and may |
22 | * decide based on the id field amongst other things. | ||
22 | */ | 23 | */ |
23 | static int ac97_bus_match(struct device *dev, struct device_driver *drv) | 24 | static int ac97_bus_match(struct device *dev, struct device_driver *drv) |
24 | { | 25 | { |
25 | return (strstr(dev->bus_id, drv->name) != NULL); | 26 | return 1; |
26 | } | 27 | } |
27 | 28 | ||
28 | static int ac97_bus_suspend(struct device *dev, pm_message_t state) | 29 | static int ac97_bus_suspend(struct device *dev, pm_message_t state) |
29 | { | 30 | { |
30 | int ret = 0; | 31 | int ret = 0; |
31 | 32 | ||
32 | if (dev->driver && dev->driver->suspend) { | 33 | if (dev->driver && dev->driver->suspend) |
33 | ret = dev->driver->suspend(dev, state, SUSPEND_DISABLE); | 34 | ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN); |
34 | if (ret == 0) | ||
35 | ret = dev->driver->suspend(dev, state, SUSPEND_SAVE_STATE); | ||
36 | if (ret == 0) | ||
37 | ret = dev->driver->suspend(dev, state, SUSPEND_POWER_DOWN); | ||
38 | } | ||
39 | return ret; | 35 | return ret; |
40 | } | 36 | } |
41 | 37 | ||
@@ -43,13 +39,8 @@ static int ac97_bus_resume(struct device *dev) | |||
43 | { | 39 | { |
44 | int ret = 0; | 40 | int ret = 0; |
45 | 41 | ||
46 | if (dev->driver && dev->driver->resume) { | 42 | if (dev->driver && dev->driver->resume) |
47 | ret = dev->driver->resume(dev, RESUME_POWER_ON); | 43 | ret = dev->driver->resume(dev, RESUME_POWER_ON); |
48 | if (ret == 0) | ||
49 | ret = dev->driver->resume(dev, RESUME_RESTORE_STATE); | ||
50 | if (ret == 0) | ||
51 | ret = dev->driver->resume(dev, RESUME_ENABLE); | ||
52 | } | ||
53 | return ret; | 44 | return ret; |
54 | } | 45 | } |
55 | 46 | ||
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index e64cb07a39c..41fc290149e 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c | |||
@@ -1557,7 +1557,7 @@ static int snd_ac97_modem_build(snd_card_t * card, ac97_t * ac97) | |||
1557 | 1557 | ||
1558 | /* build modem switches */ | 1558 | /* build modem switches */ |
1559 | for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_modem_switches); idx++) | 1559 | for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_modem_switches); idx++) |
1560 | if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_modem_switches[idx], ac97))) < 0) | 1560 | if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ac97_controls_modem_switches[idx], ac97))) < 0) |
1561 | return err; | 1561 | return err; |
1562 | 1562 | ||
1563 | /* build chip specific controls */ | 1563 | /* build chip specific controls */ |
@@ -1828,7 +1828,6 @@ static int snd_ac97_dev_register(snd_device_t *device) | |||
1828 | 1828 | ||
1829 | ac97->dev.bus = &ac97_bus_type; | 1829 | ac97->dev.bus = &ac97_bus_type; |
1830 | ac97->dev.parent = ac97->bus->card->dev; | 1830 | ac97->dev.parent = ac97->bus->card->dev; |
1831 | ac97->dev.platform_data = ac97; | ||
1832 | ac97->dev.release = ac97_device_release; | 1831 | ac97->dev.release = ac97_device_release; |
1833 | snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "card%d-%d", ac97->bus->card->number, ac97->num); | 1832 | snprintf(ac97->dev.bus_id, BUS_ID_SIZE, "card%d-%d", ac97->bus->card->number, ac97->num); |
1834 | if ((err = device_register(&ac97->dev)) < 0) { | 1833 | if ((err = device_register(&ac97->dev)) < 0) { |
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 045ddc743ed..0238cc65d32 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
@@ -2752,7 +2752,11 @@ AC97_DOUBLE("Modem Speaker Volume", 0x5c, 14, 12, 3, 1) | |||
2752 | 2752 | ||
2753 | static int patch_si3036_specific(ac97_t * ac97) | 2753 | static int patch_si3036_specific(ac97_t * ac97) |
2754 | { | 2754 | { |
2755 | return patch_build_controls(ac97, snd_ac97_controls_si3036, ARRAY_SIZE(snd_ac97_controls_si3036)); | 2755 | int idx, err; |
2756 | for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_si3036); idx++) | ||
2757 | if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_si3036[idx], ac97))) < 0) | ||
2758 | return err; | ||
2759 | return 0; | ||
2756 | } | 2760 | } |
2757 | 2761 | ||
2758 | static struct snd_ac97_build_ops patch_si3036_ops = { | 2762 | static struct snd_ac97_build_ops patch_si3036_ops = { |
diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index d683f7736a6..f35b558c29b 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c | |||
@@ -1993,8 +1993,10 @@ static int __devinit snd_ali_mixer(ali_t * codec) | |||
1993 | if ((err = snd_ac97_mixer(codec->ac97_bus, &ac97, &codec->ac97[i])) < 0) { | 1993 | if ((err = snd_ac97_mixer(codec->ac97_bus, &ac97, &codec->ac97[i])) < 0) { |
1994 | snd_printk("ali mixer %d creating error.\n", i); | 1994 | snd_printk("ali mixer %d creating error.\n", i); |
1995 | if(i == 0) | 1995 | if(i == 0) |
1996 | return err; | 1996 | return err; |
1997 | } | 1997 | codec->num_of_codecs = 1; |
1998 | break; | ||
1999 | } | ||
1998 | } | 2000 | } |
1999 | 2001 | ||
2000 | if (codec->spdif_support) { | 2002 | if (codec->spdif_support) { |
diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index 8a59598167f..c1a239a4dac 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c | |||
@@ -405,7 +405,7 @@ static int snd_atiixp_acquire_codec(atiixp_t *chip) | |||
405 | 405 | ||
406 | while (atiixp_read(chip, PHYS_OUT_ADDR) & ATI_REG_PHYS_OUT_ADDR_EN) { | 406 | while (atiixp_read(chip, PHYS_OUT_ADDR) & ATI_REG_PHYS_OUT_ADDR_EN) { |
407 | if (! timeout--) { | 407 | if (! timeout--) { |
408 | snd_printk(KERN_WARNING "atiixp: codec acquire timeout\n"); | 408 | snd_printk(KERN_WARNING "atiixp-modem: codec acquire timeout\n"); |
409 | return -EBUSY; | 409 | return -EBUSY; |
410 | } | 410 | } |
411 | udelay(1); | 411 | udelay(1); |
@@ -436,7 +436,7 @@ static unsigned short snd_atiixp_codec_read(atiixp_t *chip, unsigned short codec | |||
436 | } while (--timeout); | 436 | } while (--timeout); |
437 | /* time out may happen during reset */ | 437 | /* time out may happen during reset */ |
438 | if (reg < 0x7c) | 438 | if (reg < 0x7c) |
439 | snd_printk(KERN_WARNING "atiixp: codec read timeout (reg %x)\n", reg); | 439 | snd_printk(KERN_WARNING "atiixp-modem: codec read timeout (reg %x)\n", reg); |
440 | return 0xffff; | 440 | return 0xffff; |
441 | } | 441 | } |
442 | 442 | ||
@@ -498,7 +498,7 @@ static int snd_atiixp_aclink_reset(atiixp_t *chip) | |||
498 | do_delay(); | 498 | do_delay(); |
499 | atiixp_update(chip, CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_AC_RESET); | 499 | atiixp_update(chip, CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_AC_RESET); |
500 | if (--timeout) { | 500 | if (--timeout) { |
501 | snd_printk(KERN_ERR "atiixp: codec reset timeout\n"); | 501 | snd_printk(KERN_ERR "atiixp-modem: codec reset timeout\n"); |
502 | break; | 502 | break; |
503 | } | 503 | } |
504 | } | 504 | } |
@@ -552,7 +552,7 @@ static int snd_atiixp_codec_detect(atiixp_t *chip) | |||
552 | atiixp_write(chip, IER, 0); /* disable irqs */ | 552 | atiixp_write(chip, IER, 0); /* disable irqs */ |
553 | 553 | ||
554 | if ((chip->codec_not_ready_bits & ALL_CODEC_NOT_READY) == ALL_CODEC_NOT_READY) { | 554 | if ((chip->codec_not_ready_bits & ALL_CODEC_NOT_READY) == ALL_CODEC_NOT_READY) { |
555 | snd_printk(KERN_ERR "atiixp: no codec detected!\n"); | 555 | snd_printk(KERN_ERR "atiixp-modem: no codec detected!\n"); |
556 | return -ENXIO; | 556 | return -ENXIO; |
557 | } | 557 | } |
558 | return 0; | 558 | return 0; |
@@ -635,7 +635,7 @@ static void snd_atiixp_xrun_dma(atiixp_t *chip, atiixp_dma_t *dma) | |||
635 | { | 635 | { |
636 | if (! dma->substream || ! dma->running) | 636 | if (! dma->substream || ! dma->running) |
637 | return; | 637 | return; |
638 | snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type); | 638 | snd_printdd("atiixp-modem: XRUN detected (DMA %d)\n", dma->ops->type); |
639 | snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN); | 639 | snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN); |
640 | } | 640 | } |
641 | 641 | ||
@@ -1081,14 +1081,14 @@ static int __devinit snd_atiixp_mixer_new(atiixp_t *chip, int clock) | |||
1081 | ac97.scaps = AC97_SCAP_SKIP_AUDIO; | 1081 | ac97.scaps = AC97_SCAP_SKIP_AUDIO; |
1082 | if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) { | 1082 | if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) { |
1083 | chip->ac97[i] = NULL; /* to be sure */ | 1083 | chip->ac97[i] = NULL; /* to be sure */ |
1084 | snd_printdd("atiixp: codec %d not available for modem\n", i); | 1084 | snd_printdd("atiixp-modem: codec %d not available for modem\n", i); |
1085 | continue; | 1085 | continue; |
1086 | } | 1086 | } |
1087 | codec_count++; | 1087 | codec_count++; |
1088 | } | 1088 | } |
1089 | 1089 | ||
1090 | if (! codec_count) { | 1090 | if (! codec_count) { |
1091 | snd_printk(KERN_ERR "atiixp: no codec available\n"); | 1091 | snd_printk(KERN_ERR "atiixp-modem: no codec available\n"); |
1092 | return -ENODEV; | 1092 | return -ENODEV; |
1093 | } | 1093 | } |
1094 | 1094 | ||
@@ -1159,7 +1159,7 @@ static void __devinit snd_atiixp_proc_init(atiixp_t *chip) | |||
1159 | { | 1159 | { |
1160 | snd_info_entry_t *entry; | 1160 | snd_info_entry_t *entry; |
1161 | 1161 | ||
1162 | if (! snd_card_proc_new(chip->card, "atiixp", &entry)) | 1162 | if (! snd_card_proc_new(chip->card, "atiixp-modem", &entry)) |
1163 | snd_info_set_text_ops(entry, chip, 1024, snd_atiixp_proc_read); | 1163 | snd_info_set_text_ops(entry, chip, 1024, snd_atiixp_proc_read); |
1164 | } | 1164 | } |
1165 | 1165 | ||
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index e87e8427f25..e9cd8e054f2 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -756,9 +756,12 @@ static emu_chip_details_t emu_chip_details[] = { | |||
756 | .sblive51 = 1} , | 756 | .sblive51 = 1} , |
757 | /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */ | 757 | /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */ |
758 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, | 758 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, |
759 | .driver = "EMU10K1", .name = "SBLive! Platinum 5.1 [SB0060]", | 759 | .driver = "EMU10K1", .name = "SBLive 5.1 [SB0060]", |
760 | .id = "Live", | 760 | .id = "Live", |
761 | .emu10k1_chip = 1, | 761 | .emu10k1_chip = 1, |
762 | .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum | ||
763 | * share the same IDs! | ||
764 | */ | ||
762 | .sblive51 = 1} , | 765 | .sblive51 = 1} , |
763 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, | 766 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, |
764 | .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", | 767 | .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", |
diff --git a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c index d71a72e84bc..7cc831ccd0c 100644 --- a/sound/pci/emu10k1/emumixer.c +++ b/sound/pci/emu10k1/emumixer.c | |||
@@ -810,8 +810,14 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu, | |||
810 | ac97.private_data = emu; | 810 | ac97.private_data = emu; |
811 | ac97.private_free = snd_emu10k1_mixer_free_ac97; | 811 | ac97.private_free = snd_emu10k1_mixer_free_ac97; |
812 | ac97.scaps = AC97_SCAP_NO_SPDIF; | 812 | ac97.scaps = AC97_SCAP_NO_SPDIF; |
813 | if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) | 813 | if ((err = snd_ac97_mixer(pbus, &ac97, &emu->ac97)) < 0) { |
814 | return err; | 814 | if (emu->card_capabilities->ac97_chip == 1) |
815 | return err; | ||
816 | snd_printd(KERN_INFO "emu10k1: AC97 is optional on this board\n"); | ||
817 | snd_printd(KERN_INFO" Proceeding without ac97 mixers...\n"); | ||
818 | snd_device_free(emu->card, pbus); | ||
819 | goto no_ac97; /* FIXME: get rid of ugly gotos.. */ | ||
820 | } | ||
815 | if (emu->audigy) { | 821 | if (emu->audigy) { |
816 | /* set master volume to 0 dB */ | 822 | /* set master volume to 0 dB */ |
817 | snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000); | 823 | snd_ac97_write(emu->ac97, AC97_MASTER, 0x0000); |
@@ -836,6 +842,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu, | |||
836 | for (; *c; c++) | 842 | for (; *c; c++) |
837 | remove_ctl(card, *c); | 843 | remove_ctl(card, *c); |
838 | } else { | 844 | } else { |
845 | no_ac97: | ||
839 | if (emu->card_capabilities->ecard) | 846 | if (emu->card_capabilities->ecard) |
840 | strcpy(emu->card->mixername, "EMU APS"); | 847 | strcpy(emu->card->mixername, "EMU APS"); |
841 | else if (emu->audigy) | 848 | else if (emu->audigy) |
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 5b829a1a4c6..d0eb9f2250a 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c | |||
@@ -881,10 +881,8 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec) | |||
881 | struct hda_gspec *spec; | 881 | struct hda_gspec *spec; |
882 | int err; | 882 | int err; |
883 | 883 | ||
884 | if(!codec->afg) { | 884 | if(!codec->afg) |
885 | snd_printdd("hda_generic: no generic modem yet\n"); | 885 | return 0; |
886 | return -ENODEV; | ||
887 | } | ||
888 | 886 | ||
889 | spec = kzalloc(sizeof(*spec), GFP_KERNEL); | 887 | spec = kzalloc(sizeof(*spec), GFP_KERNEL); |
890 | if (spec == NULL) { | 888 | if (spec == NULL) { |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 9590ece2099..6fe696e53ea 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -1137,6 +1137,7 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream) | |||
1137 | pos = azx_sd_readl(azx_dev, SD_LPIB); | 1137 | pos = azx_sd_readl(azx_dev, SD_LPIB); |
1138 | if (chip->position_fix == POS_FIX_FIFO) | 1138 | if (chip->position_fix == POS_FIX_FIFO) |
1139 | pos += azx_dev->fifo_size; | 1139 | pos += azx_dev->fifo_size; |
1140 | #if 0 /* disabled temprarily, auto-correction doesn't work well... */ | ||
1140 | else if (chip->position_fix == POS_FIX_AUTO && azx_dev->period_updating) { | 1141 | else if (chip->position_fix == POS_FIX_AUTO && azx_dev->period_updating) { |
1141 | /* check the validity of DMA position */ | 1142 | /* check the validity of DMA position */ |
1142 | unsigned int diff = 0; | 1143 | unsigned int diff = 0; |
@@ -1157,6 +1158,10 @@ static snd_pcm_uframes_t azx_pcm_pointer(snd_pcm_substream_t *substream) | |||
1157 | } | 1158 | } |
1158 | azx_dev->period_updating = 0; | 1159 | azx_dev->period_updating = 0; |
1159 | } | 1160 | } |
1161 | #else | ||
1162 | else if (chip->position_fix == POS_FIX_AUTO) | ||
1163 | pos += azx_dev->fifo_size; | ||
1164 | #endif | ||
1160 | } | 1165 | } |
1161 | if (pos >= azx_dev->bufsize) | 1166 | if (pos >= azx_dev->bufsize) |
1162 | pos = 0; | 1167 | pos = 0; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 849b5b50c92..7327deb6df9 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -1385,8 +1385,8 @@ static snd_kcontrol_new_t alc880_test_mixer[] = { | |||
1385 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | 1385 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), |
1386 | ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | 1386 | ALC_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), |
1387 | ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | 1387 | ALC_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), |
1388 | ALC_BIND_MUTE("CLFE Playback Volume", 0x0e, 2, HDA_INPUT), | 1388 | ALC_BIND_MUTE("CLFE Playback Switch", 0x0e, 2, HDA_INPUT), |
1389 | ALC_BIND_MUTE("Side Playback Volume", 0x0f, 2, HDA_INPUT), | 1389 | ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), |
1390 | PIN_CTL_TEST("Front Pin Mode", 0x14), | 1390 | PIN_CTL_TEST("Front Pin Mode", 0x14), |
1391 | PIN_CTL_TEST("Surround Pin Mode", 0x15), | 1391 | PIN_CTL_TEST("Surround Pin Mode", 0x15), |
1392 | PIN_CTL_TEST("CLFE Pin Mode", 0x16), | 1392 | PIN_CTL_TEST("CLFE Pin Mode", 0x16), |
@@ -1409,18 +1409,6 @@ static snd_kcontrol_new_t alc880_test_mixer[] = { | |||
1409 | HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT), | 1409 | HDA_CODEC_MUTE("In-4 Playback Switch", 0x0b, 0x3, HDA_INPUT), |
1410 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT), | 1410 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x4, HDA_INPUT), |
1411 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT), | 1411 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x4, HDA_INPUT), |
1412 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | ||
1413 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | ||
1414 | HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x09, 0x0, HDA_INPUT), | ||
1415 | HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x09, 0x0, HDA_INPUT), | ||
1416 | { | ||
1417 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
1418 | .name = "Input Source", | ||
1419 | .count = 2, | ||
1420 | .info = alc_mux_enum_info, | ||
1421 | .get = alc_mux_enum_get, | ||
1422 | .put = alc_mux_enum_put, | ||
1423 | }, | ||
1424 | { | 1412 | { |
1425 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 1413 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
1426 | .name = "Channel Mode", | 1414 | .name = "Channel Mode", |
@@ -2243,7 +2231,7 @@ static snd_kcontrol_new_t alc260_base_mixer[] = { | |||
2243 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT), | 2231 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT), |
2244 | ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT), | 2232 | ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT), |
2245 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT), | 2233 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT), |
2246 | ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT), | 2234 | ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT), |
2247 | HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT), | 2235 | HDA_CODEC_VOLUME("Capture Volume", 0x04, 0x0, HDA_INPUT), |
2248 | HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT), | 2236 | HDA_CODEC_MUTE("Capture Switch", 0x04, 0x0, HDA_INPUT), |
2249 | { | 2237 | { |
@@ -2270,7 +2258,7 @@ static snd_kcontrol_new_t alc260_hp_mixer[] = { | |||
2270 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT), | 2258 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x09, 0x0, HDA_OUTPUT), |
2271 | ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT), | 2259 | ALC_BIND_MUTE("Headphone Playback Switch", 0x09, 2, HDA_INPUT), |
2272 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT), | 2260 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0a, 1, 0x0, HDA_OUTPUT), |
2273 | ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_OUTPUT), | 2261 | ALC_BIND_MUTE_MONO("Mono Playback Switch", 0x0a, 1, 2, HDA_INPUT), |
2274 | HDA_CODEC_VOLUME("Capture Volume", 0x05, 0x0, HDA_INPUT), | 2262 | HDA_CODEC_VOLUME("Capture Volume", 0x05, 0x0, HDA_INPUT), |
2275 | HDA_CODEC_MUTE("Capture Switch", 0x05, 0x0, HDA_INPUT), | 2263 | HDA_CODEC_MUTE("Capture Switch", 0x05, 0x0, HDA_INPUT), |
2276 | { | 2264 | { |
@@ -2501,7 +2489,7 @@ static snd_kcontrol_new_t alc882_base_mixer[] = { | |||
2501 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | 2489 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), |
2502 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | 2490 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), |
2503 | ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | 2491 | ALC_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), |
2504 | ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_OUTPUT), | 2492 | ALC_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), |
2505 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | 2493 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), |
2506 | ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | 2494 | ALC_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), |
2507 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | 2495 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), |
diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c index 09f9cbe116a..5561fd4091e 100644 --- a/sound/pci/korg1212/korg1212.c +++ b/sound/pci/korg1212/korg1212.c | |||
@@ -442,7 +442,7 @@ static char* stateName[] = { | |||
442 | "Setup for play", | 442 | "Setup for play", |
443 | "Playing", | 443 | "Playing", |
444 | "Monitor mode on", | 444 | "Monitor mode on", |
445 | "Calibrating" | 445 | "Calibrating", |
446 | "Invalid" | 446 | "Invalid" |
447 | }; | 447 | }; |
448 | 448 | ||
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index 6db7de6b971..3c0205b91e1 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c | |||
@@ -2147,11 +2147,13 @@ static int __devinit check_dxs_list(struct pci_dev *pci) | |||
2147 | { .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K }, | 2147 | { .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K }, |
2148 | { .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ | 2148 | { .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ |
2149 | { .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */ | 2149 | { .subvendor = 0x1019, .subdevice = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */ |
2150 | { .subvendor = 0x1019, .subdevice = 0xa101, .action = VIA_DXS_SRC }, | ||
2150 | { .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */ | 2151 | { .subvendor = 0x1025, .subdevice = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */ |
2151 | { .subvendor = 0x1025, .subdevice = 0x0046, .action = VIA_DXS_SRC }, /* Acer Aspire 1524 WLMi */ | 2152 | { .subvendor = 0x1025, .subdevice = 0x0046, .action = VIA_DXS_SRC }, /* Acer Aspire 1524 WLMi */ |
2152 | { .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/ | 2153 | { .subvendor = 0x1043, .subdevice = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/ |
2153 | { .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */ | 2154 | { .subvendor = 0x1043, .subdevice = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */ |
2154 | { .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ | 2155 | { .subvendor = 0x1043, .subdevice = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ |
2156 | { .subvendor = 0x1043, .subdevice = 0x810d, .action = VIA_DXS_SRC }, /* ASUS */ | ||
2155 | { .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */ | 2157 | { .subvendor = 0x1043, .subdevice = 0x812a, .action = VIA_DXS_SRC }, /* ASUS A8V Deluxe */ |
2156 | { .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */ | 2158 | { .subvendor = 0x1071, .subdevice = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */ |
2157 | { .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */ | 2159 | { .subvendor = 0x1071, .subdevice = 0x8399, .action = VIA_DXS_NO_VRA }, /* Umax AB 595T (VIA K8N800A - VT8237) */ |
diff --git a/sound/ppc/pmac.c b/sound/ppc/pmac.c index e35b48d29c4..392b2abd9f1 100644 --- a/sound/ppc/pmac.c +++ b/sound/ppc/pmac.c | |||
@@ -988,6 +988,7 @@ static int __init snd_pmac_detect(pmac_t *chip) | |||
988 | case 0x33: | 988 | case 0x33: |
989 | case 0x29: | 989 | case 0x29: |
990 | case 0x24: | 990 | case 0x24: |
991 | case 0x50: | ||
991 | case 0x5c: | 992 | case 0x5c: |
992 | chip->num_freqs = ARRAY_SIZE(tumbler_freqs); | 993 | chip->num_freqs = ARRAY_SIZE(tumbler_freqs); |
993 | chip->model = PMAC_SNAPPER; | 994 | chip->model = PMAC_SNAPPER; |
diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c index 2fb27c4e951..f4361c518e4 100644 --- a/sound/sparc/cs4231.c +++ b/sound/sparc/cs4231.c | |||
@@ -173,7 +173,7 @@ static cs4231_t *cs4231_list; | |||
173 | 173 | ||
174 | #define CS4231_GLOBALIRQ 0x01 /* IRQ is active */ | 174 | #define CS4231_GLOBALIRQ 0x01 /* IRQ is active */ |
175 | 175 | ||
176 | /* definitions for codec irq status */ | 176 | /* definitions for codec irq status - CS4231_IRQ_STATUS */ |
177 | 177 | ||
178 | #define CS4231_PLAYBACK_IRQ 0x10 | 178 | #define CS4231_PLAYBACK_IRQ 0x10 |
179 | #define CS4231_RECORD_IRQ 0x20 | 179 | #define CS4231_RECORD_IRQ 0x20 |
@@ -402,7 +402,7 @@ static void snd_cs4231_outm(cs4231_t *chip, unsigned char reg, | |||
402 | udelay(100); | 402 | udelay(100); |
403 | #ifdef CONFIG_SND_DEBUG | 403 | #ifdef CONFIG_SND_DEBUG |
404 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | 404 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) |
405 | snd_printk("outm: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); | 405 | snd_printdd("outm: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); |
406 | #endif | 406 | #endif |
407 | if (chip->calibrate_mute) { | 407 | if (chip->calibrate_mute) { |
408 | chip->image[reg] &= mask; | 408 | chip->image[reg] &= mask; |
@@ -425,6 +425,10 @@ static void snd_cs4231_dout(cs4231_t *chip, unsigned char reg, unsigned char val | |||
425 | timeout > 0 && (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT); | 425 | timeout > 0 && (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT); |
426 | timeout--) | 426 | timeout--) |
427 | udelay(100); | 427 | udelay(100); |
428 | #ifdef CONFIG_SND_DEBUG | ||
429 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | ||
430 | snd_printdd("out: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); | ||
431 | #endif | ||
428 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); | 432 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); |
429 | __cs4231_writeb(chip, value, CS4231P(chip, REG)); | 433 | __cs4231_writeb(chip, value, CS4231P(chip, REG)); |
430 | mb(); | 434 | mb(); |
@@ -440,15 +444,12 @@ static void snd_cs4231_out(cs4231_t *chip, unsigned char reg, unsigned char valu | |||
440 | udelay(100); | 444 | udelay(100); |
441 | #ifdef CONFIG_SND_DEBUG | 445 | #ifdef CONFIG_SND_DEBUG |
442 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | 446 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) |
443 | snd_printk("out: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); | 447 | snd_printdd("out: auto calibration time out - reg = 0x%x, value = 0x%x\n", reg, value); |
444 | #endif | 448 | #endif |
445 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); | 449 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); |
446 | __cs4231_writeb(chip, value, CS4231P(chip, REG)); | 450 | __cs4231_writeb(chip, value, CS4231P(chip, REG)); |
447 | chip->image[reg] = value; | 451 | chip->image[reg] = value; |
448 | mb(); | 452 | mb(); |
449 | #if 0 | ||
450 | printk("codec out - reg 0x%x = 0x%x\n", chip->mce_bit | reg, value); | ||
451 | #endif | ||
452 | } | 453 | } |
453 | 454 | ||
454 | static unsigned char snd_cs4231_in(cs4231_t *chip, unsigned char reg) | 455 | static unsigned char snd_cs4231_in(cs4231_t *chip, unsigned char reg) |
@@ -462,61 +463,14 @@ static unsigned char snd_cs4231_in(cs4231_t *chip, unsigned char reg) | |||
462 | udelay(100); | 463 | udelay(100); |
463 | #ifdef CONFIG_SND_DEBUG | 464 | #ifdef CONFIG_SND_DEBUG |
464 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | 465 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) |
465 | snd_printk("in: auto calibration time out - reg = 0x%x\n", reg); | 466 | snd_printdd("in: auto calibration time out - reg = 0x%x\n", reg); |
466 | #endif | 467 | #endif |
467 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); | 468 | __cs4231_writeb(chip, chip->mce_bit | reg, CS4231P(chip, REGSEL)); |
468 | mb(); | 469 | mb(); |
469 | ret = __cs4231_readb(chip, CS4231P(chip, REG)); | 470 | ret = __cs4231_readb(chip, CS4231P(chip, REG)); |
470 | #if 0 | ||
471 | printk("codec in - reg 0x%x = 0x%x\n", chip->mce_bit | reg, ret); | ||
472 | #endif | ||
473 | return ret; | 471 | return ret; |
474 | } | 472 | } |
475 | 473 | ||
476 | #if 0 | ||
477 | |||
478 | static void snd_cs4231_debug(cs4231_t *chip) | ||
479 | { | ||
480 | printk("CS4231 REGS: INDEX = 0x%02x ", | ||
481 | __cs4231_readb(chip, CS4231P(chip, REGSEL))); | ||
482 | printk(" STATUS = 0x%02x\n", | ||
483 | __cs4231_readb(chip, CS4231P(chip, STATUS))); | ||
484 | printk(" 0x00: left input = 0x%02x ", snd_cs4231_in(chip, 0x00)); | ||
485 | printk(" 0x10: alt 1 (CFIG 2) = 0x%02x\n", snd_cs4231_in(chip, 0x10)); | ||
486 | printk(" 0x01: right input = 0x%02x ", snd_cs4231_in(chip, 0x01)); | ||
487 | printk(" 0x11: alt 2 (CFIG 3) = 0x%02x\n", snd_cs4231_in(chip, 0x11)); | ||
488 | printk(" 0x02: GF1 left input = 0x%02x ", snd_cs4231_in(chip, 0x02)); | ||
489 | printk(" 0x12: left line in = 0x%02x\n", snd_cs4231_in(chip, 0x12)); | ||
490 | printk(" 0x03: GF1 right input = 0x%02x ", snd_cs4231_in(chip, 0x03)); | ||
491 | printk(" 0x13: right line in = 0x%02x\n", snd_cs4231_in(chip, 0x13)); | ||
492 | printk(" 0x04: CD left input = 0x%02x ", snd_cs4231_in(chip, 0x04)); | ||
493 | printk(" 0x14: timer low = 0x%02x\n", snd_cs4231_in(chip, 0x14)); | ||
494 | printk(" 0x05: CD right input = 0x%02x ", snd_cs4231_in(chip, 0x05)); | ||
495 | printk(" 0x15: timer high = 0x%02x\n", snd_cs4231_in(chip, 0x15)); | ||
496 | printk(" 0x06: left output = 0x%02x ", snd_cs4231_in(chip, 0x06)); | ||
497 | printk(" 0x16: left MIC (PnP) = 0x%02x\n", snd_cs4231_in(chip, 0x16)); | ||
498 | printk(" 0x07: right output = 0x%02x ", snd_cs4231_in(chip, 0x07)); | ||
499 | printk(" 0x17: right MIC (PnP) = 0x%02x\n", snd_cs4231_in(chip, 0x17)); | ||
500 | printk(" 0x08: playback format = 0x%02x ", snd_cs4231_in(chip, 0x08)); | ||
501 | printk(" 0x18: IRQ status = 0x%02x\n", snd_cs4231_in(chip, 0x18)); | ||
502 | printk(" 0x09: iface (CFIG 1) = 0x%02x ", snd_cs4231_in(chip, 0x09)); | ||
503 | printk(" 0x19: left line out = 0x%02x\n", snd_cs4231_in(chip, 0x19)); | ||
504 | printk(" 0x0a: pin control = 0x%02x ", snd_cs4231_in(chip, 0x0a)); | ||
505 | printk(" 0x1a: mono control = 0x%02x\n", snd_cs4231_in(chip, 0x1a)); | ||
506 | printk(" 0x0b: init & status = 0x%02x ", snd_cs4231_in(chip, 0x0b)); | ||
507 | printk(" 0x1b: right line out = 0x%02x\n", snd_cs4231_in(chip, 0x1b)); | ||
508 | printk(" 0x0c: revision & mode = 0x%02x ", snd_cs4231_in(chip, 0x0c)); | ||
509 | printk(" 0x1c: record format = 0x%02x\n", snd_cs4231_in(chip, 0x1c)); | ||
510 | printk(" 0x0d: loopback = 0x%02x ", snd_cs4231_in(chip, 0x0d)); | ||
511 | printk(" 0x1d: var freq (PnP) = 0x%02x\n", snd_cs4231_in(chip, 0x1d)); | ||
512 | printk(" 0x0e: ply upr count = 0x%02x ", snd_cs4231_in(chip, 0x0e)); | ||
513 | printk(" 0x1e: rec upr count = 0x%02x\n", snd_cs4231_in(chip, 0x1e)); | ||
514 | printk(" 0x0f: ply lwr count = 0x%02x ", snd_cs4231_in(chip, 0x0f)); | ||
515 | printk(" 0x1f: rec lwr count = 0x%02x\n", snd_cs4231_in(chip, 0x1f)); | ||
516 | } | ||
517 | |||
518 | #endif | ||
519 | |||
520 | /* | 474 | /* |
521 | * CS4231 detection / MCE routines | 475 | * CS4231 detection / MCE routines |
522 | */ | 476 | */ |
@@ -528,11 +482,12 @@ static void snd_cs4231_busy_wait(cs4231_t *chip) | |||
528 | /* huh.. looks like this sequence is proper for CS4231A chip (GUS MAX) */ | 482 | /* huh.. looks like this sequence is proper for CS4231A chip (GUS MAX) */ |
529 | for (timeout = 5; timeout > 0; timeout--) | 483 | for (timeout = 5; timeout > 0; timeout--) |
530 | __cs4231_readb(chip, CS4231P(chip, REGSEL)); | 484 | __cs4231_readb(chip, CS4231P(chip, REGSEL)); |
485 | |||
531 | /* end of cleanup sequence */ | 486 | /* end of cleanup sequence */ |
532 | for (timeout = 250; | 487 | for (timeout = 500; |
533 | timeout > 0 && (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT); | 488 | timeout > 0 && (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT); |
534 | timeout--) | 489 | timeout--) |
535 | udelay(100); | 490 | udelay(1000); |
536 | } | 491 | } |
537 | 492 | ||
538 | static void snd_cs4231_mce_up(cs4231_t *chip) | 493 | static void snd_cs4231_mce_up(cs4231_t *chip) |
@@ -545,12 +500,12 @@ static void snd_cs4231_mce_up(cs4231_t *chip) | |||
545 | udelay(100); | 500 | udelay(100); |
546 | #ifdef CONFIG_SND_DEBUG | 501 | #ifdef CONFIG_SND_DEBUG |
547 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | 502 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) |
548 | snd_printk("mce_up - auto calibration time out (0)\n"); | 503 | snd_printdd("mce_up - auto calibration time out (0)\n"); |
549 | #endif | 504 | #endif |
550 | chip->mce_bit |= CS4231_MCE; | 505 | chip->mce_bit |= CS4231_MCE; |
551 | timeout = __cs4231_readb(chip, CS4231P(chip, REGSEL)); | 506 | timeout = __cs4231_readb(chip, CS4231P(chip, REGSEL)); |
552 | if (timeout == 0x80) | 507 | if (timeout == 0x80) |
553 | snd_printk("mce_up [%p]: serious init problem - codec still busy\n", chip->port); | 508 | snd_printdd("mce_up [%p]: serious init problem - codec still busy\n", chip->port); |
554 | if (!(timeout & CS4231_MCE)) | 509 | if (!(timeout & CS4231_MCE)) |
555 | __cs4231_writeb(chip, chip->mce_bit | (timeout & 0x1f), CS4231P(chip, REGSEL)); | 510 | __cs4231_writeb(chip, chip->mce_bit | (timeout & 0x1f), CS4231P(chip, REGSEL)); |
556 | spin_unlock_irqrestore(&chip->lock, flags); | 511 | spin_unlock_irqrestore(&chip->lock, flags); |
@@ -563,18 +518,15 @@ static void snd_cs4231_mce_down(cs4231_t *chip) | |||
563 | 518 | ||
564 | spin_lock_irqsave(&chip->lock, flags); | 519 | spin_lock_irqsave(&chip->lock, flags); |
565 | snd_cs4231_busy_wait(chip); | 520 | snd_cs4231_busy_wait(chip); |
566 | #if 0 | ||
567 | printk("(1) timeout = %i\n", timeout); | ||
568 | #endif | ||
569 | #ifdef CONFIG_SND_DEBUG | 521 | #ifdef CONFIG_SND_DEBUG |
570 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) | 522 | if (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) |
571 | snd_printk("mce_down [%p] - auto calibration time out (0)\n", CS4231P(chip, REGSEL)); | 523 | snd_printdd("mce_down [%p] - auto calibration time out (0)\n", CS4231P(chip, REGSEL)); |
572 | #endif | 524 | #endif |
573 | chip->mce_bit &= ~CS4231_MCE; | 525 | chip->mce_bit &= ~CS4231_MCE; |
574 | timeout = __cs4231_readb(chip, CS4231P(chip, REGSEL)); | 526 | timeout = __cs4231_readb(chip, CS4231P(chip, REGSEL)); |
575 | __cs4231_writeb(chip, chip->mce_bit | (timeout & 0x1f), CS4231P(chip, REGSEL)); | 527 | __cs4231_writeb(chip, chip->mce_bit | (timeout & 0x1f), CS4231P(chip, REGSEL)); |
576 | if (timeout == 0x80) | 528 | if (timeout == 0x80) |
577 | snd_printk("mce_down [%p]: serious init problem - codec still busy\n", chip->port); | 529 | snd_printdd("mce_down [%p]: serious init problem - codec still busy\n", chip->port); |
578 | if ((timeout & CS4231_MCE) == 0) { | 530 | if ((timeout & CS4231_MCE) == 0) { |
579 | spin_unlock_irqrestore(&chip->lock, flags); | 531 | spin_unlock_irqrestore(&chip->lock, flags); |
580 | return; | 532 | return; |
@@ -590,9 +542,7 @@ static void snd_cs4231_mce_down(cs4231_t *chip) | |||
590 | spin_unlock_irqrestore(&chip->lock, flags); | 542 | spin_unlock_irqrestore(&chip->lock, flags); |
591 | return; | 543 | return; |
592 | } | 544 | } |
593 | #if 0 | 545 | |
594 | printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies); | ||
595 | #endif | ||
596 | /* in 10ms increments, check condition, up to 250ms */ | 546 | /* in 10ms increments, check condition, up to 250ms */ |
597 | timeout = 25; | 547 | timeout = 25; |
598 | while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) { | 548 | while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) { |
@@ -604,9 +554,7 @@ static void snd_cs4231_mce_down(cs4231_t *chip) | |||
604 | msleep(10); | 554 | msleep(10); |
605 | spin_lock_irqsave(&chip->lock, flags); | 555 | spin_lock_irqsave(&chip->lock, flags); |
606 | } | 556 | } |
607 | #if 0 | 557 | |
608 | printk("(3) jiffies = %li\n", jiffies); | ||
609 | #endif | ||
610 | /* in 10ms increments, check condition, up to 100ms */ | 558 | /* in 10ms increments, check condition, up to 100ms */ |
611 | timeout = 10; | 559 | timeout = 10; |
612 | while (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) { | 560 | while (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) { |
@@ -619,54 +567,58 @@ static void snd_cs4231_mce_down(cs4231_t *chip) | |||
619 | spin_lock_irqsave(&chip->lock, flags); | 567 | spin_lock_irqsave(&chip->lock, flags); |
620 | } | 568 | } |
621 | spin_unlock_irqrestore(&chip->lock, flags); | 569 | spin_unlock_irqrestore(&chip->lock, flags); |
622 | #if 0 | ||
623 | printk("(4) jiffies = %li\n", jiffies); | ||
624 | snd_printk("mce_down - exit = 0x%x\n", __cs4231_readb(chip, CS4231P(chip, REGSEL))); | ||
625 | #endif | ||
626 | } | 570 | } |
627 | 571 | ||
628 | #if 0 /* Unused for now... */ | ||
629 | static unsigned int snd_cs4231_get_count(unsigned char format, unsigned int size) | ||
630 | { | ||
631 | switch (format & 0xe0) { | ||
632 | case CS4231_LINEAR_16: | ||
633 | case CS4231_LINEAR_16_BIG: | ||
634 | size >>= 1; | ||
635 | break; | ||
636 | case CS4231_ADPCM_16: | ||
637 | return size >> 2; | ||
638 | } | ||
639 | if (format & CS4231_STEREO) | ||
640 | size >>= 1; | ||
641 | return size; | ||
642 | } | ||
643 | #endif | ||
644 | |||
645 | #ifdef EBUS_SUPPORT | 572 | #ifdef EBUS_SUPPORT |
646 | static void snd_cs4231_ebus_advance_dma(struct ebus_dma_info *p, snd_pcm_substream_t *substream, unsigned int *periods_sent) | 573 | static void snd_cs4231_ebus_advance_dma(struct ebus_dma_info *p, snd_pcm_substream_t *substream, unsigned int *periods_sent) |
647 | { | 574 | { |
648 | snd_pcm_runtime_t *runtime = substream->runtime; | 575 | snd_pcm_runtime_t *runtime = substream->runtime; |
649 | 576 | ||
650 | while (1) { | 577 | while (1) { |
651 | unsigned int dma_size = snd_pcm_lib_period_bytes(substream); | 578 | unsigned int period_size = snd_pcm_lib_period_bytes(substream); |
652 | unsigned int offset = dma_size * (*periods_sent); | 579 | unsigned int offset = period_size * (*periods_sent); |
653 | 580 | ||
654 | if (dma_size >= (1 << 24)) | 581 | if (period_size >= (1 << 24)) |
655 | BUG(); | 582 | BUG(); |
656 | 583 | ||
657 | if (ebus_dma_request(p, runtime->dma_addr + offset, dma_size)) | 584 | if (ebus_dma_request(p, runtime->dma_addr + offset, period_size)) |
658 | return; | 585 | return; |
659 | #if 0 | ||
660 | printk("ebus_advance: Sent period %u (size[%x] offset[%x])\n", | ||
661 | (*periods_sent), dma_size, offset); | ||
662 | #endif | ||
663 | (*periods_sent) = ((*periods_sent) + 1) % runtime->periods; | 586 | (*periods_sent) = ((*periods_sent) + 1) % runtime->periods; |
664 | } | 587 | } |
665 | } | 588 | } |
666 | #endif | 589 | #endif |
667 | 590 | ||
668 | static void cs4231_dma_trigger(cs4231_t *chip, unsigned int what, int on) | 591 | #ifdef SBUS_SUPPORT |
592 | static void snd_cs4231_sbus_advance_dma(snd_pcm_substream_t *substream, unsigned int *periods_sent) | ||
593 | { | ||
594 | cs4231_t *chip = snd_pcm_substream_chip(substream); | ||
595 | snd_pcm_runtime_t *runtime = substream->runtime; | ||
596 | |||
597 | unsigned int period_size = snd_pcm_lib_period_bytes(substream); | ||
598 | unsigned int offset = period_size * (*periods_sent % runtime->periods); | ||
599 | |||
600 | if (runtime->period_size > 0xffff + 1) | ||
601 | BUG(); | ||
602 | |||
603 | switch (substream->stream) { | ||
604 | case SNDRV_PCM_STREAM_PLAYBACK: | ||
605 | sbus_writel(runtime->dma_addr + offset, chip->port + APCPNVA); | ||
606 | sbus_writel(period_size, chip->port + APCPNC); | ||
607 | break; | ||
608 | case SNDRV_PCM_STREAM_CAPTURE: | ||
609 | sbus_writel(runtime->dma_addr + offset, chip->port + APCCNVA); | ||
610 | sbus_writel(period_size, chip->port + APCCNC); | ||
611 | break; | ||
612 | } | ||
613 | |||
614 | (*periods_sent) = (*periods_sent + 1) % runtime->periods; | ||
615 | } | ||
616 | #endif | ||
617 | |||
618 | static void cs4231_dma_trigger(snd_pcm_substream_t *substream, unsigned int what, int on) | ||
669 | { | 619 | { |
620 | cs4231_t *chip = snd_pcm_substream_chip(substream); | ||
621 | |||
670 | #ifdef EBUS_SUPPORT | 622 | #ifdef EBUS_SUPPORT |
671 | if (chip->flags & CS4231_FLAG_EBUS) { | 623 | if (chip->flags & CS4231_FLAG_EBUS) { |
672 | if (what & CS4231_PLAYBACK_ENABLE) { | 624 | if (what & CS4231_PLAYBACK_ENABLE) { |
@@ -694,6 +646,60 @@ static void cs4231_dma_trigger(cs4231_t *chip, unsigned int what, int on) | |||
694 | } else { | 646 | } else { |
695 | #endif | 647 | #endif |
696 | #ifdef SBUS_SUPPORT | 648 | #ifdef SBUS_SUPPORT |
649 | u32 csr = sbus_readl(chip->port + APCCSR); | ||
650 | /* I don't know why, but on sbus the period counter must | ||
651 | * only start counting after the first period is sent. | ||
652 | * Therefore this dummy thing. | ||
653 | */ | ||
654 | unsigned int dummy = 0; | ||
655 | |||
656 | switch (what) { | ||
657 | case CS4231_PLAYBACK_ENABLE: | ||
658 | if (on) { | ||
659 | csr &= ~APC_XINT_PLAY; | ||
660 | sbus_writel(csr, chip->port + APCCSR); | ||
661 | |||
662 | csr &= ~APC_PPAUSE; | ||
663 | sbus_writel(csr, chip->port + APCCSR); | ||
664 | |||
665 | snd_cs4231_sbus_advance_dma(substream, &dummy); | ||
666 | |||
667 | csr |= APC_GENL_INT | APC_PLAY_INT | APC_XINT_ENA | | ||
668 | APC_XINT_PLAY | APC_XINT_EMPT | APC_XINT_GENL | | ||
669 | APC_XINT_PENA | APC_PDMA_READY; | ||
670 | sbus_writel(csr, chip->port + APCCSR); | ||
671 | } else { | ||
672 | csr |= APC_PPAUSE; | ||
673 | sbus_writel(csr, chip->port + APCCSR); | ||
674 | |||
675 | csr &= ~APC_PDMA_READY; | ||
676 | sbus_writel(csr, chip->port + APCCSR); | ||
677 | } | ||
678 | break; | ||
679 | case CS4231_RECORD_ENABLE: | ||
680 | if (on) { | ||
681 | csr &= ~APC_XINT_CAPT; | ||
682 | sbus_writel(csr, chip->port + APCCSR); | ||
683 | |||
684 | csr &= ~APC_CPAUSE; | ||
685 | sbus_writel(csr, chip->port + APCCSR); | ||
686 | |||
687 | snd_cs4231_sbus_advance_dma(substream, &dummy); | ||
688 | |||
689 | csr |= APC_GENL_INT | APC_CAPT_INT | APC_XINT_ENA | | ||
690 | APC_XINT_CAPT | APC_XINT_CEMP | APC_XINT_GENL | | ||
691 | APC_CDMA_READY; | ||
692 | |||
693 | sbus_writel(csr, chip->port + APCCSR); | ||
694 | } else { | ||
695 | csr |= APC_CPAUSE; | ||
696 | sbus_writel(csr, chip->port + APCCSR); | ||
697 | |||
698 | csr &= ~APC_CDMA_READY; | ||
699 | sbus_writel(csr, chip->port + APCCSR); | ||
700 | } | ||
701 | break; | ||
702 | } | ||
697 | #endif | 703 | #endif |
698 | #ifdef EBUS_SUPPORT | 704 | #ifdef EBUS_SUPPORT |
699 | } | 705 | } |
@@ -725,25 +731,12 @@ static int snd_cs4231_trigger(snd_pcm_substream_t *substream, int cmd) | |||
725 | } | 731 | } |
726 | } | 732 | } |
727 | 733 | ||
728 | #if 0 | ||
729 | printk("TRIGGER: what[%x] on(%d)\n", | ||
730 | what, (cmd == SNDRV_PCM_TRIGGER_START)); | ||
731 | #endif | ||
732 | |||
733 | spin_lock_irqsave(&chip->lock, flags); | 734 | spin_lock_irqsave(&chip->lock, flags); |
734 | if (cmd == SNDRV_PCM_TRIGGER_START) { | 735 | if (cmd == SNDRV_PCM_TRIGGER_START) { |
735 | cs4231_dma_trigger(chip, what, 1); | 736 | cs4231_dma_trigger(substream, what, 1); |
736 | chip->image[CS4231_IFACE_CTRL] |= what; | 737 | chip->image[CS4231_IFACE_CTRL] |= what; |
737 | if (what & CS4231_PLAYBACK_ENABLE) { | ||
738 | snd_cs4231_out(chip, CS4231_PLY_LWR_CNT, 0xff); | ||
739 | snd_cs4231_out(chip, CS4231_PLY_UPR_CNT, 0xff); | ||
740 | } | ||
741 | if (what & CS4231_RECORD_ENABLE) { | ||
742 | snd_cs4231_out(chip, CS4231_REC_LWR_CNT, 0xff); | ||
743 | snd_cs4231_out(chip, CS4231_REC_UPR_CNT, 0xff); | ||
744 | } | ||
745 | } else { | 738 | } else { |
746 | cs4231_dma_trigger(chip, what, 0); | 739 | cs4231_dma_trigger(substream, what, 0); |
747 | chip->image[CS4231_IFACE_CTRL] &= ~what; | 740 | chip->image[CS4231_IFACE_CTRL] &= ~what; |
748 | } | 741 | } |
749 | snd_cs4231_out(chip, CS4231_IFACE_CTRL, | 742 | snd_cs4231_out(chip, CS4231_IFACE_CTRL, |
@@ -755,9 +748,7 @@ static int snd_cs4231_trigger(snd_pcm_substream_t *substream, int cmd) | |||
755 | result = -EINVAL; | 748 | result = -EINVAL; |
756 | break; | 749 | break; |
757 | } | 750 | } |
758 | #if 0 | 751 | |
759 | snd_cs4231_debug(chip); | ||
760 | #endif | ||
761 | return result; | 752 | return result; |
762 | } | 753 | } |
763 | 754 | ||
@@ -790,9 +781,6 @@ static unsigned char snd_cs4231_get_format(cs4231_t *chip, int format, int chann | |||
790 | } | 781 | } |
791 | if (channels > 1) | 782 | if (channels > 1) |
792 | rformat |= CS4231_STEREO; | 783 | rformat |= CS4231_STEREO; |
793 | #if 0 | ||
794 | snd_printk("get_format: 0x%x (mode=0x%x)\n", format, mode); | ||
795 | #endif | ||
796 | return rformat; | 784 | return rformat; |
797 | } | 785 | } |
798 | 786 | ||
@@ -944,7 +932,7 @@ static void snd_cs4231_init(cs4231_t *chip) | |||
944 | snd_cs4231_mce_down(chip); | 932 | snd_cs4231_mce_down(chip); |
945 | 933 | ||
946 | #ifdef SNDRV_DEBUG_MCE | 934 | #ifdef SNDRV_DEBUG_MCE |
947 | snd_printk("init: (1)\n"); | 935 | snd_printdd("init: (1)\n"); |
948 | #endif | 936 | #endif |
949 | snd_cs4231_mce_up(chip); | 937 | snd_cs4231_mce_up(chip); |
950 | spin_lock_irqsave(&chip->lock, flags); | 938 | spin_lock_irqsave(&chip->lock, flags); |
@@ -957,7 +945,7 @@ static void snd_cs4231_init(cs4231_t *chip) | |||
957 | snd_cs4231_mce_down(chip); | 945 | snd_cs4231_mce_down(chip); |
958 | 946 | ||
959 | #ifdef SNDRV_DEBUG_MCE | 947 | #ifdef SNDRV_DEBUG_MCE |
960 | snd_printk("init: (2)\n"); | 948 | snd_printdd("init: (2)\n"); |
961 | #endif | 949 | #endif |
962 | 950 | ||
963 | snd_cs4231_mce_up(chip); | 951 | snd_cs4231_mce_up(chip); |
@@ -967,7 +955,7 @@ static void snd_cs4231_init(cs4231_t *chip) | |||
967 | snd_cs4231_mce_down(chip); | 955 | snd_cs4231_mce_down(chip); |
968 | 956 | ||
969 | #ifdef SNDRV_DEBUG_MCE | 957 | #ifdef SNDRV_DEBUG_MCE |
970 | snd_printk("init: (3) - afei = 0x%x\n", chip->image[CS4231_ALT_FEATURE_1]); | 958 | snd_printdd("init: (3) - afei = 0x%x\n", chip->image[CS4231_ALT_FEATURE_1]); |
971 | #endif | 959 | #endif |
972 | 960 | ||
973 | spin_lock_irqsave(&chip->lock, flags); | 961 | spin_lock_irqsave(&chip->lock, flags); |
@@ -981,7 +969,7 @@ static void snd_cs4231_init(cs4231_t *chip) | |||
981 | snd_cs4231_mce_down(chip); | 969 | snd_cs4231_mce_down(chip); |
982 | 970 | ||
983 | #ifdef SNDRV_DEBUG_MCE | 971 | #ifdef SNDRV_DEBUG_MCE |
984 | snd_printk("init: (4)\n"); | 972 | snd_printdd("init: (4)\n"); |
985 | #endif | 973 | #endif |
986 | 974 | ||
987 | snd_cs4231_mce_up(chip); | 975 | snd_cs4231_mce_up(chip); |
@@ -991,7 +979,7 @@ static void snd_cs4231_init(cs4231_t *chip) | |||
991 | snd_cs4231_mce_down(chip); | 979 | snd_cs4231_mce_down(chip); |
992 | 980 | ||
993 | #ifdef SNDRV_DEBUG_MCE | 981 | #ifdef SNDRV_DEBUG_MCE |
994 | snd_printk("init: (5)\n"); | 982 | snd_printdd("init: (5)\n"); |
995 | #endif | 983 | #endif |
996 | } | 984 | } |
997 | 985 | ||
@@ -1022,6 +1010,7 @@ static int snd_cs4231_open(cs4231_t *chip, unsigned int mode) | |||
1022 | CS4231_RECORD_IRQ | | 1010 | CS4231_RECORD_IRQ | |
1023 | CS4231_TIMER_IRQ); | 1011 | CS4231_TIMER_IRQ); |
1024 | snd_cs4231_out(chip, CS4231_IRQ_STATUS, 0); | 1012 | snd_cs4231_out(chip, CS4231_IRQ_STATUS, 0); |
1013 | |||
1025 | spin_unlock_irqrestore(&chip->lock, flags); | 1014 | spin_unlock_irqrestore(&chip->lock, flags); |
1026 | 1015 | ||
1027 | chip->mode = mode; | 1016 | chip->mode = mode; |
@@ -1136,11 +1125,21 @@ static int snd_cs4231_playback_hw_free(snd_pcm_substream_t *substream) | |||
1136 | static int snd_cs4231_playback_prepare(snd_pcm_substream_t *substream) | 1125 | static int snd_cs4231_playback_prepare(snd_pcm_substream_t *substream) |
1137 | { | 1126 | { |
1138 | cs4231_t *chip = snd_pcm_substream_chip(substream); | 1127 | cs4231_t *chip = snd_pcm_substream_chip(substream); |
1128 | snd_pcm_runtime_t *runtime = substream->runtime; | ||
1139 | unsigned long flags; | 1129 | unsigned long flags; |
1140 | 1130 | ||
1141 | spin_lock_irqsave(&chip->lock, flags); | 1131 | spin_lock_irqsave(&chip->lock, flags); |
1132 | |||
1142 | chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_PLAYBACK_ENABLE | | 1133 | chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_PLAYBACK_ENABLE | |
1143 | CS4231_PLAYBACK_PIO); | 1134 | CS4231_PLAYBACK_PIO); |
1135 | |||
1136 | if (runtime->period_size > 0xffff + 1) | ||
1137 | BUG(); | ||
1138 | |||
1139 | snd_cs4231_out(chip, CS4231_PLY_LWR_CNT, (runtime->period_size - 1) & 0x00ff); | ||
1140 | snd_cs4231_out(chip, CS4231_PLY_UPR_CNT, (runtime->period_size - 1) >> 8 & 0x00ff); | ||
1141 | chip->p_periods_sent = 0; | ||
1142 | |||
1144 | spin_unlock_irqrestore(&chip->lock, flags); | 1143 | spin_unlock_irqrestore(&chip->lock, flags); |
1145 | 1144 | ||
1146 | return 0; | 1145 | return 0; |
@@ -1172,12 +1171,16 @@ static int snd_cs4231_capture_hw_free(snd_pcm_substream_t *substream) | |||
1172 | static int snd_cs4231_capture_prepare(snd_pcm_substream_t *substream) | 1171 | static int snd_cs4231_capture_prepare(snd_pcm_substream_t *substream) |
1173 | { | 1172 | { |
1174 | cs4231_t *chip = snd_pcm_substream_chip(substream); | 1173 | cs4231_t *chip = snd_pcm_substream_chip(substream); |
1174 | snd_pcm_runtime_t *runtime = substream->runtime; | ||
1175 | unsigned long flags; | 1175 | unsigned long flags; |
1176 | 1176 | ||
1177 | spin_lock_irqsave(&chip->lock, flags); | 1177 | spin_lock_irqsave(&chip->lock, flags); |
1178 | chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_RECORD_ENABLE | | 1178 | chip->image[CS4231_IFACE_CTRL] &= ~(CS4231_RECORD_ENABLE | |
1179 | CS4231_RECORD_PIO); | 1179 | CS4231_RECORD_PIO); |
1180 | 1180 | ||
1181 | snd_cs4231_out(chip, CS4231_REC_LWR_CNT, (runtime->period_size - 1) & 0x00ff); | ||
1182 | snd_cs4231_out(chip, CS4231_REC_LWR_CNT, (runtime->period_size - 1) >> 8 & 0x00ff); | ||
1183 | |||
1181 | spin_unlock_irqrestore(&chip->lock, flags); | 1184 | spin_unlock_irqrestore(&chip->lock, flags); |
1182 | 1185 | ||
1183 | return 0; | 1186 | return 0; |
@@ -1196,53 +1199,61 @@ static void snd_cs4231_overrange(cs4231_t *chip) | |||
1196 | chip->capture_substream->runtime->overrange++; | 1199 | chip->capture_substream->runtime->overrange++; |
1197 | } | 1200 | } |
1198 | 1201 | ||
1199 | static void snd_cs4231_generic_interrupt(cs4231_t *chip) | 1202 | static irqreturn_t snd_cs4231_generic_interrupt(cs4231_t *chip) |
1200 | { | 1203 | { |
1201 | unsigned long flags; | 1204 | unsigned long flags; |
1202 | unsigned char status; | 1205 | unsigned char status; |
1203 | 1206 | ||
1207 | /*This is IRQ is not raised by the cs4231*/ | ||
1208 | if (!(__cs4231_readb(chip, CS4231P(chip, STATUS)) & CS4231_GLOBALIRQ)) | ||
1209 | return IRQ_NONE; | ||
1210 | |||
1204 | status = snd_cs4231_in(chip, CS4231_IRQ_STATUS); | 1211 | status = snd_cs4231_in(chip, CS4231_IRQ_STATUS); |
1205 | if (!status) | ||
1206 | return; | ||
1207 | 1212 | ||
1208 | if (status & CS4231_TIMER_IRQ) { | 1213 | if (status & CS4231_TIMER_IRQ) { |
1209 | if (chip->timer) | 1214 | if (chip->timer) |
1210 | snd_timer_interrupt(chip->timer, chip->timer->sticks); | 1215 | snd_timer_interrupt(chip->timer, chip->timer->sticks); |
1211 | } | 1216 | } |
1212 | if (status & CS4231_PLAYBACK_IRQ) | 1217 | |
1213 | snd_pcm_period_elapsed(chip->playback_substream); | 1218 | if (status & CS4231_RECORD_IRQ) |
1214 | if (status & CS4231_RECORD_IRQ) { | ||
1215 | snd_cs4231_overrange(chip); | 1219 | snd_cs4231_overrange(chip); |
1216 | snd_pcm_period_elapsed(chip->capture_substream); | ||
1217 | } | ||
1218 | 1220 | ||
1219 | /* ACK the CS4231 interrupt. */ | 1221 | /* ACK the CS4231 interrupt. */ |
1220 | spin_lock_irqsave(&chip->lock, flags); | 1222 | spin_lock_irqsave(&chip->lock, flags); |
1221 | snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0); | 1223 | snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0); |
1222 | spin_unlock_irqrestore(&chip->lock, flags); | 1224 | spin_unlock_irqrestore(&chip->lock, flags); |
1225 | |||
1226 | return 0; | ||
1223 | } | 1227 | } |
1224 | 1228 | ||
1225 | #ifdef SBUS_SUPPORT | 1229 | #ifdef SBUS_SUPPORT |
1226 | static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *regs) | 1230 | static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *regs) |
1227 | { | 1231 | { |
1228 | cs4231_t *chip = dev_id; | 1232 | cs4231_t *chip = dev_id; |
1229 | u32 csr; | ||
1230 | |||
1231 | csr = sbus_readl(chip->port + APCCSR); | ||
1232 | if (!(csr & (APC_INT_PENDING | | ||
1233 | APC_PLAY_INT | | ||
1234 | APC_CAPT_INT | | ||
1235 | APC_GENL_INT | | ||
1236 | APC_XINT_PEMP | | ||
1237 | APC_XINT_CEMP))) | ||
1238 | return IRQ_NONE; | ||
1239 | 1233 | ||
1240 | /* ACK the APC interrupt. */ | 1234 | /* ACK the APC interrupt. */ |
1235 | u32 csr = sbus_readl(chip->port + APCCSR); | ||
1236 | |||
1241 | sbus_writel(csr, chip->port + APCCSR); | 1237 | sbus_writel(csr, chip->port + APCCSR); |
1242 | 1238 | ||
1243 | snd_cs4231_generic_interrupt(chip); | 1239 | if ((chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE) && |
1240 | (csr & APC_PLAY_INT) && | ||
1241 | (csr & APC_XINT_PNVA) && | ||
1242 | !(csr & APC_XINT_EMPT)) { | ||
1243 | snd_cs4231_sbus_advance_dma(chip->playback_substream, | ||
1244 | &chip->p_periods_sent); | ||
1245 | snd_pcm_period_elapsed(chip->playback_substream); | ||
1246 | } | ||
1244 | 1247 | ||
1245 | return IRQ_HANDLED; | 1248 | if ((chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) && |
1249 | (csr & APC_CAPT_INT) && | ||
1250 | (csr & APC_XINT_CNVA)) { | ||
1251 | snd_cs4231_sbus_advance_dma(chip->capture_substream, | ||
1252 | &chip->c_periods_sent); | ||
1253 | snd_pcm_period_elapsed(chip->capture_substream); | ||
1254 | } | ||
1255 | |||
1256 | return snd_cs4231_generic_interrupt(chip); | ||
1246 | } | 1257 | } |
1247 | #endif | 1258 | #endif |
1248 | 1259 | ||
@@ -1290,7 +1301,8 @@ static snd_pcm_uframes_t snd_cs4231_playback_pointer(snd_pcm_substream_t *substr | |||
1290 | #ifdef EBUS_SUPPORT | 1301 | #ifdef EBUS_SUPPORT |
1291 | } | 1302 | } |
1292 | #endif | 1303 | #endif |
1293 | ptr += (period_bytes - residue); | 1304 | ptr += period_bytes - residue; |
1305 | |||
1294 | return bytes_to_frames(substream->runtime, ptr); | 1306 | return bytes_to_frames(substream->runtime, ptr); |
1295 | } | 1307 | } |
1296 | 1308 | ||
@@ -1314,7 +1326,7 @@ static snd_pcm_uframes_t snd_cs4231_capture_pointer(snd_pcm_substream_t * substr | |||
1314 | #ifdef EBUS_SUPPORT | 1326 | #ifdef EBUS_SUPPORT |
1315 | } | 1327 | } |
1316 | #endif | 1328 | #endif |
1317 | ptr += (period_bytes - residue); | 1329 | ptr += period_bytes - residue; |
1318 | return bytes_to_frames(substream->runtime, ptr); | 1330 | return bytes_to_frames(substream->runtime, ptr); |
1319 | } | 1331 | } |
1320 | 1332 | ||
@@ -1328,9 +1340,6 @@ static int snd_cs4231_probe(cs4231_t *chip) | |||
1328 | int i, id, vers; | 1340 | int i, id, vers; |
1329 | unsigned char *ptr; | 1341 | unsigned char *ptr; |
1330 | 1342 | ||
1331 | #if 0 | ||
1332 | snd_cs4231_debug(chip); | ||
1333 | #endif | ||
1334 | id = vers = 0; | 1343 | id = vers = 0; |
1335 | for (i = 0; i < 50; i++) { | 1344 | for (i = 0; i < 50; i++) { |
1336 | mb(); | 1345 | mb(); |
@@ -1985,13 +1994,13 @@ static int __init snd_cs4231_sbus_create(snd_card_t *card, | |||
1985 | chip->port = sbus_ioremap(&sdev->resource[0], 0, | 1994 | chip->port = sbus_ioremap(&sdev->resource[0], 0, |
1986 | chip->regs_size, "cs4231"); | 1995 | chip->regs_size, "cs4231"); |
1987 | if (!chip->port) { | 1996 | if (!chip->port) { |
1988 | snd_printk("cs4231-%d: Unable to map chip registers.\n", dev); | 1997 | snd_printdd("cs4231-%d: Unable to map chip registers.\n", dev); |
1989 | return -EIO; | 1998 | return -EIO; |
1990 | } | 1999 | } |
1991 | 2000 | ||
1992 | if (request_irq(sdev->irqs[0], snd_cs4231_sbus_interrupt, | 2001 | if (request_irq(sdev->irqs[0], snd_cs4231_sbus_interrupt, |
1993 | SA_SHIRQ, "cs4231", chip)) { | 2002 | SA_SHIRQ, "cs4231", chip)) { |
1994 | snd_printk("cs4231-%d: Unable to grab SBUS IRQ %s\n", | 2003 | snd_printdd("cs4231-%d: Unable to grab SBUS IRQ %s\n", |
1995 | dev, | 2004 | dev, |
1996 | __irq_itoa(sdev->irqs[0])); | 2005 | __irq_itoa(sdev->irqs[0])); |
1997 | snd_cs4231_sbus_free(chip); | 2006 | snd_cs4231_sbus_free(chip); |
@@ -2113,29 +2122,29 @@ static int __init snd_cs4231_ebus_create(snd_card_t *card, | |||
2113 | chip->eb2c.regs = ioremap(edev->resource[2].start, 0x10); | 2122 | chip->eb2c.regs = ioremap(edev->resource[2].start, 0x10); |
2114 | if (!chip->port || !chip->eb2p.regs || !chip->eb2c.regs) { | 2123 | if (!chip->port || !chip->eb2p.regs || !chip->eb2c.regs) { |
2115 | snd_cs4231_ebus_free(chip); | 2124 | snd_cs4231_ebus_free(chip); |
2116 | snd_printk("cs4231-%d: Unable to map chip registers.\n", dev); | 2125 | snd_printdd("cs4231-%d: Unable to map chip registers.\n", dev); |
2117 | return -EIO; | 2126 | return -EIO; |
2118 | } | 2127 | } |
2119 | 2128 | ||
2120 | if (ebus_dma_register(&chip->eb2c)) { | 2129 | if (ebus_dma_register(&chip->eb2c)) { |
2121 | snd_cs4231_ebus_free(chip); | 2130 | snd_cs4231_ebus_free(chip); |
2122 | snd_printk("cs4231-%d: Unable to register EBUS capture DMA\n", dev); | 2131 | snd_printdd("cs4231-%d: Unable to register EBUS capture DMA\n", dev); |
2123 | return -EBUSY; | 2132 | return -EBUSY; |
2124 | } | 2133 | } |
2125 | if (ebus_dma_irq_enable(&chip->eb2c, 1)) { | 2134 | if (ebus_dma_irq_enable(&chip->eb2c, 1)) { |
2126 | snd_cs4231_ebus_free(chip); | 2135 | snd_cs4231_ebus_free(chip); |
2127 | snd_printk("cs4231-%d: Unable to enable EBUS capture IRQ\n", dev); | 2136 | snd_printdd("cs4231-%d: Unable to enable EBUS capture IRQ\n", dev); |
2128 | return -EBUSY; | 2137 | return -EBUSY; |
2129 | } | 2138 | } |
2130 | 2139 | ||
2131 | if (ebus_dma_register(&chip->eb2p)) { | 2140 | if (ebus_dma_register(&chip->eb2p)) { |
2132 | snd_cs4231_ebus_free(chip); | 2141 | snd_cs4231_ebus_free(chip); |
2133 | snd_printk("cs4231-%d: Unable to register EBUS play DMA\n", dev); | 2142 | snd_printdd("cs4231-%d: Unable to register EBUS play DMA\n", dev); |
2134 | return -EBUSY; | 2143 | return -EBUSY; |
2135 | } | 2144 | } |
2136 | if (ebus_dma_irq_enable(&chip->eb2p, 1)) { | 2145 | if (ebus_dma_irq_enable(&chip->eb2p, 1)) { |
2137 | snd_cs4231_ebus_free(chip); | 2146 | snd_cs4231_ebus_free(chip); |
2138 | snd_printk("cs4231-%d: Unable to enable EBUS play IRQ\n", dev); | 2147 | snd_printdd("cs4231-%d: Unable to enable EBUS play IRQ\n", dev); |
2139 | return -EBUSY; | 2148 | return -EBUSY; |
2140 | } | 2149 | } |
2141 | 2150 | ||
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index d5ae2055b89..2ead878bcb8 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -1444,9 +1444,9 @@ static snd_pcm_hardware_t snd_usb_playback = | |||
1444 | SNDRV_PCM_INFO_BATCH | | 1444 | SNDRV_PCM_INFO_BATCH | |
1445 | SNDRV_PCM_INFO_INTERLEAVED | | 1445 | SNDRV_PCM_INFO_INTERLEAVED | |
1446 | SNDRV_PCM_INFO_BLOCK_TRANSFER, | 1446 | SNDRV_PCM_INFO_BLOCK_TRANSFER, |
1447 | .buffer_bytes_max = (256*1024), | 1447 | .buffer_bytes_max = 1024 * 1024, |
1448 | .period_bytes_min = 64, | 1448 | .period_bytes_min = 64, |
1449 | .period_bytes_max = (128*1024), | 1449 | .period_bytes_max = 512 * 1024, |
1450 | .periods_min = 2, | 1450 | .periods_min = 2, |
1451 | .periods_max = 1024, | 1451 | .periods_max = 1024, |
1452 | }; | 1452 | }; |
@@ -1458,9 +1458,9 @@ static snd_pcm_hardware_t snd_usb_capture = | |||
1458 | SNDRV_PCM_INFO_BATCH | | 1458 | SNDRV_PCM_INFO_BATCH | |
1459 | SNDRV_PCM_INFO_INTERLEAVED | | 1459 | SNDRV_PCM_INFO_INTERLEAVED | |
1460 | SNDRV_PCM_INFO_BLOCK_TRANSFER, | 1460 | SNDRV_PCM_INFO_BLOCK_TRANSFER, |
1461 | .buffer_bytes_max = (256*1024), | 1461 | .buffer_bytes_max = 1024 * 1024, |
1462 | .period_bytes_min = 64, | 1462 | .period_bytes_min = 64, |
1463 | .period_bytes_max = (128*1024), | 1463 | .period_bytes_max = 512 * 1024, |
1464 | .periods_min = 2, | 1464 | .periods_min = 2, |
1465 | .periods_max = 1024, | 1465 | .periods_max = 1024, |
1466 | }; | 1466 | }; |
diff --git a/sound/usb/usbmixer_maps.c b/sound/usb/usbmixer_maps.c index f05500b05ec..c1264434e50 100644 --- a/sound/usb/usbmixer_maps.c +++ b/sound/usb/usbmixer_maps.c | |||
@@ -238,6 +238,16 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = { | |||
238 | .selector_map = audigy2nx_selectors, | 238 | .selector_map = audigy2nx_selectors, |
239 | }, | 239 | }, |
240 | { | 240 | { |
241 | /* Hercules DJ Console (Windows Edition) */ | ||
242 | .id = USB_ID(0x06f8, 0xb000), | ||
243 | .ignore_ctl_error = 1, | ||
244 | }, | ||
245 | { | ||
246 | /* Hercules DJ Console (Macintosh Edition) */ | ||
247 | .id = USB_ID(0x06f8, 0xd002), | ||
248 | .ignore_ctl_error = 1, | ||
249 | }, | ||
250 | { | ||
241 | .id = USB_ID(0x08bb, 0x2702), | 251 | .id = USB_ID(0x08bb, 0x2702), |
242 | .map = linex_map, | 252 | .map = linex_map, |
243 | .ignore_ctl_error = 1, | 253 | .ignore_ctl_error = 1, |
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index f74e652a1e5..948759da656 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h | |||
@@ -117,6 +117,10 @@ YAMAHA_DEVICE(0x103a, NULL), | |||
117 | YAMAHA_DEVICE(0x103b, NULL), | 117 | YAMAHA_DEVICE(0x103b, NULL), |
118 | YAMAHA_DEVICE(0x103c, NULL), | 118 | YAMAHA_DEVICE(0x103c, NULL), |
119 | YAMAHA_DEVICE(0x103d, NULL), | 119 | YAMAHA_DEVICE(0x103d, NULL), |
120 | YAMAHA_DEVICE(0x103e, NULL), | ||
121 | YAMAHA_DEVICE(0x103f, NULL), | ||
122 | YAMAHA_DEVICE(0x1040, NULL), | ||
123 | YAMAHA_DEVICE(0x1041, NULL), | ||
120 | YAMAHA_DEVICE(0x2000, "DGP-7"), | 124 | YAMAHA_DEVICE(0x2000, "DGP-7"), |
121 | YAMAHA_DEVICE(0x2001, "DGP-5"), | 125 | YAMAHA_DEVICE(0x2001, "DGP-5"), |
122 | YAMAHA_DEVICE(0x2002, NULL), | 126 | YAMAHA_DEVICE(0x2002, NULL), |
@@ -1010,6 +1014,40 @@ YAMAHA_DEVICE(0x7010, "UB99"), | |||
1010 | } | 1014 | } |
1011 | } | 1015 | } |
1012 | }, | 1016 | }, |
1017 | { | ||
1018 | USB_DEVICE_VENDOR_SPEC(0x0582, 0x007a), | ||
1019 | .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { | ||
1020 | .vendor_name = "Roland", | ||
1021 | /* RD-700SX, RD-300SX */ | ||
1022 | .ifnum = 0, | ||
1023 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1024 | .data = & (const snd_usb_midi_endpoint_info_t) { | ||
1025 | .out_cables = 0x0003, | ||
1026 | .in_cables = 0x0003 | ||
1027 | } | ||
1028 | } | ||
1029 | }, | ||
1030 | |||
1031 | /* Guillemot devices */ | ||
1032 | { | ||
1033 | /* | ||
1034 | * This is for the "Windows Edition" where the external MIDI ports are | ||
1035 | * the only MIDI ports; the control data is reported through HID | ||
1036 | * interfaces. The "Macintosh Edition" has ID 0xd002 and uses standard | ||
1037 | * compliant USB MIDI ports for external MIDI and controls. | ||
1038 | */ | ||
1039 | USB_DEVICE_VENDOR_SPEC(0x06f8, 0xb000), | ||
1040 | .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { | ||
1041 | .vendor_name = "Hercules", | ||
1042 | .product_name = "DJ Console (WE)", | ||
1043 | .ifnum = 4, | ||
1044 | .type = QUIRK_MIDI_FIXED_ENDPOINT, | ||
1045 | .data = & (const snd_usb_midi_endpoint_info_t) { | ||
1046 | .out_cables = 0x0001, | ||
1047 | .in_cables = 0x0001 | ||
1048 | } | ||
1049 | } | ||
1050 | }, | ||
1013 | 1051 | ||
1014 | /* Midiman/M-Audio devices */ | 1052 | /* Midiman/M-Audio devices */ |
1015 | { | 1053 | { |
@@ -1339,10 +1377,20 @@ YAMAHA_DEVICE(0x7010, "UB99"), | |||
1339 | } | 1377 | } |
1340 | }, | 1378 | }, |
1341 | 1379 | ||
1380 | /* TerraTec devices */ | ||
1381 | { | ||
1382 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012), | ||
1383 | .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { | ||
1384 | .vendor_name = "TerraTec", | ||
1385 | .product_name = "PHASE 26", | ||
1386 | .ifnum = 3, | ||
1387 | .type = QUIRK_MIDI_STANDARD_INTERFACE | ||
1388 | } | ||
1389 | }, | ||
1342 | { | 1390 | { |
1343 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), | 1391 | USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0013), |
1344 | .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { | 1392 | .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { |
1345 | .vendor_name = "Terratec", | 1393 | .vendor_name = "TerraTec", |
1346 | .product_name = "PHASE 26", | 1394 | .product_name = "PHASE 26", |
1347 | .ifnum = 3, | 1395 | .ifnum = 3, |
1348 | .type = QUIRK_MIDI_STANDARD_INTERFACE | 1396 | .type = QUIRK_MIDI_STANDARD_INTERFACE |