diff options
| -rw-r--r-- | sound/isa/sb/emu8000.c | 11 | ||||
| -rw-r--r-- | sound/oss/dev_table.c | 16 | ||||
| -rw-r--r-- | sound/oss/sound_config.h | 2 | ||||
| -rw-r--r-- | sound/oss/soundcard.c | 4 | ||||
| -rw-r--r-- | sound/pci/ac97/ac97_codec.c | 10 | ||||
| -rw-r--r-- | sound/pci/ac97/ac97_id.h | 2 | ||||
| -rw-r--r-- | sound/pci/ac97/ac97_patch.c | 1 | ||||
| -rw-r--r-- | sound/pci/atiixp.c | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 2 | ||||
| -rw-r--r-- | sound/pci/riptide/riptide.c | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/wm8350.c | 2 | ||||
| -rw-r--r-- | sound/usb/usbaudio.c | 2 |
12 files changed, 38 insertions, 17 deletions
diff --git a/sound/isa/sb/emu8000.c b/sound/isa/sb/emu8000.c index 751762f1c59a..0c40951b6523 100644 --- a/sound/isa/sb/emu8000.c +++ b/sound/isa/sb/emu8000.c | |||
| @@ -377,12 +377,13 @@ init_arrays(struct snd_emu8000 *emu) | |||
| 377 | static void __devinit | 377 | static void __devinit |
| 378 | size_dram(struct snd_emu8000 *emu) | 378 | size_dram(struct snd_emu8000 *emu) |
| 379 | { | 379 | { |
| 380 | int i, size; | 380 | int i, size, detected_size; |
| 381 | 381 | ||
| 382 | if (emu->dram_checked) | 382 | if (emu->dram_checked) |
| 383 | return; | 383 | return; |
| 384 | 384 | ||
| 385 | size = 0; | 385 | size = 0; |
| 386 | detected_size = 0; | ||
| 386 | 387 | ||
| 387 | /* write out a magic number */ | 388 | /* write out a magic number */ |
| 388 | snd_emu8000_dma_chan(emu, 0, EMU8000_RAM_WRITE); | 389 | snd_emu8000_dma_chan(emu, 0, EMU8000_RAM_WRITE); |
| @@ -393,6 +394,8 @@ size_dram(struct snd_emu8000 *emu) | |||
| 393 | 394 | ||
| 394 | while (size < EMU8000_MAX_DRAM) { | 395 | while (size < EMU8000_MAX_DRAM) { |
| 395 | 396 | ||
| 397 | size += 512 * 1024; /* increment 512kbytes */ | ||
| 398 | |||
| 396 | /* Write a unique data on the test address. | 399 | /* Write a unique data on the test address. |
| 397 | * if the address is out of range, the data is written on | 400 | * if the address is out of range, the data is written on |
| 398 | * 0x200000(=EMU8000_DRAM_OFFSET). Then the id word is | 401 | * 0x200000(=EMU8000_DRAM_OFFSET). Then the id word is |
| @@ -414,7 +417,7 @@ size_dram(struct snd_emu8000 *emu) | |||
| 414 | if (EMU8000_SMLD_READ(emu) != UNIQUE_ID2) | 417 | if (EMU8000_SMLD_READ(emu) != UNIQUE_ID2) |
| 415 | break; /* no memory at this address */ | 418 | break; /* no memory at this address */ |
| 416 | 419 | ||
| 417 | size += 512 * 1024; /* increment 512kbytes */ | 420 | detected_size = size; |
| 418 | 421 | ||
| 419 | snd_emu8000_read_wait(emu); | 422 | snd_emu8000_read_wait(emu); |
| 420 | 423 | ||
| @@ -442,9 +445,9 @@ size_dram(struct snd_emu8000 *emu) | |||
| 442 | snd_emu8000_dma_chan(emu, 1, EMU8000_RAM_CLOSE); | 445 | snd_emu8000_dma_chan(emu, 1, EMU8000_RAM_CLOSE); |
| 443 | 446 | ||
| 444 | snd_printdd("EMU8000 [0x%lx]: %d Kb on-board memory detected\n", | 447 | snd_printdd("EMU8000 [0x%lx]: %d Kb on-board memory detected\n", |
| 445 | emu->port1, size/1024); | 448 | emu->port1, detected_size/1024); |
| 446 | 449 | ||
| 447 | emu->mem_size = size; | 450 | emu->mem_size = detected_size; |
| 448 | emu->dram_checked = 1; | 451 | emu->dram_checked = 1; |
| 449 | } | 452 | } |
| 450 | 453 | ||
diff --git a/sound/oss/dev_table.c b/sound/oss/dev_table.c index 08274c995d06..727bdb9ba2dc 100644 --- a/sound/oss/dev_table.c +++ b/sound/oss/dev_table.c | |||
| @@ -67,14 +67,15 @@ int sound_install_audiodrv(int vers, char *name, struct audio_driver *driver, | |||
| 67 | return -(EBUSY); | 67 | return -(EBUSY); |
| 68 | } | 68 | } |
| 69 | d = (struct audio_driver *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct audio_driver))); | 69 | d = (struct audio_driver *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct audio_driver))); |
| 70 | 70 | sound_nblocks++; | |
| 71 | if (sound_nblocks < 1024) | 71 | if (sound_nblocks >= MAX_MEM_BLOCKS) |
| 72 | sound_nblocks++; | 72 | sound_nblocks = MAX_MEM_BLOCKS - 1; |
| 73 | 73 | ||
| 74 | op = (struct audio_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct audio_operations))); | 74 | op = (struct audio_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct audio_operations))); |
| 75 | sound_nblocks++; | ||
| 76 | if (sound_nblocks >= MAX_MEM_BLOCKS) | ||
| 77 | sound_nblocks = MAX_MEM_BLOCKS - 1; | ||
| 75 | 78 | ||
| 76 | if (sound_nblocks < 1024) | ||
| 77 | sound_nblocks++; | ||
| 78 | if (d == NULL || op == NULL) { | 79 | if (d == NULL || op == NULL) { |
| 79 | printk(KERN_ERR "Sound: Can't allocate driver for (%s)\n", name); | 80 | printk(KERN_ERR "Sound: Can't allocate driver for (%s)\n", name); |
| 80 | sound_unload_audiodev(num); | 81 | sound_unload_audiodev(num); |
| @@ -128,9 +129,10 @@ int sound_install_mixer(int vers, char *name, struct mixer_operations *driver, | |||
| 128 | until you unload sound! */ | 129 | until you unload sound! */ |
| 129 | 130 | ||
| 130 | op = (struct mixer_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct mixer_operations))); | 131 | op = (struct mixer_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc(sizeof(struct mixer_operations))); |
| 132 | sound_nblocks++; | ||
| 133 | if (sound_nblocks >= MAX_MEM_BLOCKS) | ||
| 134 | sound_nblocks = MAX_MEM_BLOCKS - 1; | ||
| 131 | 135 | ||
| 132 | if (sound_nblocks < 1024) | ||
| 133 | sound_nblocks++; | ||
| 134 | if (op == NULL) { | 136 | if (op == NULL) { |
| 135 | printk(KERN_ERR "Sound: Can't allocate mixer driver for (%s)\n", name); | 137 | printk(KERN_ERR "Sound: Can't allocate mixer driver for (%s)\n", name); |
| 136 | return -ENOMEM; | 138 | return -ENOMEM; |
diff --git a/sound/oss/sound_config.h b/sound/oss/sound_config.h index 55271fbe7f49..9d35c4c65b9b 100644 --- a/sound/oss/sound_config.h +++ b/sound/oss/sound_config.h | |||
| @@ -142,4 +142,6 @@ static inline int translate_mode(struct file *file) | |||
| 142 | #define TIMER_ARMED 121234 | 142 | #define TIMER_ARMED 121234 |
| 143 | #define TIMER_NOT_ARMED 1 | 143 | #define TIMER_NOT_ARMED 1 |
| 144 | 144 | ||
| 145 | #define MAX_MEM_BLOCKS 1024 | ||
| 146 | |||
| 145 | #endif | 147 | #endif |
diff --git a/sound/oss/soundcard.c b/sound/oss/soundcard.c index 61aaedae6b7e..c62530943888 100644 --- a/sound/oss/soundcard.c +++ b/sound/oss/soundcard.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | /* | 56 | /* |
| 57 | * Table for permanently allocated memory (used when unloading the module) | 57 | * Table for permanently allocated memory (used when unloading the module) |
| 58 | */ | 58 | */ |
| 59 | void * sound_mem_blocks[1024]; | 59 | void * sound_mem_blocks[MAX_MEM_BLOCKS]; |
| 60 | int sound_nblocks = 0; | 60 | int sound_nblocks = 0; |
| 61 | 61 | ||
| 62 | /* Persistent DMA buffers */ | 62 | /* Persistent DMA buffers */ |
| @@ -574,7 +574,7 @@ static int __init oss_init(void) | |||
| 574 | NULL, "%s%d", dev_list[i].name, j); | 574 | NULL, "%s%d", dev_list[i].name, j); |
| 575 | } | 575 | } |
| 576 | 576 | ||
| 577 | if (sound_nblocks >= 1024) | 577 | if (sound_nblocks >= MAX_MEM_BLOCKS - 1) |
| 578 | printk(KERN_ERR "Sound warning: Deallocation table was too small.\n"); | 578 | printk(KERN_ERR "Sound warning: Deallocation table was too small.\n"); |
| 579 | 579 | ||
| 580 | return 0; | 580 | return 0; |
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index c11920623009..a7630e9edf8a 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c | |||
| @@ -83,6 +83,7 @@ static const struct ac97_codec_id snd_ac97_codec_id_vendors[] = { | |||
| 83 | { 0x4e534300, 0xffffff00, "National Semiconductor", NULL, NULL }, | 83 | { 0x4e534300, 0xffffff00, "National Semiconductor", NULL, NULL }, |
| 84 | { 0x50534300, 0xffffff00, "Philips", NULL, NULL }, | 84 | { 0x50534300, 0xffffff00, "Philips", NULL, NULL }, |
| 85 | { 0x53494c00, 0xffffff00, "Silicon Laboratory", NULL, NULL }, | 85 | { 0x53494c00, 0xffffff00, "Silicon Laboratory", NULL, NULL }, |
| 86 | { 0x53544d00, 0xffffff00, "STMicroelectronics", NULL, NULL }, | ||
| 86 | { 0x54524100, 0xffffff00, "TriTech", NULL, NULL }, | 87 | { 0x54524100, 0xffffff00, "TriTech", NULL, NULL }, |
| 87 | { 0x54584e00, 0xffffff00, "Texas Instruments", NULL, NULL }, | 88 | { 0x54584e00, 0xffffff00, "Texas Instruments", NULL, NULL }, |
| 88 | { 0x56494100, 0xffffff00, "VIA Technologies", NULL, NULL }, | 89 | { 0x56494100, 0xffffff00, "VIA Technologies", NULL, NULL }, |
| @@ -161,6 +162,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = { | |||
| 161 | { 0x4e534350, 0xffffffff, "LM4550", patch_lm4550, NULL }, // volume wrap fix | 162 | { 0x4e534350, 0xffffffff, "LM4550", patch_lm4550, NULL }, // volume wrap fix |
| 162 | { 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL }, | 163 | { 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL }, |
| 163 | { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH }, | 164 | { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH }, |
| 165 | { 0x53544d02, 0xffffffff, "ST7597", NULL, NULL }, | ||
| 164 | { 0x54524102, 0xffffffff, "TR28022", NULL, NULL }, | 166 | { 0x54524102, 0xffffffff, "TR28022", NULL, NULL }, |
| 165 | { 0x54524103, 0xffffffff, "TR28023", NULL, NULL }, | 167 | { 0x54524103, 0xffffffff, "TR28023", NULL, NULL }, |
| 166 | { 0x54524106, 0xffffffff, "TR28026", NULL, NULL }, | 168 | { 0x54524106, 0xffffffff, "TR28026", NULL, NULL }, |
| @@ -213,6 +215,14 @@ static int snd_ac97_valid_reg(struct snd_ac97 *ac97, unsigned short reg) | |||
| 213 | { | 215 | { |
| 214 | /* filter some registers for buggy codecs */ | 216 | /* filter some registers for buggy codecs */ |
| 215 | switch (ac97->id) { | 217 | switch (ac97->id) { |
| 218 | case AC97_ID_ST_AC97_ID4: | ||
| 219 | if (reg == 0x08) | ||
| 220 | return 0; | ||
| 221 | /* fall through */ | ||
| 222 | case AC97_ID_ST7597: | ||
| 223 | if (reg == 0x22 || reg == 0x7a) | ||
| 224 | return 1; | ||
| 225 | /* fall through */ | ||
| 216 | case AC97_ID_AK4540: | 226 | case AC97_ID_AK4540: |
| 217 | case AC97_ID_AK4542: | 227 | case AC97_ID_AK4542: |
| 218 | if (reg <= 0x1c || reg == 0x20 || reg == 0x26 || reg >= 0x7c) | 228 | if (reg <= 0x1c || reg == 0x20 || reg == 0x26 || reg >= 0x7c) |
diff --git a/sound/pci/ac97/ac97_id.h b/sound/pci/ac97/ac97_id.h index c129492c82b3..d603147c4a96 100644 --- a/sound/pci/ac97/ac97_id.h +++ b/sound/pci/ac97/ac97_id.h | |||
| @@ -62,3 +62,5 @@ | |||
| 62 | #define AC97_ID_CM9761_78 0x434d4978 | 62 | #define AC97_ID_CM9761_78 0x434d4978 |
| 63 | #define AC97_ID_CM9761_82 0x434d4982 | 63 | #define AC97_ID_CM9761_82 0x434d4982 |
| 64 | #define AC97_ID_CM9761_83 0x434d4983 | 64 | #define AC97_ID_CM9761_83 0x434d4983 |
| 65 | #define AC97_ID_ST7597 0x53544d02 | ||
| 66 | #define AC97_ID_ST_AC97_ID4 0x53544d04 | ||
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 139cf3b2b9d7..d9266bae2849 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
| @@ -1870,6 +1870,7 @@ static unsigned int ad1981_jacks_blacklist[] = { | |||
| 1870 | 0x10140554, /* Thinkpad T42p/R50p */ | 1870 | 0x10140554, /* Thinkpad T42p/R50p */ |
| 1871 | 0x10140567, /* Thinkpad T43p 2668-G7U */ | 1871 | 0x10140567, /* Thinkpad T43p 2668-G7U */ |
| 1872 | 0x10140581, /* Thinkpad X41-2527 */ | 1872 | 0x10140581, /* Thinkpad X41-2527 */ |
| 1873 | 0x10280160, /* Dell Dimension 2400 */ | ||
| 1873 | 0x104380b0, /* Asus A7V8X-MX */ | 1874 | 0x104380b0, /* Asus A7V8X-MX */ |
| 1874 | 0x11790241, /* Toshiba Satellite A-15 S127 */ | 1875 | 0x11790241, /* Toshiba Satellite A-15 S127 */ |
| 1875 | 0x144dc01a, /* Samsung NP-X20C004/SEG */ | 1876 | 0x144dc01a, /* Samsung NP-X20C004/SEG */ |
diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index d6752dff2a44..42b4fbbd8e2b 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c | |||
| @@ -297,6 +297,7 @@ static struct pci_device_id snd_atiixp_ids[] = { | |||
| 297 | MODULE_DEVICE_TABLE(pci, snd_atiixp_ids); | 297 | MODULE_DEVICE_TABLE(pci, snd_atiixp_ids); |
| 298 | 298 | ||
| 299 | static struct snd_pci_quirk atiixp_quirks[] __devinitdata = { | 299 | static struct snd_pci_quirk atiixp_quirks[] __devinitdata = { |
| 300 | SND_PCI_QUIRK(0x105b, 0x0c81, "Foxconn RC4107MA-RS2", 0), | ||
| 300 | SND_PCI_QUIRK(0x15bd, 0x3100, "DFI RS482", 0), | 301 | SND_PCI_QUIRK(0x15bd, 0x3100, "DFI RS482", 0), |
| 301 | { } /* terminator */ | 302 | { } /* terminator */ |
| 302 | }; | 303 | }; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index c7465053d6bb..e3caa78ccd54 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -15493,7 +15493,7 @@ static struct alc_config_preset alc861vd_presets[] = { | |||
| 15493 | static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, | 15493 | static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, |
| 15494 | const struct auto_pin_cfg *cfg) | 15494 | const struct auto_pin_cfg *cfg) |
| 15495 | { | 15495 | { |
| 15496 | return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x09, 0); | 15496 | return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x22, 0); |
| 15497 | } | 15497 | } |
| 15498 | 15498 | ||
| 15499 | 15499 | ||
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index b5ca02e2038c..e66ef2b69b5d 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c | |||
| @@ -1058,7 +1058,7 @@ setsamplerate(struct cmdif *cif, unsigned char *intdec, unsigned int rate) | |||
| 1058 | rptr.retwords[2] != M && | 1058 | rptr.retwords[2] != M && |
| 1059 | rptr.retwords[3] != N && | 1059 | rptr.retwords[3] != N && |
| 1060 | i++ < MAX_WRITE_RETRY); | 1060 | i++ < MAX_WRITE_RETRY); |
| 1061 | if (i == MAX_WRITE_RETRY) { | 1061 | if (i > MAX_WRITE_RETRY) { |
| 1062 | snd_printdd("sent samplerate %d: %d failed\n", | 1062 | snd_printdd("sent samplerate %d: %d failed\n", |
| 1063 | *intdec, rate); | 1063 | *intdec, rate); |
| 1064 | return -EIO; | 1064 | return -EIO; |
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c index ebbf11b653a4..718ef912e758 100644 --- a/sound/soc/codecs/wm8350.c +++ b/sound/soc/codecs/wm8350.c | |||
| @@ -925,7 +925,7 @@ static int wm8350_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt) | |||
| 925 | iface |= 0x3 << 8; | 925 | iface |= 0x3 << 8; |
| 926 | break; | 926 | break; |
| 927 | case SND_SOC_DAIFMT_DSP_B: | 927 | case SND_SOC_DAIFMT_DSP_B: |
| 928 | iface |= 0x3 << 8; /* lg not sure which mode */ | 928 | iface |= 0x3 << 8 | WM8350_AIF_LRCLK_INV; |
| 929 | break; | 929 | break; |
| 930 | default: | 930 | default: |
| 931 | return -EINVAL; | 931 | return -EINVAL; |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index 4963defee18a..9edef4684978 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
| @@ -1936,7 +1936,7 @@ static int snd_usb_pcm_close(struct snd_pcm_substream *substream, int direction) | |||
| 1936 | struct snd_usb_stream *as = snd_pcm_substream_chip(substream); | 1936 | struct snd_usb_stream *as = snd_pcm_substream_chip(substream); |
| 1937 | struct snd_usb_substream *subs = &as->substream[direction]; | 1937 | struct snd_usb_substream *subs = &as->substream[direction]; |
| 1938 | 1938 | ||
| 1939 | if (subs->interface >= 0) { | 1939 | if (!as->chip->shutdown && subs->interface >= 0) { |
| 1940 | usb_set_interface(subs->dev, subs->interface, 0); | 1940 | usb_set_interface(subs->dev, subs->interface, 0); |
| 1941 | subs->interface = -1; | 1941 | subs->interface = -1; |
| 1942 | } | 1942 | } |
