All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Knecht <markknecht@gmail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: Giuliano Pochini <pochini@shiny.it>,
	Patrick Shirkey <pshirkey@boosthardware.com>,
	alsa-devel@lists.sourceforge.net
Subject: Re: Maintaining sound card at a specific frequency
Date: Tue, 18 Jan 2005 10:04:55 -0800	[thread overview]
Message-ID: <5bdc1c8b0501181004455c8e36@mail.gmail.com> (raw)
In-Reply-To: <s5hy8eqvdan.wl@alsa2.suse.de>

Takashi,
   Since I'm on a PlanetCCRMA box I don't even have Alsa source code.
It would be quite difficult for me to test this in any short time.

   Possibly someone else out there with an HDSP box or card can do this?

Sorry,
Mark


On Tue, 18 Jan 2005 18:48:32 +0100, Takashi Iwai <tiwai@suse.de> wrote:
> At Tue, 18 Jan 2005 18:08:50 +0100,
> I wrote:
> >
> > If this works like you want, only the locking is missing...
> 
> The attached is an experimental patch to add this feature.
> You can lock system clock via
> 
>         amixer cset iface=PCM,name="System Clock Source Locking" on
> 
> It's untested, as usual.
> 
> 
> Takashi
> 
> 
> Index: alsa-kernel/pci/rme9652/hdsp.c
> ===================================================================
> RCS file: /suse/tiwai/cvs/alsa/alsa-kernel/pci/rme9652/hdsp.c,v
> retrieving revision 1.81
> diff -u -r1.81 hdsp.c
> --- alsa-kernel/pci/rme9652/hdsp.c      14 Jan 2005 19:50:48 -0000      1.81
> +++ alsa-kernel/pci/rme9652/hdsp.c      18 Jan 2005 17:44:54 -0000
> @@ -450,6 +450,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;
> @@ -2159,7 +2160,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;
> @@ -2168,6 +2169,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, \
> @@ -3129,6 +3158,13 @@
>  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),
> +{
> +       .iface = SNDRV_CTL_ELEM_IFACE_PCM,
> +       .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),
> @@ -3360,6 +3396,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");
> 
> @@ -3882,21 +3919,19 @@
>                 spin_unlock_irq(&hdsp->lock);
>                 return 0;
> 
> -       } else {
> -               spin_unlock_irq(&hdsp->lock);
>         }
> 
>         /* how to make sure that the rate matches an externally-set one ?
>          */
> 
> -       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);
> @@ -4318,13 +4353,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,
> 
> 
>


-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

  reply	other threads:[~2005-01-18 18:04 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-16 21:05 Maintaining sound card at a specific frequency Mark Knecht
2005-01-17  5:14 ` Patrick Shirkey
2005-01-18 15:50   ` Giuliano Pochini
2005-01-18 16:48     ` Takashi Iwai
2005-01-18 17:01       ` Mark Knecht
2005-01-18 17:08         ` Takashi Iwai
2005-01-18 17:12           ` Mark Knecht
2005-01-18 17:15             ` Takashi Iwai
2005-01-18 17:43               ` Mark Knecht
2005-01-18 17:48           ` Takashi Iwai
2005-01-18 18:04             ` Mark Knecht [this message]
2005-01-18 17:31       ` Giuliano Pochini
2005-01-18 17:40         ` Takashi Iwai
2005-01-19 10:07           ` Giuliano Pochini
2005-01-18 17:45         ` Mark Knecht
2005-01-18 19:51           ` Takashi Iwai
2005-01-18 21:22             ` Mark Knecht
2005-01-18 21:30           ` Lee Revell
2005-01-18 23:16             ` Mark Knecht
2005-01-19 19:59   ` Mark Knecht
2005-01-19  9:07 ` Clemens Ladisch
2005-01-19 10:14   ` Takashi Iwai
2005-01-19 19:49   ` Mark Knecht
2005-01-19 21:09     ` Russ Pridemore
2005-01-19 23:08       ` Mark Knecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5bdc1c8b0501181004455c8e36@mail.gmail.com \
    --to=markknecht@gmail.com \
    --cc=alsa-devel@lists.sourceforge.net \
    --cc=pochini@shiny.it \
    --cc=pshirkey@boosthardware.com \
    --cc=tiwai@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.