* hdsp oss emulation and sync @ 2005-06-28 16:33 Peter Plessas 2005-06-29 9:29 ` Takashi Iwai 0 siblings, 1 reply; 7+ messages in thread From: Peter Plessas @ 2005-06-28 16:33 UTC (permalink / raw) To: alsa-devel Dear List, I posted this before but i think to the alsa-users list. I have an HDSP (Pci or CardBus) with a Multiface, which shows the following behavior: When the card works as a sync slave to other digital equipment, the OSS emulation does not work. I tested this on more than one machine. I can't give you any error messages by now, since i don't have the card with me (but do have time to write this). There are simply some cases where i rely on the emulation. Until today i just found one more posting about this problem in the alsa-list archives, but that remained unsolved till today. Any ideas? regards, Peter ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-28 16:33 hdsp oss emulation and sync Peter Plessas @ 2005-06-29 9:29 ` Takashi Iwai 2005-06-29 10:30 ` Peter Plessas 0 siblings, 1 reply; 7+ messages in thread From: Takashi Iwai @ 2005-06-29 9:29 UTC (permalink / raw) To: Peter Plessas; +Cc: alsa-devel At Tue, 28 Jun 2005 18:33:00 +0200, Peter Plessas wrote: > > Dear List, > > I posted this before but i think to the alsa-users list. > > I have an HDSP (Pci or CardBus) with a Multiface, which shows the > following behavior: > > When the card works as a sync slave to other digital equipment, the OSS > emulation does not work. How doesn't it work? More detailed explanation please? > I tested this on more than one machine. > I can't give you any error messages by now, since i don't have the card > with me (but do have time to write this). Well, it's hard to debug without error details... Takashi ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-29 9:29 ` Takashi Iwai @ 2005-06-29 10:30 ` Peter Plessas 2005-06-29 10:39 ` Takashi Iwai 0 siblings, 1 reply; 7+ messages in thread From: Peter Plessas @ 2005-06-29 10:30 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel Hi Takashi, List, Takashi Iwai wrote: > How doesn't it work? More detailed explanation please? I have the card synced as slave to my mixer. I get the following error messages when starting f.e. pd or rezound: (all software also tested as root) pd -verbose -oss device 1: tried /dev/midi READ/WRITE; returned 5 opened 1 MIDI input device(s) and 1 MIDI output device(s). input channels = 2, output channels = 2 opened /dev/dsp for reading and writing error: OSS: SNDCTL_DSP_CHANNELS failed /dev/dsp opened audio output on /dev/dsp; got 0 channels opened /dev/dsp for reading only error: OSS: SNDCTL_DSP_CHANNELS failed /dev/dsp opened audio input device /dev/dsp; got 0 channels rezound Error occurred while initializing audio output method 'oss' -- virtual void COSSSoundPlayer::initialize() -- error setting the format -- Operation not permitted In both cases dmesg gives: Jun 29 12:31:49 bigh kernel: No AutoSync source for requested rate But my rate in pd and of the external source is both 44.1k As i switch the card to sync master, these apps do fine. > Well, it's hard to debug without error details... Where else can i look for meaningful messages? Thanks, Peter ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-29 10:30 ` Peter Plessas @ 2005-06-29 10:39 ` Takashi Iwai 2005-06-30 20:22 ` Peter Plessas 2005-07-14 8:16 ` peter plessas 0 siblings, 2 replies; 7+ messages in thread From: Takashi Iwai @ 2005-06-29 10:39 UTC (permalink / raw) To: Peter Plessas; +Cc: alsa-devel [-- Attachment #1: Type: text/plain, Size: 1681 bytes --] At Wed, 29 Jun 2005 12:30:02 +0200, Peter Plessas wrote: > > Hi Takashi, List, > > Takashi Iwai wrote: > > > How doesn't it work? More detailed explanation please? > > I have the card synced as slave to my mixer. > I get the following error messages when starting f.e. pd or rezound: > > (all software also tested as root) > > pd -verbose -oss > device 1: tried /dev/midi READ/WRITE; returned 5 > opened 1 MIDI input device(s) and 1 MIDI output device(s). > input channels = 2, output channels = 2 > opened /dev/dsp for reading and writing > > error: OSS: SNDCTL_DSP_CHANNELS failed /dev/dsp > opened audio output on /dev/dsp; got 0 channels > opened /dev/dsp for reading only > > error: OSS: SNDCTL_DSP_CHANNELS failed /dev/dsp > opened audio input device /dev/dsp; got 0 channels > > > rezound > Error occurred while initializing audio output method 'oss' -- virtual > void COSSSoundPlayer::initialize() -- error setting the format -- > Operation not permitted > > In both cases dmesg gives: > > Jun 29 12:31:49 bigh kernel: No AutoSync source for requested rate > > But my rate in pd and of the external source is both 44.1k OSS always opens the device with the default sample rate 8000HZ. It looks like the hdsp driver doesn't accept this rate in the external sync mode. > > As i switch the card to sync master, these apps do fine. > > > Well, it's hard to debug without error details... > > Where else can i look for meaningful messages? So far, so good. Could you try the patch below? This will add "Sample Clock Source Locking" mixer element. Enabling this switch may fix your problem above. You can turn this on via alsamixer or amixer. Takashi [-- Attachment #2: Type: text/plain, Size: 4559 bytes --] Index: alsa-kernel/pci/rme9652/hdsp.c =================================================================== RCS file: /home/iwai/cvs/alsa/alsa-kernel/pci/rme9652/hdsp.c,v retrieving revision 1.90 diff -u -r1.90 hdsp.c --- alsa-kernel/pci/rme9652/hdsp.c 30 May 2005 17:19:18 -0000 1.90 +++ alsa-kernel/pci/rme9652/hdsp.c 29 Jun 2005 10:38:38 -0000 @@ -445,6 +445,7 @@ u32 control2_register; /* cached value */ u32 creg_spdif; u32 creg_spdif_stream; + int clock_source_locked; char *card_name; /* digiface/multiface */ HDSP_IO_Type io_type; /* ditto, but for code use */ unsigned short firmware_rev; @@ -2086,7 +2087,7 @@ if (val > 6) val = 6; } spin_lock_irq(&hdsp->lock); - if (val != hdsp_clock_source(hdsp)) { + if (val != hdsp_clock_source(hdsp) && ! hdsp->clock_source_locked) { change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0; } else { change = 0; @@ -2095,6 +2096,34 @@ return change; } +static int snd_hdsp_info_clock_source_lock(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 1; + return 0; +} + +static int snd_hdsp_get_clock_source_lock(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = hdsp->clock_source_locked; + return 0; +} + +static int snd_hdsp_put_clock_source_lock(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = snd_kcontrol_chip(kcontrol); + int change; + + change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked; + if (change) + hdsp->clock_source_locked = ucontrol->value.integer.value[0]; + return change; +} + #define HDSP_DA_GAIN(xname, xindex) \ { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ .name = xname, \ @@ -3117,6 +3146,15 @@ HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0), /* 'Sample Clock Source' complies with the alsa control naming scheme */ HDSP_CLOCK_SOURCE("Sample Clock Source", 0), +{ + /* FIXME: should be PCM or MIXER? */ + /* .iface = SNDRV_CTL_ELEM_IFACE_PCM, */ + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Sample Clock Source Locking", + .info = snd_hdsp_info_clock_source_lock, + .get = snd_hdsp_get_clock_source_lock, + .put = snd_hdsp_put_clock_source_lock, +}, HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0), HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0), HDSP_AUTOSYNC_REF("AutoSync Reference", 0), @@ -3349,6 +3387,7 @@ snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode); snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate); + snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No"); snd_iprintf(buffer, "\n"); @@ -3853,13 +3892,14 @@ */ spin_lock_irq(&hdsp->lock); - if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { - spin_unlock_irq(&hdsp->lock); - _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); - return err; - } else { - spin_unlock_irq(&hdsp->lock); + if (! hdsp->clock_source_locked) { + if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { + spin_unlock_irq(&hdsp->lock); + _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); + return err; + } } + spin_unlock_irq(&hdsp->lock); if ((err = hdsp_set_interrupt_interval(hdsp, params_period_size(params))) < 0) { _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); @@ -4284,13 +4324,17 @@ snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); - if (hdsp->io_type == H9632) { - runtime->hw.channels_min = hdsp->qs_out_channels; - runtime->hw.channels_max = hdsp->ss_out_channels; + if (hdsp->clock_source_locked) { + runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate; + } else if (hdsp->io_type == H9632) { runtime->hw.rate_max = 192000; runtime->hw.rates = SNDRV_PCM_RATE_KNOT; snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); } + if (hdsp->io_type == H9632) { + runtime->hw.channels_min = hdsp->qs_out_channels; + runtime->hw.channels_max = hdsp->ss_out_channels; + } snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, snd_hdsp_hw_rule_out_channels, hdsp, ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-29 10:39 ` Takashi Iwai @ 2005-06-30 20:22 ` Peter Plessas 2005-07-04 16:16 ` Takashi Iwai 2005-07-14 8:16 ` peter plessas 1 sibling, 1 reply; 7+ messages in thread From: Peter Plessas @ 2005-06-30 20:22 UTC (permalink / raw) Cc: alsa-devel Hi Takashi&List, Yes, great! This works! What are the drawbacks of using the "Sample Clock Source Locking"? I can see that i can't change the hdsp from autosync to master after i enabled the locking. But the OSS emulation just works fine!! Thanks again, Peter Takashi Iwai wrote: > Could you try the patch below? This will add "Sample Clock Source > Locking" mixer element. Enabling this switch may fix your problem > above. You can turn this on via alsamixer or amixer. > > > Takashi > > > ------------------------------------------------------------------------ > > Index: alsa-kernel/pci/rme9652/hdsp.c > =================================================================== > . . . ------------------------------------------------------- SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from IBM. Find simple to follow Roadmaps, straightforward articles, informative Webcasts and more! Get everything you need to get up to speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-30 20:22 ` Peter Plessas @ 2005-07-04 16:16 ` Takashi Iwai 0 siblings, 0 replies; 7+ messages in thread From: Takashi Iwai @ 2005-07-04 16:16 UTC (permalink / raw) To: Peter Plessas; +Cc: alsa-devel [-- Attachment #1: Type: text/plain, Size: 690 bytes --] At Thu, 30 Jun 2005 22:22:28 +0200, Peter Plessas wrote: > > Hi Takashi&List, > > Yes, great! This works! What are the drawbacks of using the "Sample > Clock Source Locking"? If the locking is set, only the current sample rate is available for the PCMs opened later on. But this restriction doesn't matter since the oss-emulation does the sample rate conversion by itself. Also, setting this switch to off is exactly the same behavior as before. > I can see that i can't change the hdsp from > autosync to master after i enabled the locking. It's intentional in the last patch. I got rid of this behavior from the patch below, a newer version. I'll commit this to CVS. Takashi [-- Attachment #2: Type: text/plain, Size: 4276 bytes --] Index: alsa-kernel/pci/rme9652/hdsp.c =================================================================== RCS file: /home/iwai/cvs/alsa/alsa-kernel/pci/rme9652/hdsp.c,v retrieving revision 1.90 diff -u -r1.90 hdsp.c --- alsa-kernel/pci/rme9652/hdsp.c 30 May 2005 17:19:18 -0000 1.90 +++ alsa-kernel/pci/rme9652/hdsp.c 4 Jul 2005 16:14:27 -0000 @@ -445,6 +445,7 @@ u32 control2_register; /* cached value */ u32 creg_spdif; u32 creg_spdif_stream; + int clock_source_locked; char *card_name; /* digiface/multiface */ HDSP_IO_Type io_type; /* ditto, but for code use */ unsigned short firmware_rev; @@ -2095,6 +2096,34 @@ return change; } +static int snd_hdsp_info_clock_source_lock(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; + uinfo->count = 1; + uinfo->value.integer.min = 0; + uinfo->value.integer.max = 1; + return 0; +} + +static int snd_hdsp_get_clock_source_lock(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = hdsp->clock_source_locked; + return 0; +} + +static int snd_hdsp_put_clock_source_lock(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = snd_kcontrol_chip(kcontrol); + int change; + + change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked; + if (change) + hdsp->clock_source_locked = ucontrol->value.integer.value[0]; + return change; +} + #define HDSP_DA_GAIN(xname, xindex) \ { .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ .name = xname, \ @@ -3117,6 +3146,15 @@ HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0), /* 'Sample Clock Source' complies with the alsa control naming scheme */ HDSP_CLOCK_SOURCE("Sample Clock Source", 0), +{ + /* FIXME: should be PCM or MIXER? */ + /* .iface = SNDRV_CTL_ELEM_IFACE_PCM, */ + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Sample Clock Source Locking", + .info = snd_hdsp_info_clock_source_lock, + .get = snd_hdsp_get_clock_source_lock, + .put = snd_hdsp_put_clock_source_lock, +}, HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0), HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0), HDSP_AUTOSYNC_REF("AutoSync Reference", 0), @@ -3349,6 +3387,7 @@ snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode); snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate); + snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No"); snd_iprintf(buffer, "\n"); @@ -3853,13 +3892,14 @@ */ spin_lock_irq(&hdsp->lock); - if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { - spin_unlock_irq(&hdsp->lock); - _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); - return err; - } else { - spin_unlock_irq(&hdsp->lock); + if (! hdsp->clock_source_locked) { + if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { + spin_unlock_irq(&hdsp->lock); + _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); + return err; + } } + spin_unlock_irq(&hdsp->lock); if ((err = hdsp_set_interrupt_interval(hdsp, params_period_size(params))) < 0) { _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); @@ -4284,13 +4324,17 @@ snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24); snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes); - if (hdsp->io_type == H9632) { - runtime->hw.channels_min = hdsp->qs_out_channels; - runtime->hw.channels_max = hdsp->ss_out_channels; + if (hdsp->clock_source_locked) { + runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate; + } else if (hdsp->io_type == H9632) { runtime->hw.rate_max = 192000; runtime->hw.rates = SNDRV_PCM_RATE_KNOT; snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hdsp_hw_constraints_9632_sample_rates); } + if (hdsp->io_type == H9632) { + runtime->hw.channels_min = hdsp->qs_out_channels; + runtime->hw.channels_max = hdsp->ss_out_channels; + } snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, snd_hdsp_hw_rule_out_channels, hdsp, ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: hdsp oss emulation and sync 2005-06-29 10:39 ` Takashi Iwai 2005-06-30 20:22 ` Peter Plessas @ 2005-07-14 8:16 ` peter plessas 1 sibling, 0 replies; 7+ messages in thread From: peter plessas @ 2005-07-14 8:16 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel Hi, Takashi, List, Thanks for the second patch, i have no hdsp with me for another 6 weeks, but i'll be happy to try it once i return home. Thanks! Peter P. ------------------------------------------------------- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2005-07-14 8:16 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-06-28 16:33 hdsp oss emulation and sync Peter Plessas 2005-06-29 9:29 ` Takashi Iwai 2005-06-29 10:30 ` Peter Plessas 2005-06-29 10:39 ` Takashi Iwai 2005-06-30 20:22 ` Peter Plessas 2005-07-04 16:16 ` Takashi Iwai 2005-07-14 8:16 ` peter plessas
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.