Update of /cvsroot/alsa/alsa-kernel/drivers/vx
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31124/drivers/vx

Modified Files:
        vx_core.c vx_mixer.c vx_uer.c 
Log Message:
added 'Clock Mode' control to choose the clock source.


Index: vx_core.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/drivers/vx/vx_core.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- vx_core.c   9 Feb 2004 19:39:37 -0000       1.7
+++ vx_core.c   24 May 2004 17:12:43 -0000      1.8
@@ -572,6 +572,7 @@
        if (cold_reset) {
                chip->audio_source_target = chip->audio_source;
                chip->clock_source = INTERNAL_QUARTZ;
+               chip->clock_mode = VX_CLOCK_MODE_AUTO;
                chip->freq = 48000;
                chip->uer_detected = VX_UER_MODE_NOT_PRESENT;
                chip->uer_bits = SNDRV_PCM_DEFAULT_CON_SPDIF;
@@ -606,6 +607,7 @@
        vx_core_t *chip = snd_magic_cast(vx_core_t, entry->private_data, return);
        static char *audio_src_vxp[] = { "Line", "Mic", "Digital" };
        static char *audio_src_vx2[] = { "Analog", "Analog", "Digital" };
+       static char *clock_mode[] = { "Auto", "Internal", "External" };
        static char *clock_src[] = { "Internal", "External" };
        static char *uer_type[] = { "Consumer", "Professional", "Not Present" };
        
@@ -629,6 +631,7 @@
        snd_iprintf(buffer, "Input Source: %s\n", vx_is_pcmcia(chip) ?
                    audio_src_vxp[chip->audio_source] :
                    audio_src_vx2[chip->audio_source]);
+       snd_iprintf(buffer, "Clock Mode: %s\n", clock_mode[chip->clock_mode]);
        snd_iprintf(buffer, "Clock Source: %s\n", clock_src[chip->clock_source]);
        snd_iprintf(buffer, "Frequency: %d\n", chip->freq);
        snd_iprintf(buffer, "Detected Frequency: %d\n", chip->freq_detected);

Index: vx_mixer.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/drivers/vx/vx_mixer.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- vx_mixer.c  11 Feb 2004 14:33:16 -0000      1.2
+++ vx_mixer.c  24 May 2004 17:12:43 -0000      1.3
@@ -524,6 +524,54 @@
 };
 
 /*
+ * clock mode selection
+ */
+static int vx_clock_mode_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
+{
+       static char *texts[3] = {
+               "Auto", "Internal", "External"
+       };
+
+       uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+       uinfo->count = 1;
+       uinfo->value.enumerated.items = 3;
+       if (uinfo->value.enumerated.item > 2)
+               uinfo->value.enumerated.item = 2;
+       strcpy(uinfo->value.enumerated.name,
+              texts[uinfo->value.enumerated.item]);
+       return 0;
+}
+
+static int vx_clock_mode_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+       vx_core_t *chip = snd_kcontrol_chip(kcontrol);
+       ucontrol->value.enumerated.item[0] = chip->clock_mode;
+       return 0;
+}
+
+static int vx_clock_mode_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+       vx_core_t *chip = snd_kcontrol_chip(kcontrol);
+       down(&chip->mixer_mutex);
+       if (chip->clock_mode != ucontrol->value.enumerated.item[0]) {
+               chip->clock_mode = ucontrol->value.enumerated.item[0];
+               vx_set_clock(chip, chip->freq);
+               up(&chip->mixer_mutex);
+               return 1;
+       }
+       up(&chip->mixer_mutex);
+       return 0;
+}
+
+static snd_kcontrol_new_t vx_control_clock_mode = {
+       .iface =        SNDRV_CTL_ELEM_IFACE_MIXER,
+       .name =         "Clock Mode",
+       .info =         vx_clock_mode_info,
+       .get =          vx_clock_mode_get,
+       .put =          vx_clock_mode_put,
+};
+
+/*
  * Audio Gain
  */
 static int vx_audio_gain_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
@@ -913,6 +961,9 @@
        /* Audio source */
        if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_audio_src, chip))) < 0)
                return err;
+       /* clock mode */
+       if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_clock_mode, chip))) < 0)
+               return err;
        /* IEC958 controls */
        if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_iec958_mask, chip))) < 0)
                return err;

Index: vx_uer.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/drivers/vx/vx_uer.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- vx_uer.c    23 May 2003 16:00:44 -0000      1.1
+++ vx_uer.c    24 May 2004 17:12:43 -0000      1.2
@@ -263,17 +263,17 @@
        /* change the audio source if possible */
        vx_sync_audio_source(chip);
 
-       switch (chip->audio_source) {
-       case VX_AUDIO_SRC_DIGITAL:
+       if (chip->clock_mode == VX_CLOCK_MODE_EXTERNAL ||
+           (chip->clock_mode == VX_CLOCK_MODE_AUTO &&
+            chip->audio_source == VX_AUDIO_SRC_DIGITAL)) {
                if (chip->clock_source != UER_SYNC) {
                        vx_change_clock_source(chip, UER_SYNC);
                        mdelay(6);
                        src_changed = 1;
                }
-               if (chip->freq == freq)
-                       return 0;
-               break;
-       default:
+       } else if (chip->clock_mode == VX_CLOCK_MODE_INTERNAL ||
+                  (chip->clock_mode == VX_CLOCK_MODE_AUTO &&
+                   chip->audio_source != VX_AUDIO_SRC_DIGITAL)) {
                if (chip->clock_source != INTERNAL_QUARTZ) {
                        vx_change_clock_source(chip, INTERNAL_QUARTZ);
                        src_changed = 1;
@@ -283,8 +283,9 @@
                vx_set_internal_clock(chip, freq);
                if (src_changed)
                        vx_modify_board_inputs(chip);
-               break;
        }
+       if (chip->freq == freq)
+               return 0;
        chip->freq = freq;
        vx_modify_board_clock(chip, 1);
        return 0;



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to