]> git.alsa-project.org Git - alsa-tools.git/commitdiff
sound - fix .iface field of mixer control elements
authorClemens Ladisch <clemens@ladisch.de>
Fri, 29 Jul 2005 14:33:00 +0000 (14:33 +0000)
committerClemens Ladisch <clemens@ladisch.de>
Fri, 29 Jul 2005 14:33:00 +0000 (14:33 +0000)
This patch changes .iface to SNDRV_CTL_ELEM_IFACE_MIXER whre _PCM or
_HWDEP was used in controls that are not associated with a specific PCM
(sub)stream or hwdep device, and changes some controls that got
inconsitent .iface values due to copy+paste errors.  Furthermore, it
makes sure that all control that do use _PCM or _HWDEP use the correct
number in the .device field.

hdspconf/src/HC_Aeb.cxx
hdspconf/src/HC_BreakoutCable.cxx
hdspconf/src/HC_ClockSource.cxx
hdspconf/src/HC_InputLevel.cxx
hdspconf/src/HC_OutputLevel.cxx
hdspconf/src/HC_Phones.cxx
hdspconf/src/HC_PrefSyncRef.cxx
hdspconf/src/HC_SpdifIn.cxx
hdspconf/src/HC_SpdifOut.cxx
hdspmixer/src/HDSPMixerCard.cxx
hdspmixer/src/HDSPMixerWindow.cxx

index ba7b76a8f784e3b2880756028b2d091472c775c6..d7a98d6883d683e1932da909447e64e58255ea15 100644 (file)
@@ -32,10 +32,7 @@ static void setAebStatus(char *ctl_name, int val, int card_index)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, ctl_name);
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_integer(ctl, 0, val);
@@ -44,8 +41,13 @@ static void setAebStatus(char *ctl_name, int val, int card_index)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index 229f9b82641c916f4840cde1dad7d4644f64acf4..89d3ec80e11493a542843cf84ccaad8d19e125fd 100644 (file)
@@ -32,10 +32,7 @@ static void setXlrStatus(char *ctl_name, int val, int card_index)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, ctl_name);
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_integer(ctl, 0, val);
@@ -44,8 +41,13 @@ static void setXlrStatus(char *ctl_name, int val, int card_index)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index f442c0ed7c179badb072231260ee01819590f63f..4bb978a6bf5c49a76559c5eac546be63b648ccb9 100644 (file)
@@ -60,10 +60,7 @@ void clock_source_cb(Fl_Widget *w, void *arg)
        snd_ctl_elem_value_alloca(&ctl);
        snd_ctl_elem_id_alloca(&id);
        snd_ctl_elem_id_set_name(id, "Sample Clock Source");
-       snd_ctl_elem_id_set_numid(id, 0);
-       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
-       snd_ctl_elem_id_set_device(id, 0);
-       snd_ctl_elem_id_set_subdevice(id, 0);
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
        snd_ctl_elem_id_set_index(id, 0);
        snd_ctl_elem_value_set_id(ctl, id);
        snd_ctl_elem_value_set_enumerated(ctl, 0, src);
@@ -72,9 +69,14 @@ void clock_source_cb(Fl_Widget *w, void *arg)
                return;
        } 
        if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-               fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-               return;
-       } 
+               snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
+               snd_ctl_elem_value_set_id(ctl, id);
+               if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+                       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+                       snd_ctl_close(handle);
+                       return;
+               }
+       }
        snd_ctl_close(handle);
 }
 
index deef8dcc78875dd025f2515368d7c1d18846178c..c3f088ae92d76fc1cbb07d3a16bc84fe7f45b0f7 100644 (file)
@@ -43,10 +43,7 @@ void input_level_cb(Fl_Widget *w, void *arg)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "AD Gain");
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
@@ -55,8 +52,13 @@ void input_level_cb(Fl_Widget *w, void *arg)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index f42e71ac5ca7694b1a5dfe54b0713366f6528f91..abcc95fdb35d9e3957387e483454da5276801b57 100644 (file)
@@ -43,10 +43,7 @@ void output_level_cb(Fl_Widget *w, void *arg)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "DA Gain");
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
@@ -55,8 +52,13 @@ void output_level_cb(Fl_Widget *w, void *arg)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index fb1c60030cdc94de868e3810a5f87dc1c41b3403..8bc230a12d9d5b993e29c2bcb3ced556847d650e 100644 (file)
@@ -43,10 +43,7 @@ void phones_cb(Fl_Widget *w, void *arg)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "Phones Gain");
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
@@ -55,8 +52,13 @@ void phones_cb(Fl_Widget *w, void *arg)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index 3fd636afc2c3cfb57bdc23abc36881afd4b53750..a3c7096a4b0a79d64930de116739295bebd448a3 100644 (file)
@@ -49,10 +49,7 @@ void pref_sync_ref_cb(Fl_Widget *w, void *arg)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "Preferred Sync Reference");
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_enumerated(ctl, 0, ref);
@@ -61,8 +58,13 @@ void pref_sync_ref_cb(Fl_Widget *w, void *arg)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name); 
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name); 
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index 211af0580d305edaf2f2156fd09fef791a84bc64..204b82cf8c2bda42fce59044e8b648de61650567 100644 (file)
@@ -45,10 +45,7 @@ void spdif_in_cb(Fl_Widget *w, void *arg)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "IEC958 Input Connector");
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_enumerated(ctl, 0, in);
@@ -57,8 +54,13 @@ void spdif_in_cb(Fl_Widget *w, void *arg)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index 8ba484a7c051fed10864169d969cbaa10ecc48e7..71c7bfe7d66415cc6c1eda51a5ef5e022b6c7614 100644 (file)
@@ -32,10 +32,7 @@ static void setSpdifBit(char *ctl_name, int val, int card_index)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, ctl_name);
-    snd_ctl_elem_id_set_numid(id, 0);
-    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
+    snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
     snd_ctl_elem_value_set_integer(ctl, 0, val);
