aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/emu10k1/emumixer.c2
-rw-r--r--sound/pci/emu10k1/emuproc.c21
-rw-r--r--sound/pci/emu10k1/p16v.c16
3 files changed, 30 insertions, 9 deletions
diff --git a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c
index d0b296587cc0..b544c2582663 100644
--- a/sound/pci/emu10k1/emumixer.c
+++ b/sound/pci/emu10k1/emumixer.c
@@ -935,10 +935,12 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu)
935 return -ENOMEM; 935 return -ENOMEM;
936 if ((err = snd_ctl_add(card, kctl))) 936 if ((err = snd_ctl_add(card, kctl)))
937 return err; 937 return err;
938#if 0
938 if ((kctl = snd_ctl_new1(&snd_audigy_spdif_output_rate, emu)) == NULL) 939 if ((kctl = snd_ctl_new1(&snd_audigy_spdif_output_rate, emu)) == NULL)
939 return -ENOMEM; 940 return -ENOMEM;
940 if ((err = snd_ctl_add(card, kctl))) 941 if ((err = snd_ctl_add(card, kctl)))
941 return err; 942 return err;
943#endif
942 } else if (! emu->card_capabilities->ecard) { 944 } else if (! emu->card_capabilities->ecard) {
943 /* sb live! */ 945 /* sb live! */
944 if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL) 946 if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)
diff --git a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c
index 187a4e60a5fe..356fb7104253 100644
--- a/sound/pci/emu10k1/emuproc.c
+++ b/sound/pci/emu10k1/emuproc.c
@@ -30,6 +30,7 @@
30#include <linux/init.h> 30#include <linux/init.h>
31#include <sound/core.h> 31#include <sound/core.h>
32#include <sound/emu10k1.h> 32#include <sound/emu10k1.h>
33#include "p16v.h"
33 34
34static void snd_emu10k1_proc_spdif_status(emu10k1_t * emu, 35static void snd_emu10k1_proc_spdif_status(emu10k1_t * emu,
35 snd_info_buffer_t * buffer, 36 snd_info_buffer_t * buffer,
@@ -62,6 +63,7 @@ static void snd_emu10k1_proc_spdif_status(emu10k1_t * emu,
62 63
63 if (rate_reg > 0) { 64 if (rate_reg > 0) {
64 rate = snd_emu10k1_ptr_read(emu, rate_reg, 0); 65 rate = snd_emu10k1_ptr_read(emu, rate_reg, 0);
66 snd_iprintf(buffer, "S/PDIF Valid : %s\n", rate & SRCS_SPDIFVALID ? "on" : "off");
65 snd_iprintf(buffer, "S/PDIF Locked : %s\n", rate & SRCS_SPDIFLOCKED ? "on" : "off"); 67 snd_iprintf(buffer, "S/PDIF Locked : %s\n", rate & SRCS_SPDIFLOCKED ? "on" : "off");
66 snd_iprintf(buffer, "Rate Locked : %s\n", rate & SRCS_RATELOCKED ? "on" : "off"); 68 snd_iprintf(buffer, "Rate Locked : %s\n", rate & SRCS_RATELOCKED ? "on" : "off");
67 /* From ((Rate * 48000 ) / 262144); */ 69 /* From ((Rate * 48000 ) / 262144); */
@@ -244,6 +246,21 @@ static void snd_emu10k1_proc_spdif_read(snd_info_entry_t *entry,
244#endif 246#endif
245} 247}
246 248
249static void snd_emu10k1_proc_rates_read(snd_info_entry_t *entry,
250 snd_info_buffer_t * buffer)
251{
252 static int samplerate[8] = { 44100, 48000, 96000, 192000, 4, 5, 6, 7 };
253 emu10k1_t *emu = entry->private_data;
254 unsigned int val, tmp, n;
255 val = snd_emu10k1_ptr20_read(emu, CAPTURE_RATE_STATUS, 0);
256 tmp = (val >> 16) & 0x8;
257 for (n=0;n<4;n++) {
258 tmp = val >> (16 + (n*4));
259 if (tmp & 0x8) snd_iprintf(buffer, "Channel %d: Rate=%d\n", n, samplerate[tmp & 0x7]);
260 else snd_iprintf(buffer, "Channel %d: No input\n", n);
261 }
262}
263
247static void snd_emu10k1_proc_acode_read(snd_info_entry_t *entry, 264static void snd_emu10k1_proc_acode_read(snd_info_entry_t *entry,
248 snd_info_buffer_t * buffer) 265 snd_info_buffer_t * buffer)
249{ 266{
@@ -540,6 +557,10 @@ int __devinit snd_emu10k1_proc_init(emu10k1_t * emu)
540 if (! snd_card_proc_new(emu->card, "spdif-in", &entry)) 557 if (! snd_card_proc_new(emu->card, "spdif-in", &entry))
541 snd_info_set_text_ops(entry, emu, 2048, snd_emu10k1_proc_spdif_read); 558 snd_info_set_text_ops(entry, emu, 2048, snd_emu10k1_proc_spdif_read);
542 } 559 }
560 if (emu->card_capabilities->ca0151_chip) {
561 if (! snd_card_proc_new(emu->card, "capture-rates", &entry))
562 snd_info_set_text_ops(entry, emu, 2048, snd_emu10k1_proc_rates_read);
563 }
543 564
544 if (! snd_card_proc_new(emu->card, "voices", &entry)) 565 if (! snd_card_proc_new(emu->card, "voices", &entry))
545 snd_info_set_text_ops(entry, emu, 2048, snd_emu10k1_proc_voices_read); 566 snd_info_set_text_ops(entry, emu, 2048, snd_emu10k1_proc_voices_read);
diff --git a/sound/pci/emu10k1/p16v.c b/sound/pci/emu10k1/p16v.c
index dd6ce9927e10..8dd87838fb22 100644
--- a/sound/pci/emu10k1/p16v.c
+++ b/sound/pci/emu10k1/p16v.c
@@ -119,8 +119,8 @@ static snd_pcm_hardware_t snd_p16v_playback_hw = {
119 SNDRV_PCM_INFO_BLOCK_TRANSFER | 119 SNDRV_PCM_INFO_BLOCK_TRANSFER |
120 SNDRV_PCM_INFO_MMAP_VALID), 120 SNDRV_PCM_INFO_MMAP_VALID),
121 .formats = SNDRV_PCM_FMTBIT_S32_LE, /* Only supports 24-bit samples padded to 32 bits. */ 121 .formats = SNDRV_PCM_FMTBIT_S32_LE, /* Only supports 24-bit samples padded to 32 bits. */
122 .rates = SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_48000 , 122 .rates = SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100,
123 .rate_min = 48000, 123 .rate_min = 44100,
124 .rate_max = 192000, 124 .rate_max = 192000,
125 .channels_min = 8, 125 .channels_min = 8,
126 .channels_max = 8, 126 .channels_max = 8,
@@ -324,19 +324,17 @@ static int snd_p16v_pcm_prepare_playback(snd_pcm_substream_t *substream)
324 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel); 324 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel);
325 switch (runtime->rate) { 325 switch (runtime->rate) {
326 case 44100: 326 case 44100:
327 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe000) | 0x8000); /* FIXME: This will change the capture rate as well! */ 327 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x8080);
328 break;
329 case 48000:
330 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe000) | 0x0000); /* FIXME: This will change the capture rate as well! */
331 break; 328 break;
332 case 96000: 329 case 96000:
333 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe000) | 0x4000); /* FIXME: This will change the capture rate as well! */ 330 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x4040);
334 break; 331 break;
335 case 192000: 332 case 192000:
336 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe000) | 0x2000); /* FIXME: This will change the capture rate as well! */ 333 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x2020);
337 break; 334 break;
335 case 48000:
338 default: 336 default:
339 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, 0x0000); /* FIXME: This will change the capture rate as well! */ 337 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x0000);
340 break; 338 break;
341 } 339 }
342 /* FIXME: Check emu->buffer.size before actually writing to it. */ 340 /* FIXME: Check emu->buffer.size before actually writing to it. */