diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/Kconfig | 4 | ||||
-rw-r--r-- | sound/aoa/codecs/snd-aoa-codec-tas.c | 13 | ||||
-rw-r--r-- | sound/core/oss/pcm_oss.c | 3 | ||||
-rw-r--r-- | sound/core/pcm_native.c | 6 | ||||
-rw-r--r-- | sound/core/rtctimer.c | 20 | ||||
-rw-r--r-- | sound/oss/cs46xx.c | 6 | ||||
-rw-r--r-- | sound/pci/emu10k1/emu10k1_main.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 14 | ||||
-rw-r--r-- | sound/usb/usbaudio.c | 3 |
10 files changed, 45 insertions, 27 deletions
diff --git a/sound/Kconfig b/sound/Kconfig index e0d791a98452..95949b6806ac 100644 --- a/sound/Kconfig +++ b/sound/Kconfig | |||
@@ -64,11 +64,11 @@ source "sound/arm/Kconfig" | |||
64 | 64 | ||
65 | source "sound/mips/Kconfig" | 65 | source "sound/mips/Kconfig" |
66 | 66 | ||
67 | # the following will depenend on the order of config. | 67 | # the following will depend on the order of config. |
68 | # here assuming USB is defined before ALSA | 68 | # here assuming USB is defined before ALSA |
69 | source "sound/usb/Kconfig" | 69 | source "sound/usb/Kconfig" |
70 | 70 | ||
71 | # the following will depenend on the order of config. | 71 | # the following will depend on the order of config. |
72 | # here assuming PCMCIA is defined before ALSA | 72 | # here assuming PCMCIA is defined before ALSA |
73 | source "sound/pcmcia/Kconfig" | 73 | source "sound/pcmcia/Kconfig" |
74 | 74 | ||
diff --git a/sound/aoa/codecs/snd-aoa-codec-tas.c b/sound/aoa/codecs/snd-aoa-codec-tas.c index 2ef55a17917c..9de8485ba3f5 100644 --- a/sound/aoa/codecs/snd-aoa-codec-tas.c +++ b/sound/aoa/codecs/snd-aoa-codec-tas.c | |||
@@ -514,9 +514,15 @@ static int tas_snd_capture_source_put(struct snd_kcontrol *kcontrol, | |||
514 | mutex_lock(&tas->mtx); | 514 | mutex_lock(&tas->mtx); |
515 | oldacr = tas->acr; | 515 | oldacr = tas->acr; |
516 | 516 | ||
517 | tas->acr &= ~TAS_ACR_INPUT_B; | 517 | /* |
518 | * Despite what the data sheet says in one place, the | ||
519 | * TAS_ACR_B_MONAUREAL bit forces mono output even when | ||
520 | * input A (line in) is selected. | ||
521 | */ | ||
522 | tas->acr &= ~(TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL); | ||
518 | if (ucontrol->value.enumerated.item[0]) | 523 | if (ucontrol->value.enumerated.item[0]) |
519 | tas->acr |= TAS_ACR_INPUT_B; | 524 | tas->acr |= TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL | |
525 | TAS_ACR_B_MON_SEL_RIGHT; | ||
520 | if (oldacr == tas->acr) { | 526 | if (oldacr == tas->acr) { |
521 | mutex_unlock(&tas->mtx); | 527 | mutex_unlock(&tas->mtx); |
522 | return 0; | 528 | return 0; |
@@ -686,8 +692,7 @@ static int tas_reset_init(struct tas *tas) | |||
686 | if (tas_write_reg(tas, TAS_REG_MCS, 1, &tmp)) | 692 | if (tas_write_reg(tas, TAS_REG_MCS, 1, &tmp)) |
687 | goto outerr; | 693 | goto outerr; |
688 | 694 | ||
689 | tas->acr |= TAS_ACR_ANALOG_PDOWN | TAS_ACR_B_MONAUREAL | | 695 | tas->acr |= TAS_ACR_ANALOG_PDOWN; |
690 | TAS_ACR_B_MON_SEL_RIGHT; | ||
691 | if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr)) | 696 | if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr)) |
692 | goto outerr; | 697 | goto outerr; |
693 | 698 | ||
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index 505b23ec4058..e0821eb3d851 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c | |||
@@ -2359,7 +2359,8 @@ static int snd_pcm_oss_release(struct inode *inode, struct file *file) | |||
2359 | substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE]; | 2359 | substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE]; |
2360 | snd_assert(substream != NULL, return -ENXIO); | 2360 | snd_assert(substream != NULL, return -ENXIO); |
2361 | pcm = substream->pcm; | 2361 | pcm = substream->pcm; |
2362 | snd_pcm_oss_sync(pcm_oss_file); | 2362 | if (!pcm->card->shutdown) |
2363 | snd_pcm_oss_sync(pcm_oss_file); | ||
2363 | mutex_lock(&pcm->open_mutex); | 2364 | mutex_lock(&pcm->open_mutex); |
2364 | snd_pcm_oss_release_file(pcm_oss_file); | 2365 | snd_pcm_oss_release_file(pcm_oss_file); |
2365 | mutex_unlock(&pcm->open_mutex); | 2366 | mutex_unlock(&pcm->open_mutex); |
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 37b4b10850ae..66e24b5da469 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c | |||
@@ -1310,7 +1310,8 @@ static int snd_pcm_pre_prepare(struct snd_pcm_substream *substream, | |||
1310 | int f_flags) | 1310 | int f_flags) |
1311 | { | 1311 | { |
1312 | struct snd_pcm_runtime *runtime = substream->runtime; | 1312 | struct snd_pcm_runtime *runtime = substream->runtime; |
1313 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN) | 1313 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN || |
1314 | runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED) | ||
1314 | return -EBADFD; | 1315 | return -EBADFD; |
1315 | if (snd_pcm_running(substream)) | 1316 | if (snd_pcm_running(substream)) |
1316 | return -EBUSY; | 1317 | return -EBUSY; |
@@ -1568,7 +1569,8 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream) | |||
1568 | runtime = substream->runtime; | 1569 | runtime = substream->runtime; |
1569 | card = substream->pcm->card; | 1570 | card = substream->pcm->card; |
1570 | 1571 | ||
1571 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN) | 1572 | if (runtime->status->state == SNDRV_PCM_STATE_OPEN || |
1573 | runtime->status->state == SNDRV_PCM_STATE_DISCONNECTED) | ||
1572 | return -EBADFD; | 1574 | return -EBADFD; |
1573 | 1575 | ||
1574 | snd_power_lock(card); | 1576 | snd_power_lock(card); |
diff --git a/sound/core/rtctimer.c b/sound/core/rtctimer.c index 412dd62b654e..9f7b32e1ccde 100644 --- a/sound/core/rtctimer.c +++ b/sound/core/rtctimer.c | |||
@@ -22,13 +22,10 @@ | |||
22 | 22 | ||
23 | #include <sound/driver.h> | 23 | #include <sound/driver.h> |
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/time.h> | ||
26 | #include <linux/threads.h> | ||
27 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
28 | #include <linux/moduleparam.h> | 26 | #include <linux/moduleparam.h> |
29 | #include <sound/core.h> | 27 | #include <sound/core.h> |
30 | #include <sound/timer.h> | 28 | #include <sound/timer.h> |
31 | #include <sound/info.h> | ||
32 | 29 | ||
33 | #if defined(CONFIG_RTC) || defined(CONFIG_RTC_MODULE) | 30 | #if defined(CONFIG_RTC) || defined(CONFIG_RTC_MODULE) |
34 | 31 | ||
@@ -50,7 +47,9 @@ static int rtctimer_stop(struct snd_timer *t); | |||
50 | * The hardware dependent description for this timer. | 47 | * The hardware dependent description for this timer. |
51 | */ | 48 | */ |
52 | static struct snd_timer_hardware rtc_hw = { | 49 | static struct snd_timer_hardware rtc_hw = { |
53 | .flags = SNDRV_TIMER_HW_FIRST|SNDRV_TIMER_HW_AUTO, | 50 | .flags = SNDRV_TIMER_HW_AUTO | |
51 | SNDRV_TIMER_HW_FIRST | | ||
52 | SNDRV_TIMER_HW_TASKLET, | ||
54 | .ticks = 100000000L, /* FIXME: XXX */ | 53 | .ticks = 100000000L, /* FIXME: XXX */ |
55 | .open = rtctimer_open, | 54 | .open = rtctimer_open, |
56 | .close = rtctimer_close, | 55 | .close = rtctimer_close, |
@@ -60,6 +59,7 @@ static struct snd_timer_hardware rtc_hw = { | |||
60 | 59 | ||
61 | static int rtctimer_freq = RTC_FREQ; /* frequency */ | 60 | static int rtctimer_freq = RTC_FREQ; /* frequency */ |
62 | static struct snd_timer *rtctimer; | 61 | static struct snd_timer *rtctimer; |
62 | static struct tasklet_struct rtc_tasklet; | ||
63 | static rtc_task_t rtc_task; | 63 | static rtc_task_t rtc_task; |
64 | 64 | ||
65 | 65 | ||
@@ -81,6 +81,7 @@ rtctimer_close(struct snd_timer *t) | |||
81 | rtc_task_t *rtc = t->private_data; | 81 | rtc_task_t *rtc = t->private_data; |
82 | if (rtc) { | 82 | if (rtc) { |
83 | rtc_unregister(rtc); | 83 | rtc_unregister(rtc); |
84 | tasklet_kill(&rtc_tasklet); | ||
84 | t->private_data = NULL; | 85 | t->private_data = NULL; |
85 | } | 86 | } |
86 | return 0; | 87 | return 0; |
@@ -105,12 +106,17 @@ rtctimer_stop(struct snd_timer *timer) | |||
105 | return 0; | 106 | return 0; |
106 | } | 107 | } |
107 | 108 | ||
109 | static void rtctimer_tasklet(unsigned long data) | ||
110 | { | ||
111 | snd_timer_interrupt((struct snd_timer *)data, 1); | ||
112 | } | ||
113 | |||
108 | /* | 114 | /* |
109 | * interrupt | 115 | * interrupt |
110 | */ | 116 | */ |
111 | static void rtctimer_interrupt(void *private_data) | 117 | static void rtctimer_interrupt(void *private_data) |
112 | { | 118 | { |
113 | snd_timer_interrupt(private_data, 1); | 119 | tasklet_hi_schedule(private_data); |
114 | } | 120 | } |
115 | 121 | ||
116 | 122 | ||
@@ -139,9 +145,11 @@ static int __init rtctimer_init(void) | |||
139 | timer->hw = rtc_hw; | 145 | timer->hw = rtc_hw; |
140 | timer->hw.resolution = NANO_SEC / rtctimer_freq; | 146 | timer->hw.resolution = NANO_SEC / rtctimer_freq; |
141 | 147 | ||
148 | tasklet_init(&rtc_tasklet, rtctimer_tasklet, (unsigned long)timer); | ||
149 | |||
142 | /* set up RTC callback */ | 150 | /* set up RTC callback */ |
143 | rtc_task.func = rtctimer_interrupt; | 151 | rtc_task.func = rtctimer_interrupt; |
144 | rtc_task.private_data = timer; | 152 | rtc_task.private_data = &rtc_tasklet; |
145 | 153 | ||
146 | err = snd_timer_global_register(timer); | 154 | err = snd_timer_global_register(timer); |
147 | if (err < 0) { | 155 | if (err < 0) { |
diff --git a/sound/oss/cs46xx.c b/sound/oss/cs46xx.c index 6e3c41f530e6..b1c5d8286e40 100644 --- a/sound/oss/cs46xx.c +++ b/sound/oss/cs46xx.c | |||
@@ -779,7 +779,7 @@ static unsigned int cs_set_adc_rate(struct cs_state *state, unsigned int rate) | |||
779 | rate = 48000 / 9; | 779 | rate = 48000 / 9; |
780 | 780 | ||
781 | /* | 781 | /* |
782 | * We can not capture at at rate greater than the Input Rate (48000). | 782 | * We cannot capture at at rate greater than the Input Rate (48000). |
783 | * Return an error if an attempt is made to stray outside that limit. | 783 | * Return an error if an attempt is made to stray outside that limit. |
784 | */ | 784 | */ |
785 | if (rate > 48000) | 785 | if (rate > 48000) |
@@ -4754,8 +4754,8 @@ static int cs_hardware_init(struct cs_card *card) | |||
4754 | mdelay(5 * cs_laptop_wait); /* Shouldnt be needed ?? */ | 4754 | mdelay(5 * cs_laptop_wait); /* Shouldnt be needed ?? */ |
4755 | 4755 | ||
4756 | /* | 4756 | /* |
4757 | * If we are resuming under 2.2.x then we can not schedule a timeout. | 4757 | * If we are resuming under 2.2.x then we cannot schedule a timeout, |
4758 | * so, just spin the CPU. | 4758 | * so just spin the CPU. |
4759 | */ | 4759 | */ |
4760 | if (card->pm.flags & CS46XX_PM_IDLE) { | 4760 | if (card->pm.flags & CS46XX_PM_IDLE) { |
4761 | /* | 4761 | /* |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index 8058059c56e9..8bc4ffa6220d 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -956,6 +956,7 @@ static struct snd_emu_chip_details emu_chip_details[] = { | |||
956 | .ca0151_chip = 1, | 956 | .ca0151_chip = 1, |
957 | .spk71 = 1, | 957 | .spk71 = 1, |
958 | .spdif_bug = 1, | 958 | .spdif_bug = 1, |
959 | .adc_1361t = 1, /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */ | ||
959 | .ac97_chip = 1} , | 960 | .ac97_chip = 1} , |
960 | {.vendor = 0x1102, .device = 0x0004, .revision = 0x04, | 961 | {.vendor = 0x1102, .device = 0x0004, .revision = 0x04, |
961 | .driver = "Audigy2", .name = "Audigy 2 [Unknown]", | 962 | .driver = "Audigy2", .name = "Audigy 2 [Unknown]", |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 0d728c6f697c..fb961448db19 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5870,7 +5870,7 @@ static struct hda_board_config alc262_cfg_tbl[] = { | |||
5870 | { .pci_subvendor = 0x10cf, .pci_subdevice = 0x1397, | 5870 | { .pci_subvendor = 0x10cf, .pci_subdevice = 0x1397, |
5871 | .config = ALC262_FUJITSU }, | 5871 | .config = ALC262_FUJITSU }, |
5872 | { .modelname = "hp-bpc", .config = ALC262_HP_BPC }, | 5872 | { .modelname = "hp-bpc", .config = ALC262_HP_BPC }, |
5873 | { .pci_subvendor = 0x103c, .pci_subdevice = 0x208c, | 5873 | { .pci_subvendor = 0x103c, .pci_subdevice = 0x280c, |
5874 | .config = ALC262_HP_BPC }, /* xw4400 */ | 5874 | .config = ALC262_HP_BPC }, /* xw4400 */ |
5875 | { .pci_subvendor = 0x103c, .pci_subdevice = 0x3014, | 5875 | { .pci_subvendor = 0x103c, .pci_subdevice = 0x3014, |
5876 | .config = ALC262_HP_BPC }, /* xw6400 */ | 5876 | .config = ALC262_HP_BPC }, /* xw6400 */ |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 731b7b97ee71..fe51ef3e49d2 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -336,6 +336,13 @@ static struct hda_board_config stac9200_cfg_tbl[] = { | |||
336 | .pci_subvendor = PCI_VENDOR_ID_INTEL, | 336 | .pci_subvendor = PCI_VENDOR_ID_INTEL, |
337 | .pci_subdevice = 0x2668, /* DFI LanParty */ | 337 | .pci_subdevice = 0x2668, /* DFI LanParty */ |
338 | .config = STAC_REF }, | 338 | .config = STAC_REF }, |
339 | /* Dell laptops have BIOS problem */ | ||
340 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01b5, | ||
341 | .config = STAC_REF }, /* Dell Inspiron 630m */ | ||
342 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01c2, | ||
343 | .config = STAC_REF }, /* Dell Latitude D620 */ | ||
344 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01cb, | ||
345 | .config = STAC_REF }, /* Dell Latitude 120L */ | ||
339 | {} /* terminator */ | 346 | {} /* terminator */ |
340 | }; | 347 | }; |
341 | 348 | ||
@@ -591,13 +598,6 @@ static struct hda_board_config stac9205_cfg_tbl[] = { | |||
591 | .pci_subvendor = PCI_VENDOR_ID_INTEL, | 598 | .pci_subvendor = PCI_VENDOR_ID_INTEL, |
592 | .pci_subdevice = 0x2668, /* DFI LanParty */ | 599 | .pci_subdevice = 0x2668, /* DFI LanParty */ |
593 | .config = STAC_REF }, /* SigmaTel reference board */ | 600 | .config = STAC_REF }, /* SigmaTel reference board */ |
594 | /* Dell laptops have BIOS problem */ | ||
595 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01b5, | ||
596 | .config = STAC_REF }, /* Dell Inspiron 630m */ | ||
597 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01c2, | ||
598 | .config = STAC_REF }, /* Dell Latitude D620 */ | ||
599 | { .pci_subvendor = PCI_VENDOR_ID_DELL, .pci_subdevice = 0x01cb, | ||
600 | .config = STAC_REF }, /* Dell Latitude 120L */ | ||
601 | {} /* terminator */ | 601 | {} /* terminator */ |
602 | }; | 602 | }; |
603 | 603 | ||
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index c82b01c7ad3a..67202b9eeb77 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -1469,7 +1469,8 @@ static int snd_usb_hw_free(struct snd_pcm_substream *substream) | |||
1469 | subs->cur_audiofmt = NULL; | 1469 | subs->cur_audiofmt = NULL; |
1470 | subs->cur_rate = 0; | 1470 | subs->cur_rate = 0; |
1471 | subs->period_bytes = 0; | 1471 | subs->period_bytes = 0; |
1472 | release_substream_urbs(subs, 0); | 1472 | if (!subs->stream->chip->shutdown) |
1473 | release_substream_urbs(subs, 0); | ||
1473 | return snd_pcm_free_vmalloc_buffer(substream); | 1474 | return snd_pcm_free_vmalloc_buffer(substream); |
1474 | } | 1475 | } |
1475 | 1476 | ||