@@ -44,8 +41,13 @@ static void setSpdifBit(char *ctl_name, int val, int card_index)
        return;
     }
     if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
-       fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
-       return;
+       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(ctl, id);
+       if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+           fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+           snd_ctl_close(handle);
+           return;
+       }
     }
     snd_ctl_close(handle);
 }
index ea8573d9d2841b6dda05708bdd6e3bbd1ed606a8..faed6fb125d692b32e0b3650aa7692f1ef98fe95 100644 (file)
@@ -155,13 +155,14 @@ int HDSPMixerCard::getAutosyncSpeed()
     }
     
     snd_ctl_elem_id_set_name(elemid, "System Sample Rate");
-    snd_ctl_elem_id_set_numid(elemid, 16);
-    snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
-    snd_ctl_elem_id_set_device(elemid, 0);
-    snd_ctl_elem_id_set_subdevice(elemid, 0);
+    snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(elemid, 0);
     snd_ctl_elem_value_set_id(elemval, elemid);
-    snd_ctl_elem_read(handle, elemval);
+    if (snd_ctl_elem_read(handle, elemval) < 0) {
+       snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
+       snd_ctl_elem_value_set_id(elemval, elemid);
+       snd_ctl_elem_read(handle, elemval);
+    }
     rate = snd_ctl_elem_value_get_integer(elemval, 0);
 
     snd_ctl_close(handle);
@@ -187,13 +188,14 @@ int HDSPMixerCard::getSpeed()
        return -1; 
     }
     snd_ctl_elem_id_set_name(elemid, "Sample Clock Source");
-    snd_ctl_elem_id_set_numid(elemid, 11);
-    snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_PCM);
-    snd_ctl_elem_id_set_device(elemid, 0);
-    snd_ctl_elem_id_set_subdevice(elemid, 0);
+    snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_MIXER);
     snd_ctl_elem_id_set_index(elemid, 0);
     snd_ctl_elem_value_set_id(elemval, elemid);
-    snd_ctl_elem_read(handle, elemval);
+    if (snd_ctl_elem_read(handle, elemval) < 0) {
+       snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_PCM);
+       snd_ctl_elem_value_set_id(elemval, elemid);
+       snd_ctl_elem_read(handle, elemval);
+    }
     val = snd_ctl_elem_value_get_enumerated(elemval, 0);
     snd_ctl_close(handle);
     switch (val) {
index d92d57ca649aa29033d34025a808eea80cefb99e..cab0d5e03cc8949175d6acf477b93eb10d0649ef 100644 (file)
@@ -918,10 +918,8 @@ void HDSPMixerWindow::setGain(int in, int out, int value)
     snd_ctl_elem_value_alloca(&ctl);
     snd_ctl_elem_id_alloca(&id);
     snd_ctl_elem_id_set_name(id, "Mixer");
-    snd_ctl_elem_id_set_numid(id, 0);
     snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
     snd_ctl_elem_id_set_device(id, 0);
-    snd_ctl_elem_id_set_subdevice(id, 0);
     snd_ctl_elem_id_set_index(id, 0);
     snd_ctl_elem_value_set_id(ctl, id);
 
@@ -966,10 +964,8 @@ void HDSPMixerWindow::setMixer(int idx, int src, int dst)
        snd_ctl_elem_value_alloca(&ctl);
        snd_ctl_elem_id_alloca(&id);
        snd_ctl_elem_id_set_name(id, "Mixer");
-       snd_ctl_elem_id_set_numid(id, 0);
        snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
        snd_ctl_elem_id_set_device(id, 0);
-       snd_ctl_elem_id_set_subdevice(id, 0);
        snd_ctl_elem_id_set_index(id, 0);
        snd_ctl_elem_value_set_id(ctl, id);
     
@@ -1009,6 +1005,7 @@ muted:
        snd_ctl_elem_value_set_integer(ctl, 2, (int)left_val);
        if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
            fprintf(stderr, "Alsa error: %s\n", snd_strerror(err));
+           snd_ctl_close(handle);
            return;
        }
        snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]);
@@ -1016,6 +1013,7 @@ muted:
        snd_ctl_elem_value_set_integer(ctl, 2, (int)right_val);
        if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
            fprintf(stderr, "Alsa error: %s\n", snd_strerror(err));
+           snd_ctl_close(handle);
            return;
        }
        snd_ctl_close(handle);