diff options
Diffstat (limited to 'sound')
32 files changed, 105 insertions, 73 deletions
diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c index 89096e811a4b..772901e41ecb 100644 --- a/sound/arm/aaci.c +++ b/sound/arm/aaci.c | |||
@@ -90,7 +90,7 @@ static void aaci_ac97_write(struct snd_ac97 *ac97, unsigned short reg, | |||
90 | */ | 90 | */ |
91 | do { | 91 | do { |
92 | v = readl(aaci->base + AACI_SLFR); | 92 | v = readl(aaci->base + AACI_SLFR); |
93 | } while ((v & (SLFR_1TXB|SLFR_2TXB)) && timeout--); | 93 | } while ((v & (SLFR_1TXB|SLFR_2TXB)) && --timeout); |
94 | 94 | ||
95 | if (!timeout) | 95 | if (!timeout) |
96 | dev_err(&aaci->dev->dev, | 96 | dev_err(&aaci->dev->dev, |
@@ -126,7 +126,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg) | |||
126 | */ | 126 | */ |
127 | do { | 127 | do { |
128 | v = readl(aaci->base + AACI_SLFR); | 128 | v = readl(aaci->base + AACI_SLFR); |
129 | } while ((v & SLFR_1TXB) && timeout--); | 129 | } while ((v & SLFR_1TXB) && --timeout); |
130 | 130 | ||
131 | if (!timeout) { | 131 | if (!timeout) { |
132 | dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n"); | 132 | dev_err(&aaci->dev->dev, "timeout on slot 1 TX busy\n"); |
@@ -147,7 +147,7 @@ static unsigned short aaci_ac97_read(struct snd_ac97 *ac97, unsigned short reg) | |||
147 | do { | 147 | do { |
148 | cond_resched(); | 148 | cond_resched(); |
149 | v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV); | 149 | v = readl(aaci->base + AACI_SLFR) & (SLFR_1RXV|SLFR_2RXV); |
150 | } while ((v != (SLFR_1RXV|SLFR_2RXV)) && timeout--); | 150 | } while ((v != (SLFR_1RXV|SLFR_2RXV)) && --timeout); |
151 | 151 | ||
152 | if (!timeout) { | 152 | if (!timeout) { |
153 | dev_err(&aaci->dev->dev, "timeout on RX valid\n"); | 153 | dev_err(&aaci->dev->dev, "timeout on RX valid\n"); |
diff --git a/sound/core/jack.c b/sound/core/jack.c index dd4a12dc09aa..077a85262c1c 100644 --- a/sound/core/jack.c +++ b/sound/core/jack.c | |||
@@ -47,7 +47,7 @@ static int snd_jack_dev_register(struct snd_device *device) | |||
47 | int err; | 47 | int err; |
48 | 48 | ||
49 | snprintf(jack->name, sizeof(jack->name), "%s %s", | 49 | snprintf(jack->name, sizeof(jack->name), "%s %s", |
50 | card->longname, jack->id); | 50 | card->shortname, jack->id); |
51 | jack->input_dev->name = jack->name; | 51 | jack->input_dev->name = jack->name; |
52 | 52 | ||
53 | /* Default to the sound card device. */ | 53 | /* Default to the sound card device. */ |
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c index 4690b8b5681f..e570649184e2 100644 --- a/sound/core/oss/mixer_oss.c +++ b/sound/core/oss/mixer_oss.c | |||
@@ -692,6 +692,9 @@ static int snd_mixer_oss_put_volume1(struct snd_mixer_oss_file *fmixer, | |||
692 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PVOLUME], left, right); | 692 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_PVOLUME], left, right); |
693 | if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) | 693 | if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) |
694 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right); | 694 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right); |
695 | } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_CVOLUME) { | ||
696 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, | ||
697 | slot->numid[SNDRV_MIXER_OSS_ITEM_CVOLUME], left, right); | ||
695 | } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GVOLUME) { | 698 | } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GVOLUME) { |
696 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GVOLUME], left, right); | 699 | snd_mixer_oss_put_volume1_vol(fmixer, pslot, slot->numid[SNDRV_MIXER_OSS_ITEM_GVOLUME], left, right); |
697 | } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GLOBAL) { | 700 | } else if (slot->present & SNDRV_MIXER_OSS_PRESENT_GLOBAL) { |
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index e17836680f49..699d2890535c 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c | |||
@@ -1767,7 +1767,7 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file) | |||
1767 | AFMT_S8 | AFMT_U16_LE | | 1767 | AFMT_S8 | AFMT_U16_LE | |
1768 | AFMT_U16_BE | | 1768 | AFMT_U16_BE | |
1769 | AFMT_S32_LE | AFMT_S32_BE | | 1769 | AFMT_S32_LE | AFMT_S32_BE | |
1770 | AFMT_S24_LE | AFMT_S24_LE | | 1770 | AFMT_S24_LE | AFMT_S24_BE | |
1771 | AFMT_S24_PACKED; | 1771 | AFMT_S24_PACKED; |
1772 | params = kmalloc(sizeof(*params), GFP_KERNEL); | 1772 | params = kmalloc(sizeof(*params), GFP_KERNEL); |
1773 | if (!params) | 1773 | if (!params) |
@@ -2872,7 +2872,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry, | |||
2872 | setup = kmalloc(sizeof(*setup), GFP_KERNEL); | 2872 | setup = kmalloc(sizeof(*setup), GFP_KERNEL); |
2873 | if (! setup) { | 2873 | if (! setup) { |
2874 | buffer->error = -ENOMEM; | 2874 | buffer->error = -ENOMEM; |
2875 | mutex_lock(&pstr->oss.setup_mutex); | 2875 | mutex_unlock(&pstr->oss.setup_mutex); |
2876 | return; | 2876 | return; |
2877 | } | 2877 | } |
2878 | if (pstr->oss.setup_list == NULL) | 2878 | if (pstr->oss.setup_list == NULL) |
@@ -2886,7 +2886,7 @@ static void snd_pcm_oss_proc_write(struct snd_info_entry *entry, | |||
2886 | if (! template.task_name) { | 2886 | if (! template.task_name) { |
2887 | kfree(setup); | 2887 | kfree(setup); |
2888 | buffer->error = -ENOMEM; | 2888 | buffer->error = -ENOMEM; |
2889 | mutex_lock(&pstr->oss.setup_mutex); | 2889 | mutex_unlock(&pstr->oss.setup_mutex); |
2890 | return; | 2890 | return; |
2891 | } | 2891 | } |
2892 | } | 2892 | } |
diff --git a/sound/core/oss/rate.c b/sound/core/oss/rate.c index a466443c4a26..2fa9299a440d 100644 --- a/sound/core/oss/rate.c +++ b/sound/core/oss/rate.c | |||
@@ -157,7 +157,7 @@ static void resample_shrink(struct snd_pcm_plugin *plugin, | |||
157 | while (dst_frames1 > 0) { | 157 | while (dst_frames1 > 0) { |
158 | S1 = S2; | 158 | S1 = S2; |
159 | if (src_frames1-- > 0) { | 159 | if (src_frames1-- > 0) { |
160 | S1 = *src; | 160 | S2 = *src; |
161 | src += src_step; | 161 | src += src_step; |
162 | } | 162 | } |
163 | if (pos & ~R_MASK) { | 163 | if (pos & ~R_MASK) { |
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c index d4564edd61d7..4e7ec2b49873 100644 --- a/sound/core/sgbuf.c +++ b/sound/core/sgbuf.c | |||
@@ -38,6 +38,10 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab) | |||
38 | if (! sgbuf) | 38 | if (! sgbuf) |
39 | return -EINVAL; | 39 | return -EINVAL; |
40 | 40 | ||
41 | if (dmab->area) | ||
42 | vunmap(dmab->area); | ||
43 | dmab->area = NULL; | ||
44 | |||
41 | tmpb.dev.type = SNDRV_DMA_TYPE_DEV; | 45 | tmpb.dev.type = SNDRV_DMA_TYPE_DEV; |
42 | tmpb.dev.dev = sgbuf->dev; | 46 | tmpb.dev.dev = sgbuf->dev; |
43 | for (i = 0; i < sgbuf->pages; i++) { | 47 | for (i = 0; i < sgbuf->pages; i++) { |
@@ -48,9 +52,6 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab) | |||
48 | tmpb.bytes = (sgbuf->table[i].addr & ~PAGE_MASK) << PAGE_SHIFT; | 52 | tmpb.bytes = (sgbuf->table[i].addr & ~PAGE_MASK) << PAGE_SHIFT; |
49 | snd_dma_free_pages(&tmpb); | 53 | snd_dma_free_pages(&tmpb); |
50 | } | 54 | } |
51 | if (dmab->area) | ||
52 | vunmap(dmab->area); | ||
53 | dmab->area = NULL; | ||
54 | 55 | ||
55 | kfree(sgbuf->table); | 56 | kfree(sgbuf->table); |
56 | kfree(sgbuf->page_table); | 57 | kfree(sgbuf->page_table); |
diff --git a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c index 5b89c0883d60..48b64e6b2670 100644 --- a/sound/drivers/mtpav.c +++ b/sound/drivers/mtpav.c | |||
@@ -706,7 +706,6 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev) | |||
706 | mtp_card->card = card; | 706 | mtp_card->card = card; |
707 | mtp_card->irq = -1; | 707 | mtp_card->irq = -1; |
708 | mtp_card->share_irq = 0; | 708 | mtp_card->share_irq = 0; |
709 | mtp_card->inmidiport = 0xffffffff; | ||
710 | mtp_card->inmidistate = 0; | 709 | mtp_card->inmidistate = 0; |
711 | mtp_card->outmidihwport = 0xffffffff; | 710 | mtp_card->outmidihwport = 0xffffffff; |
712 | init_timer(&mtp_card->timer); | 711 | init_timer(&mtp_card->timer); |
@@ -719,6 +718,8 @@ static int __devinit snd_mtpav_probe(struct platform_device *dev) | |||
719 | if (err < 0) | 718 | if (err < 0) |
720 | goto __error; | 719 | goto __error; |
721 | 720 | ||
721 | mtp_card->inmidiport = mtp_card->num_ports + MTPAV_PIDX_BROADCAST; | ||
722 | |||
722 | err = snd_mtpav_get_ISA(mtp_card); | 723 | err = snd_mtpav_get_ISA(mtp_card); |
723 | if (err < 0) | 724 | if (err < 0) |
724 | goto __error; | 725 | goto __error; |
diff --git a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c index 57d9f154c88b..38931f2f6967 100644 --- a/sound/oss/dmasound/dmasound_atari.c +++ b/sound/oss/dmasound/dmasound_atari.c | |||
@@ -847,23 +847,23 @@ static int __init AtaIrqInit(void) | |||
847 | of events. So all we need to keep the music playing is | 847 | of events. So all we need to keep the music playing is |
848 | to provide the sound hardware with new data upon | 848 | to provide the sound hardware with new data upon |
849 | an interrupt from timer A. */ | 849 | an interrupt from timer A. */ |
850 | mfp.tim_ct_a = 0; /* ++roman: Stop timer before programming! */ | 850 | st_mfp.tim_ct_a = 0; /* ++roman: Stop timer before programming! */ |
851 | mfp.tim_dt_a = 1; /* Cause interrupt after first event. */ | 851 | st_mfp.tim_dt_a = 1; /* Cause interrupt after first event. */ |
852 | mfp.tim_ct_a = 8; /* Turn on event counting. */ | 852 | st_mfp.tim_ct_a = 8; /* Turn on event counting. */ |
853 | /* Register interrupt handler. */ | 853 | /* Register interrupt handler. */ |
854 | if (request_irq(IRQ_MFP_TIMA, AtaInterrupt, IRQ_TYPE_SLOW, "DMA sound", | 854 | if (request_irq(IRQ_MFP_TIMA, AtaInterrupt, IRQ_TYPE_SLOW, "DMA sound", |
855 | AtaInterrupt)) | 855 | AtaInterrupt)) |
856 | return 0; | 856 | return 0; |
857 | mfp.int_en_a |= 0x20; /* Turn interrupt on. */ | 857 | st_mfp.int_en_a |= 0x20; /* Turn interrupt on. */ |
858 | mfp.int_mk_a |= 0x20; | 858 | st_mfp.int_mk_a |= 0x20; |
859 | return 1; | 859 | return 1; |
860 | } | 860 | } |
861 | 861 | ||
862 | #ifdef MODULE | 862 | #ifdef MODULE |
863 | static void AtaIrqCleanUp(void) | 863 | static void AtaIrqCleanUp(void) |
864 | { | 864 | { |
865 | mfp.tim_ct_a = 0; /* stop timer */ | 865 | st_mfp.tim_ct_a = 0; /* stop timer */ |
866 | mfp.int_en_a &= ~0x20; /* turn interrupt off */ | 866 | st_mfp.int_en_a &= ~0x20; /* turn interrupt off */ |
867 | free_irq(IRQ_MFP_TIMA, AtaInterrupt); | 867 | free_irq(IRQ_MFP_TIMA, AtaInterrupt); |
868 | } | 868 | } |
869 | #endif /* MODULE */ | 869 | #endif /* MODULE */ |
@@ -1599,7 +1599,7 @@ static int __init dmasound_atari_init(void) | |||
1599 | is_falcon = 0; | 1599 | is_falcon = 0; |
1600 | } else | 1600 | } else |
1601 | return -ENODEV; | 1601 | return -ENODEV; |
1602 | if ((mfp.int_en_a & mfp.int_mk_a & 0x20) == 0) | 1602 | if ((st_mfp.int_en_a & st_mfp.int_mk_a & 0x20) == 0) |
1603 | return dmasound_init(); | 1603 | return dmasound_init(); |
1604 | else { | 1604 | else { |
1605 | printk("DMA sound driver: Timer A interrupt already in use\n"); | 1605 | printk("DMA sound driver: Timer A interrupt already in use\n"); |
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig index 6e3a1848447c..82b9bddcdcd6 100644 --- a/sound/pci/Kconfig +++ b/sound/pci/Kconfig | |||
@@ -744,8 +744,8 @@ config SND_VIRTUOSO | |||
744 | select SND_OXYGEN_LIB | 744 | select SND_OXYGEN_LIB |
745 | help | 745 | help |
746 | Say Y here to include support for sound cards based on the | 746 | Say Y here to include support for sound cards based on the |
747 | Asus AV100/AV200 chips, i.e., Xonar D1, DX, D2, D2X and | 747 | Asus AV100/AV200 chips, i.e., Xonar D1, DX, D2 and D2X. |
748 | HDAV1.3 (Deluxe). | 748 | Support for the HDAV1.3 (Deluxe) is very experimental. |
749 | 749 | ||
750 | To compile this driver as a module, choose M here: the module | 750 | To compile this driver as a module, choose M here: the module |
751 | will be called snd-virtuoso. | 751 | will be called snd-virtuoso. |
diff --git a/sound/pci/aw2/aw2-alsa.c b/sound/pci/aw2/aw2-alsa.c index 3f00ddf450f8..c7c54e7748e9 100644 --- a/sound/pci/aw2/aw2-alsa.c +++ b/sound/pci/aw2/aw2-alsa.c | |||
@@ -165,7 +165,7 @@ module_param_array(enable, bool, NULL, 0444); | |||
165 | MODULE_PARM_DESC(enable, "Enable Audiowerk2 soundcard."); | 165 | MODULE_PARM_DESC(enable, "Enable Audiowerk2 soundcard."); |
166 | 166 | ||
167 | static struct pci_device_id snd_aw2_ids[] = { | 167 | static struct pci_device_id snd_aw2_ids[] = { |
168 | {PCI_VENDOR_ID_SAA7146, PCI_DEVICE_ID_SAA7146, PCI_ANY_ID, PCI_ANY_ID, | 168 | {PCI_VENDOR_ID_SAA7146, PCI_DEVICE_ID_SAA7146, 0, 0, |
169 | 0, 0, 0}, | 169 | 0, 0, 0}, |
170 | {0} | 170 | {0} |
171 | }; | 171 | }; |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index 7958006a1d66..101a1c13a20d 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -1528,6 +1528,7 @@ static struct snd_emu_chip_details emu_chip_details[] = { | |||
1528 | .ca0151_chip = 1, | 1528 | .ca0151_chip = 1, |
1529 | .spk71 = 1, | 1529 | .spk71 = 1, |
1530 | .spdif_bug = 1, | 1530 | .spdif_bug = 1, |
1531 | .invert_shared_spdif = 1, /* digital/analog switch swapped */ | ||
1531 | .ac97_chip = 1} , | 1532 | .ac97_chip = 1} , |
1532 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, | 1533 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, |
1533 | .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]", | 1534 | .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]", |
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index 19d3391e229f..e900cdc84849 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c | |||
@@ -617,7 +617,7 @@ static int snd_intel8x0_ali_codec_semaphore(struct intel8x0 *chip) | |||
617 | int time = 100; | 617 | int time = 100; |
618 | if (chip->buggy_semaphore) | 618 | if (chip->buggy_semaphore) |
619 | return 0; /* just ignore ... */ | 619 | return 0; /* just ignore ... */ |
620 | while (time-- && (igetdword(chip, ICHREG(ALI_CAS)) & ALI_CAS_SEM_BUSY)) | 620 | while (--time && (igetdword(chip, ICHREG(ALI_CAS)) & ALI_CAS_SEM_BUSY)) |
621 | udelay(1); | 621 | udelay(1); |
622 | if (! time && ! chip->in_ac97_init) | 622 | if (! time && ! chip->in_ac97_init) |
623 | snd_printk(KERN_WARNING "ali_codec_semaphore timeout\n"); | 623 | snd_printk(KERN_WARNING "ali_codec_semaphore timeout\n"); |
diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c index f23a73577c22..bb162507fe6c 100644 --- a/sound/pci/mixart/mixart.c +++ b/sound/pci/mixart/mixart.c | |||
@@ -607,6 +607,7 @@ static int snd_mixart_hw_params(struct snd_pcm_substream *subs, | |||
607 | /* set the format to the board */ | 607 | /* set the format to the board */ |
608 | err = mixart_set_format(stream, format); | 608 | err = mixart_set_format(stream, format); |
609 | if(err < 0) { | 609 | if(err < 0) { |
610 | mutex_unlock(&mgr->setup_mutex); | ||
610 | return err; | 611 | return err; |
611 | } | 612 | } |
612 | 613 | ||
diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c index 98c6a8c65d81..6c870c12a177 100644 --- a/sound/pci/oxygen/virtuoso.c +++ b/sound/pci/oxygen/virtuoso.c | |||
@@ -676,7 +676,7 @@ static void xonar_hdav_uart_input(struct oxygen *chip) | |||
676 | if (chip->uart_input_count >= 2 && | 676 | if (chip->uart_input_count >= 2 && |
677 | chip->uart_input[chip->uart_input_count - 2] == 'O' && | 677 | chip->uart_input[chip->uart_input_count - 2] == 'O' && |
678 | chip->uart_input[chip->uart_input_count - 1] == 'K') { | 678 | chip->uart_input[chip->uart_input_count - 1] == 'K') { |
679 | printk(KERN_DEBUG "message from Xonar HDAV HDMI chip received:"); | 679 | printk(KERN_DEBUG "message from Xonar HDAV HDMI chip received:\n"); |
680 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, | 680 | print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, |
681 | chip->uart_input, chip->uart_input_count); | 681 | chip->uart_input, chip->uart_input_count); |
682 | chip->uart_input_count = 0; | 682 | chip->uart_input_count = 0; |
@@ -899,6 +899,7 @@ static const struct oxygen_model model_xonar_hdav = { | |||
899 | .dac_channels = 8, | 899 | .dac_channels = 8, |
900 | .dac_volume_min = 0x0f, | 900 | .dac_volume_min = 0x0f, |
901 | .dac_volume_max = 0xff, | 901 | .dac_volume_max = 0xff, |
902 | .misc_flags = OXYGEN_MISC_MIDI, | ||
902 | .function_flags = OXYGEN_FUNCTION_2WIRE, | 903 | .function_flags = OXYGEN_FUNCTION_2WIRE, |
903 | .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST, | 904 | .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST, |
904 | .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, | 905 | .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, |
diff --git a/sound/pci/pcxhr/pcxhr.h b/sound/pci/pcxhr/pcxhr.h index 84131a916c92..69d87dee6995 100644 --- a/sound/pci/pcxhr/pcxhr.h +++ b/sound/pci/pcxhr/pcxhr.h | |||
@@ -97,12 +97,12 @@ struct pcxhr_mgr { | |||
97 | int capture_chips; | 97 | int capture_chips; |
98 | int fw_file_set; | 98 | int fw_file_set; |
99 | int firmware_num; | 99 | int firmware_num; |
100 | int is_hr_stereo:1; | 100 | unsigned int is_hr_stereo:1; |
101 | int board_has_aes1:1; /* if 1 board has AES1 plug and SRC */ | 101 | unsigned int board_has_aes1:1; /* if 1 board has AES1 plug and SRC */ |
102 | int board_has_analog:1; /* if 0 the board is digital only */ | 102 | unsigned int board_has_analog:1; /* if 0 the board is digital only */ |
103 | int board_has_mic:1; /* if 1 the board has microphone input */ | 103 | unsigned int board_has_mic:1; /* if 1 the board has microphone input */ |
104 | int board_aes_in_192k:1;/* if 1 the aes input plugs do support 192kHz */ | 104 | unsigned int board_aes_in_192k:1;/* if 1 the aes input plugs do support 192kHz */ |
105 | int mono_capture:1; /* if 1 the board does mono capture */ | 105 | unsigned int mono_capture:1; /* if 1 the board does mono capture */ |
106 | 106 | ||
107 | struct snd_dma_buffer hostport; | 107 | struct snd_dma_buffer hostport; |
108 | 108 | ||
diff --git a/sound/ppc/snd_ps3.c b/sound/ppc/snd_ps3.c index 8f9e3859c37c..ff321110ec02 100644 --- a/sound/ppc/snd_ps3.c +++ b/sound/ppc/snd_ps3.c | |||
@@ -477,7 +477,7 @@ static int snd_ps3_pcm_prepare(struct snd_pcm_substream *substream) | |||
477 | card->dma_start_bus_addr[SND_PS3_CH_R] = | 477 | card->dma_start_bus_addr[SND_PS3_CH_R] = |
478 | runtime->dma_addr + (runtime->dma_bytes / 2); | 478 | runtime->dma_addr + (runtime->dma_bytes / 2); |
479 | 479 | ||
480 | pr_debug("%s: vaddr=%p bus=%#lx\n", __func__, | 480 | pr_debug("%s: vaddr=%p bus=%#llx\n", __func__, |
481 | card->dma_start_vaddr[SND_PS3_CH_L], | 481 | card->dma_start_vaddr[SND_PS3_CH_L], |
482 | card->dma_start_bus_addr[SND_PS3_CH_L]); | 482 | card->dma_start_bus_addr[SND_PS3_CH_L]); |
483 | 483 | ||
@@ -1030,7 +1030,7 @@ static int __init snd_ps3_driver_probe(struct ps3_system_bus_device *dev) | |||
1030 | pr_info("%s: nullbuffer alloc failed\n", __func__); | 1030 | pr_info("%s: nullbuffer alloc failed\n", __func__); |
1031 | goto clean_preallocate; | 1031 | goto clean_preallocate; |
1032 | } | 1032 | } |
1033 | pr_debug("%s: null vaddr=%p dma=%#lx\n", __func__, | 1033 | pr_debug("%s: null vaddr=%p dma=%#llx\n", __func__, |
1034 | the_card.null_buffer_start_vaddr, | 1034 | the_card.null_buffer_start_vaddr, |
1035 | the_card.null_buffer_start_dma_addr); | 1035 | the_card.null_buffer_start_dma_addr); |
1036 | /* set default sample rate/word width */ | 1036 | /* set default sample rate/word width */ |
diff --git a/sound/soc/atmel/atmel-pcm.c b/sound/soc/atmel/atmel-pcm.c index 1fac5efd285b..3dcdc4e3cfa0 100644 --- a/sound/soc/atmel/atmel-pcm.c +++ b/sound/soc/atmel/atmel-pcm.c | |||
@@ -44,8 +44,6 @@ | |||
44 | #include <sound/pcm_params.h> | 44 | #include <sound/pcm_params.h> |
45 | #include <sound/soc.h> | 45 | #include <sound/soc.h> |
46 | 46 | ||
47 | #include <mach/hardware.h> | ||
48 | |||
49 | #include "atmel-pcm.h" | 47 | #include "atmel-pcm.h" |
50 | 48 | ||
51 | 49 | ||
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c index c5d67900d666..ff0054b76502 100644 --- a/sound/soc/atmel/atmel_ssc_dai.c +++ b/sound/soc/atmel/atmel_ssc_dai.c | |||
@@ -10,7 +10,7 @@ | |||
10 | * Based on at91-ssc.c by | 10 | * Based on at91-ssc.c by |
11 | * Frank Mandarino <fmandarino@endrelia.com> | 11 | * Frank Mandarino <fmandarino@endrelia.com> |
12 | * Based on pxa2xx Platform drivers by | 12 | * Based on pxa2xx Platform drivers by |
13 | * Liam Girdwood <liam.girdwood@wolfsonmicro.com> | 13 | * Liam Girdwood <lrg@slimlogic.co.uk> |
14 | * | 14 | * |
15 | * This program is free software; you can redistribute it and/or modify | 15 | * This program is free software; you can redistribute it and/or modify |
16 | * it under the terms of the GNU General Public License as published by | 16 | * it under the terms of the GNU General Public License as published by |
diff --git a/sound/soc/atmel/atmel_ssc_dai.h b/sound/soc/atmel/atmel_ssc_dai.h index a828746e8a2f..391135f9c6c1 100644 --- a/sound/soc/atmel/atmel_ssc_dai.h +++ b/sound/soc/atmel/atmel_ssc_dai.h | |||
@@ -10,7 +10,7 @@ | |||
10 | * Based on at91-ssc.c by | 10 | * Based on at91-ssc.c by |
11 | * Frank Mandarino <fmandarino@endrelia.com> | 11 | * Frank Mandarino <fmandarino@endrelia.com> |
12 | * Based on pxa2xx Platform drivers by | 12 | * Based on pxa2xx Platform drivers by |
13 | * Liam Girdwood <liam.girdwood@wolfsonmicro.com> | 13 | * Liam Girdwood <lrg@slimlogic.co.uk> |
14 | * | 14 | * |
15 | * This program is free software; you can redistribute it and/or modify | 15 | * This program is free software; you can redistribute it and/or modify |
16 | * it under the terms of the GNU General Public License as published by | 16 | * it under the terms of the GNU General Public License as published by |
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index b47a749c5ea2..aea0cb72d80a 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
@@ -165,10 +165,13 @@ static int snd_soc_dapm_put_volsw_aic3x(struct snd_kcontrol *kcontrol, | |||
165 | struct snd_ctl_elem_value *ucontrol) | 165 | struct snd_ctl_elem_value *ucontrol) |
166 | { | 166 | { |
167 | struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); | 167 | struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); |
168 | int reg = kcontrol->private_value & 0xff; | 168 | struct soc_mixer_control *mc = |
169 | int shift = (kcontrol->private_value >> 8) & 0x0f; | 169 | (struct soc_mixer_control *)kcontrol->private_value; |
170 | int mask = (kcontrol->private_value >> 16) & 0xff; | 170 | unsigned int reg = mc->reg; |
171 | int invert = (kcontrol->private_value >> 24) & 0x01; | 171 | unsigned int shift = mc->shift; |
172 | int max = mc->max; | ||
173 | unsigned int mask = (1 << fls(max)) - 1; | ||
174 | unsigned int invert = mc->invert; | ||
172 | unsigned short val, val_mask; | 175 | unsigned short val, val_mask; |
173 | int ret; | 176 | int ret; |
174 | struct snd_soc_dapm_path *path; | 177 | struct snd_soc_dapm_path *path; |
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c index e3989d406f54..35d99750c383 100644 --- a/sound/soc/codecs/wm8350.c +++ b/sound/soc/codecs/wm8350.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC. | 4 | * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC. |
5 | * | 5 | * |
6 | * Author: Liam Girdwood <lg@opensource.wolfsonmicro.com> | 6 | * Author: Liam Girdwood <lrg@slimlogic.co.uk> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c index 6c21b50c9375..77620ab98756 100644 --- a/sound/soc/codecs/wm8753.c +++ b/sound/soc/codecs/wm8753.c | |||
@@ -1451,7 +1451,14 @@ static const struct snd_soc_dai wm8753_all_dai[] = { | |||
1451 | }, | 1451 | }, |
1452 | }; | 1452 | }; |
1453 | 1453 | ||
1454 | struct snd_soc_dai wm8753_dai[2]; | 1454 | struct snd_soc_dai wm8753_dai[] = { |
1455 | { | ||
1456 | .name = "WM8753 DAI 0", | ||
1457 | }, | ||
1458 | { | ||
1459 | .name = "WM8753 DAI 1", | ||
1460 | }, | ||
1461 | }; | ||
1455 | EXPORT_SYMBOL_GPL(wm8753_dai); | 1462 | EXPORT_SYMBOL_GPL(wm8753_dai); |
1456 | 1463 | ||
1457 | static void wm8753_set_dai_mode(struct snd_soc_codec *codec, unsigned int mode) | 1464 | static void wm8753_set_dai_mode(struct snd_soc_codec *codec, unsigned int mode) |
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c index 5b5afc144478..a5731faa150c 100644 --- a/sound/soc/codecs/wm8990.c +++ b/sound/soc/codecs/wm8990.c | |||
@@ -2,8 +2,7 @@ | |||
2 | * wm8990.c -- WM8990 ALSA Soc Audio driver | 2 | * wm8990.c -- WM8990 ALSA Soc Audio driver |
3 | * | 3 | * |
4 | * Copyright 2008 Wolfson Microelectronics PLC. | 4 | * Copyright 2008 Wolfson Microelectronics PLC. |
5 | * Author: Liam Girdwood | 5 | * Author: Liam Girdwood <lrg@slimlogic.co.uk> |
6 | * lg@opensource.wolfsonmicro.com or linux@wolfsonmicro.com | ||
7 | * | 6 | * |
8 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
9 | * under the terms of the GNU General Public License as published by the | 8 | * under the terms of the GNU General Public License as published by the |
@@ -177,7 +176,9 @@ static int wm899x_outpga_put_volsw_vu(struct snd_kcontrol *kcontrol, | |||
177 | struct snd_ctl_elem_value *ucontrol) | 176 | struct snd_ctl_elem_value *ucontrol) |
178 | { | 177 | { |
179 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 178 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); |
180 | int reg = kcontrol->private_value & 0xff; | 179 | struct soc_mixer_control *mc = |
180 | (struct soc_mixer_control *)kcontrol->private_value; | ||
181 | int reg = mc->reg; | ||
181 | int ret; | 182 | int ret; |
182 | u16 val; | 183 | u16 val; |
183 | 184 | ||
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c index bcec3f60bad9..acf39a646b2f 100644 --- a/sound/soc/fsl/mpc8610_hpcd.c +++ b/sound/soc/fsl/mpc8610_hpcd.c | |||
@@ -183,16 +183,6 @@ static struct snd_soc_ops mpc8610_hpcd_ops = { | |||
183 | }; | 183 | }; |
184 | 184 | ||
185 | /** | 185 | /** |
186 | * mpc8610_hpcd_machine: ASoC machine data | ||
187 | */ | ||
188 | static struct snd_soc_card mpc8610_hpcd_machine = { | ||
189 | .probe = mpc8610_hpcd_machine_probe, | ||
190 | .remove = mpc8610_hpcd_machine_remove, | ||
191 | .name = "MPC8610 HPCD", | ||
192 | .num_links = 1, | ||
193 | }; | ||
194 | |||
195 | /** | ||
196 | * mpc8610_hpcd_probe: OF probe function for the fabric driver | 186 | * mpc8610_hpcd_probe: OF probe function for the fabric driver |
197 | * | 187 | * |
198 | * This function gets called when an SSI node is found in the device tree. | 188 | * This function gets called when an SSI node is found in the device tree. |
@@ -455,7 +445,11 @@ static int mpc8610_hpcd_probe(struct of_device *ofdev, | |||
455 | machine_data->dai.codec_dai = &cs4270_dai; /* The codec_dai we want */ | 445 | machine_data->dai.codec_dai = &cs4270_dai; /* The codec_dai we want */ |
456 | machine_data->dai.ops = &mpc8610_hpcd_ops; | 446 | machine_data->dai.ops = &mpc8610_hpcd_ops; |
457 | 447 | ||
458 | mpc8610_hpcd_machine.dai_link = &machine_data->dai; | 448 | machine_data->machine.probe = mpc8610_hpcd_machine_probe; |
449 | machine_data->machine.remove = mpc8610_hpcd_machine_remove; | ||
450 | machine_data->machine.name = "MPC8610 HPCD"; | ||
451 | machine_data->machine.num_links = 1; | ||
452 | machine_data->machine.dai_link = &machine_data->dai; | ||
459 | 453 | ||
460 | /* Allocate a new audio platform device structure */ | 454 | /* Allocate a new audio platform device structure */ |
461 | sound_device = platform_device_alloc("soc-audio", -1); | 455 | sound_device = platform_device_alloc("soc-audio", -1); |
@@ -465,7 +459,7 @@ static int mpc8610_hpcd_probe(struct of_device *ofdev, | |||
465 | goto error; | 459 | goto error; |
466 | } | 460 | } |
467 | 461 | ||
468 | machine_data->sound_devdata.card = &mpc8610_hpcd_machine; | 462 | machine_data->sound_devdata.card = &machine_data->machine; |
469 | machine_data->sound_devdata.codec_dev = &soc_codec_device_cs4270; | 463 | machine_data->sound_devdata.codec_dev = &soc_codec_device_cs4270; |
470 | machine_data->machine.platform = &fsl_soc_platform; | 464 | machine_data->machine.platform = &fsl_soc_platform; |
471 | 465 | ||
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c index ec5e18a78758..05dd5abcddf4 100644 --- a/sound/soc/omap/omap-mcbsp.c +++ b/sound/soc/omap/omap-mcbsp.c | |||
@@ -302,6 +302,10 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, | |||
302 | regs->spcr1 |= RINTM(3); | 302 | regs->spcr1 |= RINTM(3); |
303 | regs->rcr2 |= RFIG; | 303 | regs->rcr2 |= RFIG; |
304 | regs->xcr2 |= XFIG; | 304 | regs->xcr2 |= XFIG; |
305 | if (cpu_is_omap2430() || cpu_is_omap34xx()) { | ||
306 | regs->xccr = DXENDLY(1) | XDMAEN; | ||
307 | regs->rccr = RFULL_CYCLE | RDMAEN; | ||
308 | } | ||
305 | 309 | ||
306 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 310 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
307 | case SND_SOC_DAIFMT_I2S: | 311 | case SND_SOC_DAIFMT_I2S: |
diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c index b0362dfd5b71..dd3bb2933762 100644 --- a/sound/soc/omap/omap-pcm.c +++ b/sound/soc/omap/omap-pcm.c | |||
@@ -175,9 +175,10 @@ static int omap_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | |||
175 | { | 175 | { |
176 | struct snd_pcm_runtime *runtime = substream->runtime; | 176 | struct snd_pcm_runtime *runtime = substream->runtime; |
177 | struct omap_runtime_data *prtd = runtime->private_data; | 177 | struct omap_runtime_data *prtd = runtime->private_data; |
178 | unsigned long flags; | ||
178 | int ret = 0; | 179 | int ret = 0; |
179 | 180 | ||
180 | spin_lock_irq(&prtd->lock); | 181 | spin_lock_irqsave(&prtd->lock, flags); |
181 | switch (cmd) { | 182 | switch (cmd) { |
182 | case SNDRV_PCM_TRIGGER_START: | 183 | case SNDRV_PCM_TRIGGER_START: |
183 | case SNDRV_PCM_TRIGGER_RESUME: | 184 | case SNDRV_PCM_TRIGGER_RESUME: |
@@ -195,7 +196,7 @@ static int omap_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | |||
195 | default: | 196 | default: |
196 | ret = -EINVAL; | 197 | ret = -EINVAL; |
197 | } | 198 | } |
198 | spin_unlock_irq(&prtd->lock); | 199 | spin_unlock_irqrestore(&prtd->lock, flags); |
199 | 200 | ||
200 | return ret; | 201 | return ret; |
201 | } | 202 | } |
diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c index ad97836818b1..e226fa75669c 100644 --- a/sound/soc/omap/sdp3430.c +++ b/sound/soc/omap/sdp3430.c | |||
@@ -91,7 +91,7 @@ static struct snd_soc_dai_link sdp3430_dai = { | |||
91 | }; | 91 | }; |
92 | 92 | ||
93 | /* Audio machine driver */ | 93 | /* Audio machine driver */ |
94 | static struct snd_soc_machine snd_soc_machine_sdp3430 = { | 94 | static struct snd_soc_card snd_soc_sdp3430 = { |
95 | .name = "SDP3430", | 95 | .name = "SDP3430", |
96 | .platform = &omap_soc_platform, | 96 | .platform = &omap_soc_platform, |
97 | .dai_link = &sdp3430_dai, | 97 | .dai_link = &sdp3430_dai, |
@@ -100,7 +100,7 @@ static struct snd_soc_machine snd_soc_machine_sdp3430 = { | |||
100 | 100 | ||
101 | /* Audio subsystem */ | 101 | /* Audio subsystem */ |
102 | static struct snd_soc_device sdp3430_snd_devdata = { | 102 | static struct snd_soc_device sdp3430_snd_devdata = { |
103 | .machine = &snd_soc_machine_sdp3430, | 103 | .card = &snd_soc_sdp3430, |
104 | .codec_dev = &soc_codec_dev_twl4030, | 104 | .codec_dev = &soc_codec_dev_twl4030, |
105 | }; | 105 | }; |
106 | 106 | ||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 55fdb4abb179..ec3f8bb4b51d 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c | |||
@@ -1385,7 +1385,10 @@ int snd_soc_init_card(struct snd_soc_device *socdev) | |||
1385 | 1385 | ||
1386 | mutex_lock(&codec->mutex); | 1386 | mutex_lock(&codec->mutex); |
1387 | #ifdef CONFIG_SND_SOC_AC97_BUS | 1387 | #ifdef CONFIG_SND_SOC_AC97_BUS |
1388 | if (ac97) { | 1388 | /* Only instantiate AC97 if not already done by the adaptor |
1389 | * for the generic AC97 subsystem. | ||
1390 | */ | ||
1391 | if (ac97 && strcmp(codec->name, "AC97") != 0) { | ||
1389 | ret = soc_ac97_dev_register(codec); | 1392 | ret = soc_ac97_dev_register(codec); |
1390 | if (ret < 0) { | 1393 | if (ret < 0) { |
1391 | printk(KERN_ERR "asoc: AC97 device register failed\n"); | 1394 | printk(KERN_ERR "asoc: AC97 device register failed\n"); |
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 493a4e8aa273..a2f1da8b4646 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -720,7 +720,8 @@ static int dapm_mux_update_power(struct snd_soc_dapm_widget *widget, | |||
720 | struct snd_soc_dapm_path *path; | 720 | struct snd_soc_dapm_path *path; |
721 | int found = 0; | 721 | int found = 0; |
722 | 722 | ||
723 | if (widget->id != snd_soc_dapm_mux) | 723 | if (widget->id != snd_soc_dapm_mux && |
724 | widget->id != snd_soc_dapm_value_mux) | ||
724 | return -ENODEV; | 725 | return -ENODEV; |
725 | 726 | ||
726 | if (!snd_soc_test_bits(widget->codec, e->reg, mask, val)) | 727 | if (!snd_soc_test_bits(widget->codec, e->reg, mask, val)) |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index c709b9563226..19e37451c216 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -2524,7 +2524,6 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform | |||
2524 | * build the rate table and bitmap flags | 2524 | * build the rate table and bitmap flags |
2525 | */ | 2525 | */ |
2526 | int r, idx; | 2526 | int r, idx; |
2527 | unsigned int nonzero_rates = 0; | ||
2528 | 2527 | ||
2529 | fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL); | 2528 | fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL); |
2530 | if (fp->rate_table == NULL) { | 2529 | if (fp->rate_table == NULL) { |
@@ -2532,24 +2531,27 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform | |||
2532 | return -1; | 2531 | return -1; |
2533 | } | 2532 | } |
2534 | 2533 | ||
2535 | fp->nr_rates = nr_rates; | 2534 | fp->nr_rates = 0; |
2536 | fp->rate_min = fp->rate_max = combine_triple(&fmt[8]); | 2535 | fp->rate_min = fp->rate_max = 0; |
2537 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { | 2536 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { |
2538 | unsigned int rate = combine_triple(&fmt[idx]); | 2537 | unsigned int rate = combine_triple(&fmt[idx]); |
2538 | if (!rate) | ||
2539 | continue; | ||
2539 | /* C-Media CM6501 mislabels its 96 kHz altsetting */ | 2540 | /* C-Media CM6501 mislabels its 96 kHz altsetting */ |
2540 | if (rate == 48000 && nr_rates == 1 && | 2541 | if (rate == 48000 && nr_rates == 1 && |
2541 | chip->usb_id == USB_ID(0x0d8c, 0x0201) && | 2542 | (chip->usb_id == USB_ID(0x0d8c, 0x0201) || |
2543 | chip->usb_id == USB_ID(0x0d8c, 0x0102)) && | ||
2542 | fp->altsetting == 5 && fp->maxpacksize == 392) | 2544 | fp->altsetting == 5 && fp->maxpacksize == 392) |
2543 | rate = 96000; | 2545 | rate = 96000; |
2544 | fp->rate_table[r] = rate; | 2546 | fp->rate_table[fp->nr_rates] = rate; |
2545 | nonzero_rates |= rate; | 2547 | if (!fp->rate_min || rate < fp->rate_min) |
2546 | if (rate < fp->rate_min) | ||
2547 | fp->rate_min = rate; | 2548 | fp->rate_min = rate; |
2548 | else if (rate > fp->rate_max) | 2549 | if (!fp->rate_max || rate > fp->rate_max) |
2549 | fp->rate_max = rate; | 2550 | fp->rate_max = rate; |
2550 | fp->rates |= snd_pcm_rate_to_rate_bit(rate); | 2551 | fp->rates |= snd_pcm_rate_to_rate_bit(rate); |
2552 | fp->nr_rates++; | ||
2551 | } | 2553 | } |
2552 | if (!nonzero_rates) { | 2554 | if (!fp->nr_rates) { |
2553 | hwc_debug("All rates were zero. Skipping format!\n"); | 2555 | hwc_debug("All rates were zero. Skipping format!\n"); |
2554 | return -1; | 2556 | return -1; |
2555 | } | 2557 | } |
@@ -2966,6 +2968,7 @@ static int create_fixed_stream_quirk(struct snd_usb_audio *chip, | |||
2966 | return -EINVAL; | 2968 | return -EINVAL; |
2967 | } | 2969 | } |
2968 | alts = &iface->altsetting[fp->altset_idx]; | 2970 | alts = &iface->altsetting[fp->altset_idx]; |
2971 | fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize); | ||
2969 | usb_set_interface(chip->dev, fp->iface, 0); | 2972 | usb_set_interface(chip->dev, fp->iface, 0); |
2970 | init_usb_pitch(chip->dev, fp->iface, alts, fp); | 2973 | init_usb_pitch(chip->dev, fp->iface, alts, fp); |
2971 | init_usb_sample_rate(chip->dev, fp->iface, alts, fp, fp->rate_max); | 2974 | init_usb_sample_rate(chip->dev, fp->iface, alts, fp, fp->rate_max); |
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c index 320641ab5be7..26bad373fe65 100644 --- a/sound/usb/usbmidi.c +++ b/sound/usb/usbmidi.c | |||
@@ -1625,6 +1625,7 @@ static int snd_usbmidi_create_endpoints_midiman(struct snd_usb_midi* umidi, | |||
1625 | } | 1625 | } |
1626 | 1626 | ||
1627 | ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; | 1627 | ep_info.out_ep = get_endpoint(hostif, 2)->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; |
1628 | ep_info.out_interval = 0; | ||
1628 | ep_info.out_cables = endpoint->out_cables & 0x5555; | 1629 | ep_info.out_cables = endpoint->out_cables & 0x5555; |
1629 | err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); | 1630 | err = snd_usbmidi_out_endpoint_create(umidi, &ep_info, &umidi->endpoints[0]); |
1630 | if (err < 0) | 1631 | if (err < 0) |
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h index 92115755d98e..5d8ef09b9dcc 100644 --- a/sound/usb/usbquirks.h +++ b/sound/usb/usbquirks.h | |||
@@ -128,6 +128,14 @@ | |||
128 | .bInterfaceClass = USB_CLASS_AUDIO, | 128 | .bInterfaceClass = USB_CLASS_AUDIO, |
129 | .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL | 129 | .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL |
130 | }, | 130 | }, |
131 | { | ||
132 | USB_DEVICE(0x046d, 0x0990), | ||
133 | .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) { | ||
134 | .vendor_name = "Logitech, Inc.", | ||
135 | .product_name = "QuickCam Pro 9000", | ||
136 | .ifnum = QUIRK_NO_INTERFACE | ||
137 | } | ||
138 | }, | ||
131 | 139 | ||
132 | /* | 140 | /* |
133 | * Yamaha devices | 141 | * Yamaha devices |