Changeset 522 for GPL/trunk/alsa-kernel/pci/emu10k1/emu10k1x.c
- Timestamp:
- Jul 22, 2010, 7:20:45 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk/alsa-kernel/pci/emu10k1/emu10k1x.c
r464 r522 108 108 /********************************************************************************************************/ 109 109 #define PLAYBACK_LIST_ADDR 0x00 /* Base DMA address of a list of pointers to each period/size */ 110 /* One list entry: 4 bytes for DMA address, 110 /* One list entry: 4 bytes for DMA address, 111 111 * 4 bytes for period_size << 16. 112 112 * One list entry is 8 bytes long. … … 187 187 * - channel 2 is the center/lfe chanel 188 188 * Volume is controlled by the AC97 for the front and rear channels by 189 * the PCM Playback Volume, Sigmatel Surround Playback Volume and 189 * the PCM Playback Volume, Sigmatel Surround Playback Volume and 190 190 * Surround Playback Volume. The Sigmatel 4-Speaker Stereo switch affects 191 191 * the front/rear channel mixing in the REAR OUT jack. When using the … … 200 200 int number; 201 201 int use; 202 202 203 203 struct emu10k1x_pcm *epcm; 204 204 }; … … 256 256 /* hardware definition */ 257 257 static struct snd_pcm_hardware snd_emu10k1x_playback_hw = { 258 .info = (SNDRV_PCM_INFO_MMAP | 258 .info = (SNDRV_PCM_INFO_MMAP | 259 259 SNDRV_PCM_INFO_INTERLEAVED | 260 260 SNDRV_PCM_INFO_BLOCK_TRANSFER | … … 275 275 276 276 static struct snd_pcm_hardware snd_emu10k1x_capture_hw = { 277 .info = (SNDRV_PCM_INFO_MMAP | 277 .info = (SNDRV_PCM_INFO_MMAP | 278 278 SNDRV_PCM_INFO_INTERLEAVED | 279 279 SNDRV_PCM_INFO_BLOCK_TRANSFER | … … 293 293 }; 294 294 295 static unsigned int snd_emu10k1x_ptr_read(struct emu10k1x * emu, 296 unsigned int reg, 295 static unsigned int snd_emu10k1x_ptr_read(struct emu10k1x * emu, 296 unsigned int reg, 297 297 unsigned int chn) 298 298 { 299 299 unsigned long flags; 300 300 unsigned int regptr, val; 301 301 302 302 regptr = (reg << 16) | chn; 303 303 … … 309 309 } 310 310 311 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, 312 unsigned int reg, 313 unsigned int chn, 311 static void snd_emu10k1x_ptr_write(struct emu10k1x *emu, 312 unsigned int reg, 313 unsigned int chn, 314 314 unsigned int data) 315 315 { … … 397 397 epcm->emu = chip; 398 398 epcm->substream = substream; 399 399 400 400 runtime->private_data = epcm; 401 401 runtime->private_free = snd_emu10k1x_pcm_free_substream; 402 402 403 403 runtime->hw = snd_emu10k1x_playback_hw; 404 404 … … 531 531 return 0; 532 532 533 if (ptr3 != ptr4) 533 if (ptr3 != ptr4) 534 534 ptr1 = snd_emu10k1x_ptr_read(emu, PLAYBACK_POINTER, channel); 535 535 ptr2 = bytes_to_frames(runtime, ptr1); … … 653 653 switch (cmd) { 654 654 case SNDRV_PCM_TRIGGER_START: 655 snd_emu10k1x_intr_enable(emu, INTE_CAP_0_LOOP | 655 snd_emu10k1x_intr_enable(emu, INTE_CAP_0_LOOP | 656 656 INTE_CAP_0_HALF_LOOP); 657 657 snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0)|TRIGGER_CAPTURE); … … 660 660 case SNDRV_PCM_TRIGGER_STOP: 661 661 epcm->running = 0; 662 snd_emu10k1x_intr_disable(emu, INTE_CAP_0_LOOP | 662 snd_emu10k1x_intr_disable(emu, INTE_CAP_0_LOOP | 663 663 INTE_CAP_0_HALF_LOOP); 664 664 snd_emu10k1x_ptr_write(emu, TRIGGER_CHANNEL, 0, snd_emu10k1x_ptr_read(emu, TRIGGER_CHANNEL, 0) & ~(TRIGGER_CAPTURE)); … … 707 707 unsigned long flags; 708 708 unsigned short val; 709 709 710 710 spin_lock_irqsave(&emu->emu_lock, flags); 711 711 outb(reg, emu->port + AC97ADDRESS); … … 720 720 struct emu10k1x *emu = ac97->private_data; 721 721 unsigned long flags; 722 722 723 723 spin_lock_irqsave(&emu->emu_lock, flags); 724 724 outb(reg, emu->port + AC97ADDRESS); … … 736 736 .read = snd_emu10k1x_ac97_read, 737 737 }; 738 738 739 739 if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0) 740 740 return err; … … 800 800 snd_emu10k1x_pcm_interrupt(chip, cap_voice); 801 801 else 802 snd_emu10k1x_intr_disable(chip, 802 snd_emu10k1x_intr_disable(chip, 803 803 INTE_CAP_0_LOOP | 804 804 INTE_CAP_0_HALF_LOOP); … … 810 810 if (pvoice->use) 811 811 snd_emu10k1x_pcm_interrupt(chip, pvoice); 812 else 812 else 813 813 snd_emu10k1x_intr_disable(chip, mask); 814 814 } … … 836 836 int err; 837 837 int capture = 0; 838 838 839 839 if (rpcm) 840 840 *rpcm = NULL; … … 844 844 if ((err = snd_pcm_new(emu->card, "emu10k1x", device, 1, capture, &pcm)) < 0) 845 845 return err; 846 846 847 847 pcm->private_data = emu; 848 848 … … 873 873 874 874 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, 875 snd_dma_pci_data(emu->pci), 875 snd_dma_pci_data(emu->pci), 876 876 32*1024, 32*1024); 877 877 878 878 if (rpcm) 879 879 *rpcm = pcm; 880 880 881 881 return 0; 882 882 } … … 916 916 spin_lock_init(&chip->emu_lock); 917 917 spin_lock_init(&chip->voice_lock); 918 918 919 919 chip->port = pci_resource_start(pci, 0); 920 920 if ((chip->res_port = request_region(chip->port, 8, 921 "EMU10K1X")) == NULL) { 921 "EMU10K1X")) == NULL) { 922 922 snd_printk(KERN_ERR "emu10k1x: cannot allocate the port 0x%lx\n", chip->port); 923 923 snd_emu10k1x_free(chip); … … 932 932 } 933 933 chip->irq = pci->irq; 934 934 935 935 if(snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), 936 936 4 * 1024, &chip->dma_buffer) < 0) { … … 973 973 */ 974 974 snd_emu10k1x_ptr_write(chip, SPCS0, 0, 975 chip->spdif_bits[0] = 975 chip->spdif_bits[0] = 976 976 SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | 977 977 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | … … 979 979 0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT); 980 980 snd_emu10k1x_ptr_write(chip, SPCS1, 0, 981 chip->spdif_bits[1] = 981 chip->spdif_bits[1] = 982 982 SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | 983 983 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | … … 985 985 0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT); 986 986 snd_emu10k1x_ptr_write(chip, SPCS2, 0, 987 chip->spdif_bits[2] = 987 chip->spdif_bits[2] = 988 988 SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | 989 989 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | … … 1006 1006 } 1007 1007 1008 static void snd_emu10k1x_proc_reg_read(struct snd_info_entry *entry, 1008 static void snd_emu10k1x_proc_reg_read(struct snd_info_entry *entry, 1009 1009 struct snd_info_buffer *buffer) 1010 1010 { … … 1034 1034 } 1035 1035 1036 static void snd_emu10k1x_proc_reg_write(struct snd_info_entry *entry, 1036 static void snd_emu10k1x_proc_reg_write(struct snd_info_entry *entry, 1037 1037 struct snd_info_buffer *buffer) 1038 1038 { … … 1045 1045 continue; 1046 1046 1047 if ((reg < 0x49) && (reg >= 0) && (val <= 0xffffffff) 1048 && (channel_id >= 0) && (channel_id <= 2) ) 1047 if ((reg < 0x49) /* && (reg >= 0) && (val <= 0xffffffff) && (channel_id >= 0) DAZ */ && (channel_id <= 2) ) 1049 1048 snd_emu10k1x_ptr_write(emu, reg, channel_id, val); 1050 1049 }
Note:
See TracChangeset
for help on using the changeset viewer.