Lines Matching full:ctl

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