Lines Matching defs:ctl
62 int card, ctl, err;
112 for (ctl = 0; ctl < card_data->num_ctls; ctl++) {
119 ctl_data->elem = ctl;
121 ctl);
135 snd_ctl_elem_list_get_id(card_data->ctls, ctl,
187 static int wait_for_event(struct ctl_data *ctl, int timeout)
198 err = poll(&(ctl->card->pollfd), 1, timeout);
201 ctl->name, strerror(errno), errno);
208 err = snd_ctl_poll_descriptors_revents(ctl->card->handle,
209 &(ctl->card->pollfd),
213 ctl->name, err);
218 ctl->name);
227 err = snd_ctl_read(ctl->card->handle, event);
230 ctl->name, err);
240 if (ev_id != snd_ctl_elem_info_get_numid(ctl->info)) {
241 ksft_print_msg("Event for unexpected ctl %s\n",
248 ctl->name);
256 static bool ctl_value_index_valid(struct ctl_data *ctl,
263 switch (snd_ctl_elem_info_get_type(ctl->info)) {
266 ctl->name, index);
277 ctl->name, index, int_val);
285 if (int_val < snd_ctl_elem_info_get_min(ctl->info)) {
287 ctl->name, index, int_val,
288 snd_ctl_elem_info_get_min(ctl->info));
292 if (int_val > snd_ctl_elem_info_get_max(ctl->info)) {
294 ctl->name, index, int_val,
295 snd_ctl_elem_info_get_max(ctl->info));
300 if (snd_ctl_elem_info_get_step(ctl->info) &&
301 (int_val - snd_ctl_elem_info_get_min(ctl->info) %
302 snd_ctl_elem_info_get_step(ctl->info))) {
304 ctl->name, index, int_val,
305 snd_ctl_elem_info_get_step(ctl->info),
306 snd_ctl_elem_info_get_min(ctl->info));
314 if (int64_val < snd_ctl_elem_info_get_min64(ctl->info)) {
316 ctl->name, index, int64_val,
317 snd_ctl_elem_info_get_min64(ctl->info));
321 if (int64_val > snd_ctl_elem_info_get_max64(ctl->info)) {
323 ctl->name, index, int64_val,
324 snd_ctl_elem_info_get_max(ctl->info));
329 if (snd_ctl_elem_info_get_step64(ctl->info) &&
330 (int64_val - snd_ctl_elem_info_get_min64(ctl->info)) %
331 snd_ctl_elem_info_get_step64(ctl->info)) {
333 ctl->name, index, int64_val,
334 snd_ctl_elem_info_get_step64(ctl->info),
335 snd_ctl_elem_info_get_min64(ctl->info));
345 ctl->name, index, int_val);
349 if (int_val >= snd_ctl_elem_info_get_items(ctl->info)) {
351 ctl->name, index, int_val,
352 snd_ctl_elem_info_get_items(ctl->info));
369 static bool ctl_value_valid(struct ctl_data *ctl, snd_ctl_elem_value_t *val)
374 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++)
375 if (!ctl_value_index_valid(ctl, val, i))
385 static void test_ctl_get_value(struct ctl_data *ctl)
390 if (snd_ctl_elem_info_is_inactive(ctl->info)) {
391 ksft_print_msg("%s is inactive\n", ctl->name);
393 ctl->card->card, ctl->elem);
398 if (!snd_ctl_elem_info_is_readable(ctl->info)) {
399 ksft_print_msg("%s is not readable\n", ctl->name);
401 ctl->card->card, ctl->elem);
405 err = snd_ctl_elem_read(ctl->card->handle, ctl->def_val);
412 if (!ctl_value_valid(ctl, ctl->def_val))
417 ctl->card->card, ctl->elem);
430 static void test_ctl_name(struct ctl_data *ctl)
434 ksft_print_msg("%d.%d %s\n", ctl->card->card, ctl->elem,
435 ctl->name);
438 if (strend(ctl->name, " Switch")) {
439 if (snd_ctl_elem_info_get_type(ctl->info) != SND_CTL_ELEM_TYPE_BOOLEAN) {
441 ctl->card->card, ctl->elem, ctl->name);
447 if (snd_ctl_elem_info_get_type(ctl->info) == SND_CTL_ELEM_TYPE_BOOLEAN &&
448 snd_ctl_elem_info_is_writable(ctl->info)) {
449 if (!strend(ctl->name, " Switch")) {
451 ctl->card->card, ctl->elem, ctl->name);
457 ctl->card->card, ctl->elem);
460 static void show_values(struct ctl_data *ctl, snd_ctl_elem_value_t *orig_val,
466 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
467 switch (snd_ctl_elem_info_get_type(ctl->info)) {
497 ctl->name, i, orig_int, read_int,
498 snd_ctl_elem_info_is_volatile(ctl->info));
502 static bool show_mismatch(struct ctl_data *ctl, int index,
515 switch (snd_ctl_elem_info_get_type(ctl->info)) {
552 bool is_volatile = snd_ctl_elem_info_is_volatile(ctl->info);
554 ctl->name, index, expected_int, read_int, is_volatile);
567 static int write_and_verify(struct ctl_data *ctl,
593 if (snd_ctl_elem_info_is_readable(ctl->info)) {
594 snd_ctl_elem_value_set_id(initial_val, ctl->id);
596 err = snd_ctl_elem_read(ctl->card->handle, initial_val);
608 err = snd_ctl_elem_write(ctl->card->handle, w_val);
616 if (!snd_ctl_elem_info_is_readable(ctl->info))
619 snd_ctl_elem_value_set_id(read_val, ctl->id);
621 err = snd_ctl_elem_read(ctl->card->handle, read_val);
635 if (!snd_ctl_elem_info_is_volatile(ctl->info)) {
636 err = wait_for_event(ctl, 0);
640 ctl->name);
641 show_values(ctl, initial_val, read_val);
642 ctl->event_missing++;
647 ctl->name);
648 show_values(ctl, initial_val, read_val);
649 ctl->event_spurious++;
663 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++)
664 if (show_mismatch(ctl, i, read_val, expected_val))
669 ctl->name);
678 static void test_ctl_write_default(struct ctl_data *ctl)
683 if (snd_ctl_elem_info_is_inactive(ctl->info)) {
684 ksft_print_msg("%s is inactive\n", ctl->name);
686 ctl->card->card, ctl->elem);
690 if (!snd_ctl_elem_info_is_writable(ctl->info)) {
691 ksft_print_msg("%s is not writeable\n", ctl->name);
693 ctl->card->card, ctl->elem);
698 if (!snd_ctl_elem_info_is_readable(ctl->info)) {
699 ksft_print_msg("%s couldn't read default\n", ctl->name);
701 ctl->card->card, ctl->elem);
705 err = write_and_verify(ctl, ctl->def_val, NULL);
708 ctl->card->card, ctl->elem);
711 static bool test_ctl_write_valid_boolean(struct ctl_data *ctl)
718 snd_ctl_elem_value_set_id(val, ctl->id);
720 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
723 err = write_and_verify(ctl, val, NULL);
732 static bool test_ctl_write_valid_integer(struct ctl_data *ctl)
741 snd_ctl_elem_value_set_id(val, ctl->id);
743 step = snd_ctl_elem_info_get_step(ctl->info);
747 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
748 for (j = snd_ctl_elem_info_get_min(ctl->info);
749 j <= snd_ctl_elem_info_get_max(ctl->info); j += step) {
752 err = write_and_verify(ctl, val, NULL);
762 static bool test_ctl_write_valid_integer64(struct ctl_data *ctl)
770 snd_ctl_elem_value_set_id(val, ctl->id);
772 step = snd_ctl_elem_info_get_step64(ctl->info);
776 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
777 for (j = snd_ctl_elem_info_get_min64(ctl->info);
778 j <= snd_ctl_elem_info_get_max64(ctl->info); j += step) {
781 err = write_and_verify(ctl, val, NULL);
790 static bool test_ctl_write_valid_enumerated(struct ctl_data *ctl)
797 snd_ctl_elem_value_set_id(val, ctl->id);
799 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
800 for (j = 0; j < snd_ctl_elem_info_get_items(ctl->info); j++) {
802 err = write_and_verify(ctl, val, NULL);
811 static void test_ctl_write_valid(struct ctl_data *ctl)
816 if (snd_ctl_elem_info_is_inactive(ctl->info)) {
817 ksft_print_msg("%s is inactive\n", ctl->name);
819 ctl->card->card, ctl->elem);
823 if (!snd_ctl_elem_info_is_writable(ctl->info)) {
824 ksft_print_msg("%s is not writeable\n", ctl->name);
826 ctl->card->card, ctl->elem);
830 switch (snd_ctl_elem_info_get_type(ctl->info)) {
832 pass = test_ctl_write_valid_boolean(ctl);
836 pass = test_ctl_write_valid_integer(ctl);
840 pass = test_ctl_write_valid_integer64(ctl);
844 pass = test_ctl_write_valid_enumerated(ctl);
850 ctl->card->card, ctl->elem);
855 write_and_verify(ctl, ctl->def_val, NULL);
858 ctl->card->card, ctl->elem);
861 static bool test_ctl_write_invalid_value(struct ctl_data *ctl,
867 err = snd_ctl_elem_write(ctl->card->handle, val);
872 err = snd_ctl_elem_read(ctl->card->handle, val);
875 ctl->name, snd_strerror(err));
879 return !ctl_value_valid(ctl, val);
882 static bool test_ctl_write_invalid_boolean(struct ctl_data *ctl)
889 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
890 snd_ctl_elem_value_copy(val, ctl->def_val);
893 if (test_ctl_write_invalid_value(ctl, val))
900 static bool test_ctl_write_invalid_integer(struct ctl_data *ctl)
907 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
908 if (snd_ctl_elem_info_get_min(ctl->info) != LONG_MIN) {
910 snd_ctl_elem_value_copy(val, ctl->def_val);
912 snd_ctl_elem_info_get_min(ctl->info) - 1);
914 if (test_ctl_write_invalid_value(ctl, val))
918 snd_ctl_elem_value_copy(val, ctl->def_val);
921 if (test_ctl_write_invalid_value(ctl, val))
925 if (snd_ctl_elem_info_get_max(ctl->info) != LONG_MAX) {
927 snd_ctl_elem_value_copy(val, ctl->def_val);
929 snd_ctl_elem_info_get_max(ctl->info) + 1);
931 if (test_ctl_write_invalid_value(ctl, val))
935 snd_ctl_elem_value_copy(val, ctl->def_val);
938 if (test_ctl_write_invalid_value(ctl, val))
946 static bool test_ctl_write_invalid_integer64(struct ctl_data *ctl)
953 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
954 if (snd_ctl_elem_info_get_min64(ctl->info) != LLONG_MIN) {
956 snd_ctl_elem_value_copy(val, ctl->def_val);
958 snd_ctl_elem_info_get_min64(ctl->info) - 1);
960 if (test_ctl_write_invalid_value(ctl, val))
964 snd_ctl_elem_value_copy(val, ctl->def_val);
967 if (test_ctl_write_invalid_value(ctl, val))
971 if (snd_ctl_elem_info_get_max64(ctl->info) != LLONG_MAX) {
973 snd_ctl_elem_value_copy(val, ctl->def_val);
975 snd_ctl_elem_info_get_max64(ctl->info) + 1);
977 if (test_ctl_write_invalid_value(ctl, val))
981 snd_ctl_elem_value_copy(val, ctl->def_val);
984 if (test_ctl_write_invalid_value(ctl, val))
992 static bool test_ctl_write_invalid_enumerated(struct ctl_data *ctl)
999 snd_ctl_elem_value_set_id(val, ctl->id);
1001 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) {
1003 snd_ctl_elem_value_copy(val, ctl->def_val);
1005 snd_ctl_elem_info_get_items(ctl->info));
1007 if (test_ctl_write_invalid_value(ctl, val))
1011 snd_ctl_elem_value_copy(val, ctl->def_val);
1014 if (test_ctl_write_invalid_value(ctl, val))
1023 static void test_ctl_write_invalid(struct ctl_data *ctl)
1028 if (snd_ctl_elem_info_is_inactive(ctl->info)) {
1029 ksft_print_msg("%s is inactive\n", ctl->name);
1031 ctl->card->card, ctl->elem);
1035 if (!snd_ctl_elem_info_is_writable(ctl->info)) {
1036 ksft_print_msg("%s is not writeable\n", ctl->name);
1038 ctl->card->card, ctl->elem);
1042 switch (snd_ctl_elem_info_get_type(ctl->info)) {
1044 pass = test_ctl_write_invalid_boolean(ctl);
1048 pass = test_ctl_write_invalid_integer(ctl);
1052 pass = test_ctl_write_invalid_integer64(ctl);
1056 pass = test_ctl_write_invalid_enumerated(ctl);
1062 ctl->card->card, ctl->elem);
1067 write_and_verify(ctl, ctl->def_val, NULL);
1070 ctl->card->card, ctl->elem);
1073 static void test_ctl_event_missing(struct ctl_data *ctl)
1075 ksft_test_result(!ctl->event_missing, "event_missing.%d.%d\n",
1076 ctl->card->card, ctl->elem);
1079 static void test_ctl_event_spurious(struct ctl_data *ctl)
1081 ksft_test_result(!ctl->event_spurious, "event_spurious.%d.%d\n",
1082 ctl->card->card, ctl->elem);
1087 struct ctl_data *ctl;
1095 for (ctl = ctl_list; ctl != NULL; ctl = ctl->next) {
1100 test_ctl_get_value(ctl);
1101 test_ctl_name(ctl);
1102 test_ctl_write_default(ctl);
1103 test_ctl_write_valid(ctl);
1104 test_ctl_write_invalid(ctl);
1105 test_ctl_event_missing(ctl);
1106 test_ctl_event_spurious(ctl);