diff options
| -rw-r--r-- | include/sound/ak4113.h | 2 | ||||
| -rw-r--r-- | sound/core/pcm_lib.c | 6 | ||||
| -rw-r--r-- | sound/i2c/other/ak4113.c | 2 | ||||
| -rw-r--r-- | sound/oss/vidc.c | 4 | ||||
| -rw-r--r-- | sound/pci/ac97/ac97_patch.c | 2 | ||||
| -rw-r--r-- | sound/pci/cmipci.c | 14 | ||||
| -rw-r--r-- | sound/pci/echoaudio/echoaudio.c | 5 | ||||
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_conexant.c | 15 | ||||
| -rw-r--r-- | sound/pci/hda/patch_nvhdmi.c | 15 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 10 | ||||
| -rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 2 | ||||
| -rw-r--r-- | sound/pci/mixart/mixart.c | 24 |
13 files changed, 71 insertions, 31 deletions
diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h index 8988edae1609..2609048c1d44 100644 --- a/include/sound/ak4113.h +++ b/include/sound/ak4113.h | |||
| @@ -307,7 +307,7 @@ struct ak4113 { | |||
| 307 | 307 | ||
| 308 | int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, | 308 | int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, |
| 309 | ak4113_write_t *write, | 309 | ak4113_write_t *write, |
| 310 | const unsigned char pgm[AK4113_WRITABLE_REGS], | 310 | const unsigned char *pgm, |
| 311 | void *private_data, struct ak4113 **r_ak4113); | 311 | void *private_data, struct ak4113 **r_ak4113); |
| 312 | void snd_ak4113_reg_write(struct ak4113 *ak4113, unsigned char reg, | 312 | void snd_ak4113_reg_write(struct ak4113 *ak4113, unsigned char reg, |
| 313 | unsigned char mask, unsigned char val); | 313 | unsigned char mask, unsigned char val); |
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index b546ac2660f9..a2ff86189d2a 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c | |||
| @@ -148,6 +148,9 @@ static void pcm_debug_name(struct snd_pcm_substream *substream, | |||
| 148 | 148 | ||
| 149 | #define xrun_debug(substream, mask) \ | 149 | #define xrun_debug(substream, mask) \ |
| 150 | ((substream)->pstr->xrun_debug & (mask)) | 150 | ((substream)->pstr->xrun_debug & (mask)) |
| 151 | #else | ||
| 152 | #define xrun_debug(substream, mask) 0 | ||
| 153 | #endif | ||
| 151 | 154 | ||
| 152 | #define dump_stack_on_xrun(substream) do { \ | 155 | #define dump_stack_on_xrun(substream) do { \ |
| 153 | if (xrun_debug(substream, XRUN_DEBUG_STACK)) \ | 156 | if (xrun_debug(substream, XRUN_DEBUG_STACK)) \ |
| @@ -169,6 +172,7 @@ static void xrun(struct snd_pcm_substream *substream) | |||
| 169 | } | 172 | } |
| 170 | } | 173 | } |
| 171 | 174 | ||
| 175 | #ifdef CONFIG_SND_PCM_XRUN_DEBUG | ||
| 172 | #define hw_ptr_error(substream, fmt, args...) \ | 176 | #define hw_ptr_error(substream, fmt, args...) \ |
| 173 | do { \ | 177 | do { \ |
| 174 | if (xrun_debug(substream, XRUN_DEBUG_BASIC)) { \ | 178 | if (xrun_debug(substream, XRUN_DEBUG_BASIC)) { \ |
| @@ -255,8 +259,6 @@ static void xrun_log_show(struct snd_pcm_substream *substream) | |||
| 255 | 259 | ||
| 256 | #else /* ! CONFIG_SND_PCM_XRUN_DEBUG */ | 260 | #else /* ! CONFIG_SND_PCM_XRUN_DEBUG */ |
| 257 | 261 | ||
| 258 | #define xrun_debug(substream, mask) 0 | ||
| 259 | #define xrun(substream) do { } while (0) | ||
| 260 | #define hw_ptr_error(substream, fmt, args...) do { } while (0) | 262 | #define hw_ptr_error(substream, fmt, args...) do { } while (0) |
| 261 | #define xrun_log(substream, pos) do { } while (0) | 263 | #define xrun_log(substream, pos) do { } while (0) |
| 262 | #define xrun_log_show(substream) do { } while (0) | 264 | #define xrun_log_show(substream) do { } while (0) |
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c index fff62cc8607c..971a84a4fa77 100644 --- a/sound/i2c/other/ak4113.c +++ b/sound/i2c/other/ak4113.c | |||
| @@ -70,7 +70,7 @@ static int snd_ak4113_dev_free(struct snd_device *device) | |||
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, | 72 | int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read, |
| 73 | ak4113_write_t *write, const unsigned char pgm[5], | 73 | ak4113_write_t *write, const unsigned char *pgm, |
| 74 | void *private_data, struct ak4113 **r_ak4113) | 74 | void *private_data, struct ak4113 **r_ak4113) |
| 75 | { | 75 | { |
| 76 | struct ak4113 *chip; | 76 | struct ak4113 *chip; |
diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c index 725fef0f59a3..a4127bab9231 100644 --- a/sound/oss/vidc.c +++ b/sound/oss/vidc.c | |||
| @@ -363,13 +363,13 @@ static void vidc_audio_trigger(int dev, int enable_bits) | |||
| 363 | struct audio_operations *adev = audio_devs[dev]; | 363 | struct audio_operations *adev = audio_devs[dev]; |
| 364 | 364 | ||
| 365 | if (enable_bits & PCM_ENABLE_OUTPUT) { | 365 | if (enable_bits & PCM_ENABLE_OUTPUT) { |
| 366 | if (!(adev->flags & DMA_ACTIVE)) { | 366 | if (!(adev->dmap_out->flags & DMA_ACTIVE)) { |
| 367 | unsigned long flags; | 367 | unsigned long flags; |
| 368 | 368 | ||
| 369 | local_irq_save(flags); | 369 | local_irq_save(flags); |
| 370 | 370 | ||
| 371 | /* prevent recusion */ | 371 | /* prevent recusion */ |
| 372 | adev->flags |= DMA_ACTIVE; | 372 | adev->dmap_out->flags |= DMA_ACTIVE; |
| 373 | 373 | ||
| 374 | dma_interrupt = vidc_audio_dma_interrupt; | 374 | dma_interrupt = vidc_audio_dma_interrupt; |
| 375 | vidc_sound_dma_irq(0, NULL); | 375 | vidc_sound_dma_irq(0, NULL); |
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 1caf5e3c1f6a..e68c98ef4041 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
| @@ -1852,12 +1852,14 @@ static unsigned int ad1981_jacks_blacklist[] = { | |||
| 1852 | 0x10140523, /* Thinkpad R40 */ | 1852 | 0x10140523, /* Thinkpad R40 */ |
| 1853 | 0x10140534, /* Thinkpad X31 */ | 1853 | 0x10140534, /* Thinkpad X31 */ |
| 1854 | 0x10140537, /* Thinkpad T41p */ | 1854 | 0x10140537, /* Thinkpad T41p */ |
| 1855 | 0x1014053e, /* Thinkpad R40e */ | ||
| 1855 | 0x10140554, /* Thinkpad T42p/R50p */ | 1856 | 0x10140554, /* Thinkpad T42p/R50p */ |
| 1856 | 0x10140567, /* Thinkpad T43p 2668-G7U */ | 1857 | 0x10140567, /* Thinkpad T43p 2668-G7U */ |
| 1857 | 0x10140581, /* Thinkpad X41-2527 */ | 1858 | 0x10140581, /* Thinkpad X41-2527 */ |
| 1858 | 0x10280160, /* Dell Dimension 2400 */ | 1859 | 0x10280160, /* Dell Dimension 2400 */ |
| 1859 | 0x104380b0, /* Asus A7V8X-MX */ | 1860 | 0x104380b0, /* Asus A7V8X-MX */ |
| 1860 | 0x11790241, /* Toshiba Satellite A-15 S127 */ | 1861 | 0x11790241, /* Toshiba Satellite A-15 S127 */ |
| 1862 | 0x1179ff10, /* Toshiba P500 */ | ||
| 1861 | 0x144dc01a, /* Samsung NP-X20C004/SEG */ | 1863 | 0x144dc01a, /* Samsung NP-X20C004/SEG */ |
| 1862 | 0 /* end */ | 1864 | 0 /* end */ |
| 1863 | }; | 1865 | }; |
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 1ded64e05643..329968edca9b 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
| @@ -941,13 +941,21 @@ static snd_pcm_uframes_t snd_cmipci_pcm_pointer(struct cmipci *cm, struct cmipci | |||
| 941 | struct snd_pcm_substream *substream) | 941 | struct snd_pcm_substream *substream) |
| 942 | { | 942 | { |
| 943 | size_t ptr; | 943 | size_t ptr; |
| 944 | unsigned int reg; | 944 | unsigned int reg, rem, tries; |
| 945 | |||
| 945 | if (!rec->running) | 946 | if (!rec->running) |
| 946 | return 0; | 947 | return 0; |
| 947 | #if 1 // this seems better.. | 948 | #if 1 // this seems better.. |
| 948 | reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2; | 949 | reg = rec->ch ? CM_REG_CH1_FRAME2 : CM_REG_CH0_FRAME2; |
| 949 | ptr = rec->dma_size - (snd_cmipci_read_w(cm, reg) + 1); | 950 | for (tries = 0; tries < 3; tries++) { |
| 950 | ptr >>= rec->shift; | 951 | rem = snd_cmipci_read_w(cm, reg); |
| 952 | if (rem < rec->dma_size) | ||
| 953 | goto ok; | ||
| 954 | } | ||
| 955 | printk(KERN_ERR "cmipci: invalid PCM pointer: %#x\n", rem); | ||
| 956 | return SNDRV_PCM_POS_XRUN; | ||
| 957 | ok: | ||
| 958 | ptr = (rec->dma_size - (rem + 1)) >> rec->shift; | ||
| 951 | #else | 959 | #else |
| 952 | reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1; | 960 | reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1; |
| 953 | ptr = snd_cmipci_read(cm, reg) - rec->offset; | 961 | ptr = snd_cmipci_read(cm, reg) - rec->offset; |
diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c index 8dab82d7d19d..668a5ec04499 100644 --- a/sound/pci/echoaudio/echoaudio.c +++ b/sound/pci/echoaudio/echoaudio.c | |||
| @@ -2184,10 +2184,9 @@ static int __devinit snd_echo_probe(struct pci_dev *pci, | |||
| 2184 | goto ctl_error; | 2184 | goto ctl_error; |
| 2185 | #endif | 2185 | #endif |
| 2186 | 2186 | ||
| 2187 | if ((err = snd_card_register(card)) < 0) { | 2187 | err = snd_card_register(card); |
| 2188 | snd_card_free(card); | 2188 | if (err < 0) |
| 2189 | goto ctl_error; | 2189 | goto ctl_error; |
| 2190 | } | ||
| 2191 | snd_printk(KERN_INFO "Card registered: %s\n", card->longname); | 2190 | snd_printk(KERN_INFO "Card registered: %s\n", card->longname); |
| 2192 | 2191 | ||
| 2193 | pci_set_drvdata(pci, chip); | 2192 | pci_set_drvdata(pci, chip); |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 8b2915631cc3..4bb90675f70f 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
| @@ -2269,6 +2269,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { | |||
| 2269 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), | 2269 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), |
| 2270 | SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), | 2270 | SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), |
| 2271 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), | 2271 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), |
| 2272 | SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB), | ||
| 2272 | SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), | 2273 | SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), |
| 2273 | SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB), | 2274 | SND_PCI_QUIRK(0x1565, 0x820f, "Biostar Microtech", POS_FIX_LPIB), |
| 2274 | SND_PCI_QUIRK(0x8086, 0xd601, "eMachines T5212", POS_FIX_LPIB), | 2275 | SND_PCI_QUIRK(0x8086, 0xd601, "eMachines T5212", POS_FIX_LPIB), |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index 194a28c54992..61682e1d09da 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
| @@ -1591,6 +1591,21 @@ static int patch_cxt5047(struct hda_codec *codec) | |||
| 1591 | #endif | 1591 | #endif |
| 1592 | } | 1592 | } |
| 1593 | spec->vmaster_nid = 0x13; | 1593 | spec->vmaster_nid = 0x13; |
| 1594 | |||
| 1595 | switch (codec->subsystem_id >> 16) { | ||
| 1596 | case 0x103c: | ||
| 1597 | /* HP laptops have really bad sound over 0 dB on NID 0x10. | ||
| 1598 | * Fix max PCM level to 0 dB (originally it has 0x1e steps | ||
| 1599 | * with 0 dB offset 0x17) | ||
| 1600 | */ | ||
| 1601 | snd_hda_override_amp_caps(codec, 0x10, HDA_INPUT, | ||
| 1602 | (0x17 << AC_AMPCAP_OFFSET_SHIFT) | | ||
| 1603 | (0x17 << AC_AMPCAP_NUM_STEPS_SHIFT) | | ||
| 1604 | (0x05 << AC_AMPCAP_STEP_SIZE_SHIFT) | | ||
| 1605 | (1 << AC_AMPCAP_MUTE_SHIFT)); | ||
| 1606 | break; | ||
| 1607 | } | ||
| 1608 | |||
| 1594 | return 0; | 1609 | return 0; |
| 1595 | } | 1610 | } |
| 1596 | 1611 | ||
diff --git a/sound/pci/hda/patch_nvhdmi.c b/sound/pci/hda/patch_nvhdmi.c index 70669a246902..3c10c0b149f4 100644 --- a/sound/pci/hda/patch_nvhdmi.c +++ b/sound/pci/hda/patch_nvhdmi.c | |||
| @@ -538,8 +538,6 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec) | |||
| 538 | * patch entries | 538 | * patch entries |
| 539 | */ | 539 | */ |
| 540 | static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { | 540 | static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { |
| 541 | { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, | ||
| 542 | { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, | ||
| 543 | { .id = 0x10de0002, .name = "MCP77/78 HDMI", | 541 | { .id = 0x10de0002, .name = "MCP77/78 HDMI", |
| 544 | .patch = patch_nvhdmi_8ch_7x }, | 542 | .patch = patch_nvhdmi_8ch_7x }, |
| 545 | { .id = 0x10de0003, .name = "MCP77/78 HDMI", | 543 | { .id = 0x10de0003, .name = "MCP77/78 HDMI", |
| @@ -550,12 +548,16 @@ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { | |||
| 550 | .patch = patch_nvhdmi_8ch_7x }, | 548 | .patch = patch_nvhdmi_8ch_7x }, |
| 551 | { .id = 0x10de0007, .name = "MCP79/7A HDMI", | 549 | { .id = 0x10de0007, .name = "MCP79/7A HDMI", |
| 552 | .patch = patch_nvhdmi_8ch_7x }, | 550 | .patch = patch_nvhdmi_8ch_7x }, |
| 553 | { .id = 0x10de000c, .name = "MCP89 HDMI", | 551 | { .id = 0x10de000a, .name = "GT220 HDMI", |
| 554 | .patch = patch_nvhdmi_8ch_89 }, | 552 | .patch = patch_nvhdmi_8ch_89 }, |
| 555 | { .id = 0x10de000b, .name = "GT21x HDMI", | 553 | { .id = 0x10de000b, .name = "GT21x HDMI", |
| 556 | .patch = patch_nvhdmi_8ch_89 }, | 554 | .patch = patch_nvhdmi_8ch_89 }, |
| 555 | { .id = 0x10de000c, .name = "MCP89 HDMI", | ||
| 556 | .patch = patch_nvhdmi_8ch_89 }, | ||
| 557 | { .id = 0x10de000d, .name = "GT240 HDMI", | 557 | { .id = 0x10de000d, .name = "GT240 HDMI", |
| 558 | .patch = patch_nvhdmi_8ch_89 }, | 558 | .patch = patch_nvhdmi_8ch_89 }, |
| 559 | { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, | ||
| 560 | { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, | ||
| 559 | {} /* terminator */ | 561 | {} /* terminator */ |
| 560 | }; | 562 | }; |
| 561 | 563 | ||
| @@ -564,11 +566,12 @@ MODULE_ALIAS("snd-hda-codec-id:10de0003"); | |||
| 564 | MODULE_ALIAS("snd-hda-codec-id:10de0005"); | 566 | MODULE_ALIAS("snd-hda-codec-id:10de0005"); |
| 565 | MODULE_ALIAS("snd-hda-codec-id:10de0006"); | 567 | MODULE_ALIAS("snd-hda-codec-id:10de0006"); |
| 566 | MODULE_ALIAS("snd-hda-codec-id:10de0007"); | 568 | MODULE_ALIAS("snd-hda-codec-id:10de0007"); |
| 567 | MODULE_ALIAS("snd-hda-codec-id:10de0067"); | 569 | MODULE_ALIAS("snd-hda-codec-id:10de000a"); |
| 568 | MODULE_ALIAS("snd-hda-codec-id:10de8001"); | ||
| 569 | MODULE_ALIAS("snd-hda-codec-id:10de000c"); | ||
| 570 | MODULE_ALIAS("snd-hda-codec-id:10de000b"); | 570 | MODULE_ALIAS("snd-hda-codec-id:10de000b"); |
| 571 | MODULE_ALIAS("snd-hda-codec-id:10de000c"); | ||
| 571 | MODULE_ALIAS("snd-hda-codec-id:10de000d"); | 572 | MODULE_ALIAS("snd-hda-codec-id:10de000d"); |
| 573 | MODULE_ALIAS("snd-hda-codec-id:10de0067"); | ||
| 574 | MODULE_ALIAS("snd-hda-codec-id:10de8001"); | ||
| 572 | 575 | ||
| 573 | MODULE_LICENSE("GPL"); | 576 | MODULE_LICENSE("GPL"); |
| 574 | MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec"); | 577 | MODULE_DESCRIPTION("NVIDIA HDMI HD-audio codec"); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 4ec57633af88..9a23444e9e7a 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -2532,8 +2532,6 @@ static int alc_build_controls(struct hda_codec *codec) | |||
| 2532 | return err; | 2532 | return err; |
| 2533 | } | 2533 | } |
| 2534 | 2534 | ||
| 2535 | alc_free_kctls(codec); /* no longer needed */ | ||
| 2536 | |||
| 2537 | /* assign Capture Source enums to NID */ | 2535 | /* assign Capture Source enums to NID */ |
| 2538 | kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); | 2536 | kctl = snd_hda_find_mixer_ctl(codec, "Capture Source"); |
| 2539 | if (!kctl) | 2537 | if (!kctl) |
| @@ -2602,6 +2600,9 @@ static int alc_build_controls(struct hda_codec *codec) | |||
| 2602 | } | 2600 | } |
| 2603 | } | 2601 | } |
| 2604 | } | 2602 | } |
| 2603 | |||
| 2604 | alc_free_kctls(codec); /* no longer needed */ | ||
| 2605 | |||
| 2605 | return 0; | 2606 | return 0; |
| 2606 | } | 2607 | } |
| 2607 | 2608 | ||
| @@ -10042,8 +10043,11 @@ static void alc882_auto_set_output_and_unmute(struct hda_codec *codec, | |||
| 10042 | alc_set_pin_output(codec, nid, pin_type); | 10043 | alc_set_pin_output(codec, nid, pin_type); |
| 10043 | if (spec->multiout.dac_nids[dac_idx] == 0x25) | 10044 | if (spec->multiout.dac_nids[dac_idx] == 0x25) |
| 10044 | idx = 4; | 10045 | idx = 4; |
| 10045 | else | 10046 | else { |
| 10047 | if (spec->multiout.num_dacs >= dac_idx) | ||
| 10048 | return; | ||
| 10046 | idx = spec->multiout.dac_nids[dac_idx] - 2; | 10049 | idx = spec->multiout.dac_nids[dac_idx] - 2; |
| 10050 | } | ||
| 10047 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, idx); | 10051 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, idx); |
| 10048 | 10052 | ||
| 10049 | } | 10053 | } |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 8c416bb18a57..c4be3fab94e5 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -1730,6 +1730,8 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = { | |||
| 1730 | "HP HDX", STAC_HP_HDX), /* HDX16 */ | 1730 | "HP HDX", STAC_HP_HDX), /* HDX16 */ |
| 1731 | SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3620, | 1731 | SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x3620, |
| 1732 | "HP dv6", STAC_HP_DV5), | 1732 | "HP dv6", STAC_HP_DV5), |
| 1733 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x3061, | ||
| 1734 | "HP dv6", STAC_HP_DV5), /* HP dv6-1110ax */ | ||
| 1733 | SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x7010, | 1735 | SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xfff0, 0x7010, |
| 1734 | "HP", STAC_HP_DV5), | 1736 | "HP", STAC_HP_DV5), |
| 1735 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233, | 1737 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233, |
diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c index 7e8e7da592a9..ea4256b08a38 100644 --- a/sound/pci/mixart/mixart.c +++ b/sound/pci/mixart/mixart.c | |||
| @@ -1161,13 +1161,15 @@ static long snd_mixart_BA0_read(struct snd_info_entry *entry, void *file_private | |||
| 1161 | unsigned long count, unsigned long pos) | 1161 | unsigned long count, unsigned long pos) |
| 1162 | { | 1162 | { |
| 1163 | struct mixart_mgr *mgr = entry->private_data; | 1163 | struct mixart_mgr *mgr = entry->private_data; |
| 1164 | unsigned long maxsize; | ||
| 1164 | 1165 | ||
| 1165 | count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ | 1166 | if (pos >= MIXART_BA0_SIZE) |
| 1166 | if(count <= 0) | ||
| 1167 | return 0; | 1167 | return 0; |
| 1168 | if(pos + count > MIXART_BA0_SIZE) | 1168 | maxsize = MIXART_BA0_SIZE - pos; |
| 1169 | count = (long)(MIXART_BA0_SIZE - pos); | 1169 | if (count > maxsize) |
| 1170 | if(copy_to_user_fromio(buf, MIXART_MEM( mgr, pos ), count)) | 1170 | count = maxsize; |
| 1171 | count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ | ||
| 1172 | if (copy_to_user_fromio(buf, MIXART_MEM(mgr, pos), count)) | ||
| 1171 | return -EFAULT; | 1173 | return -EFAULT; |
| 1172 | return count; | 1174 | return count; |
| 1173 | } | 1175 | } |
| @@ -1180,13 +1182,15 @@ static long snd_mixart_BA1_read(struct snd_info_entry *entry, void *file_private | |||
| 1180 | unsigned long count, unsigned long pos) | 1182 | unsigned long count, unsigned long pos) |
| 1181 | { | 1183 | { |
| 1182 | struct mixart_mgr *mgr = entry->private_data; | 1184 | struct mixart_mgr *mgr = entry->private_data; |
| 1185 | unsigned long maxsize; | ||
| 1183 | 1186 | ||
| 1184 | count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ | 1187 | if (pos > MIXART_BA1_SIZE) |
| 1185 | if(count <= 0) | ||
| 1186 | return 0; | 1188 | return 0; |
| 1187 | if(pos + count > MIXART_BA1_SIZE) | 1189 | maxsize = MIXART_BA1_SIZE - pos; |
| 1188 | count = (long)(MIXART_BA1_SIZE - pos); | 1190 | if (count > maxsize) |
| 1189 | if(copy_to_user_fromio(buf, MIXART_REG( mgr, pos ), count)) | 1191 | count = maxsize; |
| 1192 | count = count & ~3; /* make sure the read size is a multiple of 4 bytes */ | ||
| 1193 | if (copy_to_user_fromio(buf, MIXART_REG(mgr, pos), count)) | ||
| 1190 | return -EFAULT; | 1194 | return -EFAULT; |
| 1191 | return count; | 1195 | return count; |
| 1192 | } | 1196 | } |
