Lines Matching refs:ctl

106 	int card, ctl, err;  in find_controls()  local
151 for (ctl = 0; ctl < card_data->num_ctls; ctl++) { in find_controls()
158 ctl_data->elem = ctl; in find_controls()
160 ctl); in find_controls()
174 snd_ctl_elem_list_get_id(card_data->ctls, ctl, in find_controls()
226 static int wait_for_event(struct ctl_data *ctl, int timeout) in wait_for_event() argument
237 err = poll(&(ctl->card->pollfd), 1, timeout); in wait_for_event()
240 ctl->name, strerror(errno), errno); in wait_for_event()
247 err = snd_ctl_poll_descriptors_revents(ctl->card->handle, in wait_for_event()
248 &(ctl->card->pollfd), in wait_for_event()
252 ctl->name, err); in wait_for_event()
257 ctl->name); in wait_for_event()
266 err = snd_ctl_read(ctl->card->handle, event); in wait_for_event()
269 ctl->name, err); in wait_for_event()
279 if (ev_id != snd_ctl_elem_info_get_numid(ctl->info)) { in wait_for_event()
287 ctl->name); in wait_for_event()
295 static bool ctl_value_index_valid(struct ctl_data *ctl, in ctl_value_index_valid() argument
302 switch (snd_ctl_elem_info_get_type(ctl->info)) { in ctl_value_index_valid()
305 ctl->name, index); in ctl_value_index_valid()
316 ctl->name, index, int_val); in ctl_value_index_valid()
324 if (int_val < snd_ctl_elem_info_get_min(ctl->info)) { in ctl_value_index_valid()
326 ctl->name, index, int_val, in ctl_value_index_valid()
327 snd_ctl_elem_info_get_min(ctl->info)); in ctl_value_index_valid()
331 if (int_val > snd_ctl_elem_info_get_max(ctl->info)) { in ctl_value_index_valid()
333 ctl->name, index, int_val, in ctl_value_index_valid()
334 snd_ctl_elem_info_get_max(ctl->info)); in ctl_value_index_valid()
339 if (snd_ctl_elem_info_get_step(ctl->info) && in ctl_value_index_valid()
340 (int_val - snd_ctl_elem_info_get_min(ctl->info) % in ctl_value_index_valid()
341 snd_ctl_elem_info_get_step(ctl->info))) { in ctl_value_index_valid()
343 ctl->name, index, int_val, in ctl_value_index_valid()
344 snd_ctl_elem_info_get_step(ctl->info), in ctl_value_index_valid()
345 snd_ctl_elem_info_get_min(ctl->info)); in ctl_value_index_valid()
353 if (int64_val < snd_ctl_elem_info_get_min64(ctl->info)) { in ctl_value_index_valid()
355 ctl->name, index, int64_val, in ctl_value_index_valid()
356 snd_ctl_elem_info_get_min64(ctl->info)); in ctl_value_index_valid()
360 if (int64_val > snd_ctl_elem_info_get_max64(ctl->info)) { in ctl_value_index_valid()
362 ctl->name, index, int64_val, in ctl_value_index_valid()
363 snd_ctl_elem_info_get_max(ctl->info)); in ctl_value_index_valid()
368 if (snd_ctl_elem_info_get_step64(ctl->info) && in ctl_value_index_valid()
369 (int64_val - snd_ctl_elem_info_get_min64(ctl->info)) % in ctl_value_index_valid()
370 snd_ctl_elem_info_get_step64(ctl->info)) { in ctl_value_index_valid()
372 ctl->name, index, int64_val, in ctl_value_index_valid()
373 snd_ctl_elem_info_get_step64(ctl->info), in ctl_value_index_valid()
374 snd_ctl_elem_info_get_min64(ctl->info)); in ctl_value_index_valid()
384 ctl->name, index, int_val); in ctl_value_index_valid()
388 if (int_val >= snd_ctl_elem_info_get_items(ctl->info)) { in ctl_value_index_valid()
390 ctl->name, index, int_val, in ctl_value_index_valid()
391 snd_ctl_elem_info_get_items(ctl->info)); in ctl_value_index_valid()
408 static bool ctl_value_valid(struct ctl_data *ctl, snd_ctl_elem_value_t *val) in ctl_value_valid() argument
413 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) in ctl_value_valid()
414 if (!ctl_value_index_valid(ctl, val, i)) in ctl_value_valid()
424 static void test_ctl_get_value(struct ctl_data *ctl) in test_ctl_get_value() argument
429 if (snd_ctl_elem_info_is_inactive(ctl->info)) { in test_ctl_get_value()
430 ksft_print_msg("%s is inactive\n", ctl->name); in test_ctl_get_value()
432 ctl->card->card, ctl->elem); in test_ctl_get_value()
437 if (!snd_ctl_elem_info_is_readable(ctl->info)) { in test_ctl_get_value()
438 ksft_print_msg("%s is not readable\n", ctl->name); in test_ctl_get_value()
440 ctl->card->card, ctl->elem); in test_ctl_get_value()
444 err = snd_ctl_elem_read(ctl->card->handle, ctl->def_val); in test_ctl_get_value()
451 if (!ctl_value_valid(ctl, ctl->def_val)) in test_ctl_get_value()
456 ctl->card->card, ctl->elem); in test_ctl_get_value()
469 static void test_ctl_name(struct ctl_data *ctl) in test_ctl_name() argument
475 if (strend(ctl->name, " Switch")) { in test_ctl_name()
476 if (snd_ctl_elem_info_get_type(ctl->info) != SND_CTL_ELEM_TYPE_BOOLEAN) { in test_ctl_name()
478 ctl->card->card, ctl->elem, ctl->name); in test_ctl_name()
484 if (snd_ctl_elem_info_get_type(ctl->info) == SND_CTL_ELEM_TYPE_BOOLEAN && in test_ctl_name()
485 snd_ctl_elem_info_is_writable(ctl->info)) { in test_ctl_name()
486 if (!strend(ctl->name, " Switch")) { in test_ctl_name()
488 ctl->card->card, ctl->elem, ctl->name); in test_ctl_name()
494 ctl->card->card, ctl->elem); in test_ctl_name()
497 static bool show_mismatch(struct ctl_data *ctl, int index, in show_mismatch() argument
510 switch (snd_ctl_elem_info_get_type(ctl->info)) { in show_mismatch()
547 bool is_volatile = snd_ctl_elem_info_is_volatile(ctl->info); in show_mismatch()
549 ctl->name, index, expected_int, read_int, is_volatile); in show_mismatch()
562 static int write_and_verify(struct ctl_data *ctl, in write_and_verify() argument
588 if (snd_ctl_elem_info_is_readable(ctl->info)) { in write_and_verify()
589 snd_ctl_elem_value_set_id(initial_val, ctl->id); in write_and_verify()
591 err = snd_ctl_elem_read(ctl->card->handle, initial_val); in write_and_verify()
603 err = snd_ctl_elem_write(ctl->card->handle, w_val); in write_and_verify()
611 if (!snd_ctl_elem_info_is_readable(ctl->info)) in write_and_verify()
614 snd_ctl_elem_value_set_id(read_val, ctl->id); in write_and_verify()
616 err = snd_ctl_elem_read(ctl->card->handle, read_val); in write_and_verify()
630 if (!snd_ctl_elem_info_is_volatile(ctl->info)) { in write_and_verify()
631 err = wait_for_event(ctl, 0); in write_and_verify()
635 ctl->name); in write_and_verify()
636 ctl->event_missing++; in write_and_verify()
641 ctl->name); in write_and_verify()
642 ctl->event_spurious++; in write_and_verify()
656 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) in write_and_verify()
657 if (show_mismatch(ctl, i, read_val, expected_val)) in write_and_verify()
662 ctl->name); in write_and_verify()
671 static void test_ctl_write_default(struct ctl_data *ctl) in test_ctl_write_default() argument
676 if (snd_ctl_elem_info_is_inactive(ctl->info)) { in test_ctl_write_default()
677 ksft_print_msg("%s is inactive\n", ctl->name); in test_ctl_write_default()
679 ctl->card->card, ctl->elem); in test_ctl_write_default()
683 if (!snd_ctl_elem_info_is_writable(ctl->info)) { in test_ctl_write_default()
684 ksft_print_msg("%s is not writeable\n", ctl->name); in test_ctl_write_default()
686 ctl->card->card, ctl->elem); in test_ctl_write_default()
691 if (!snd_ctl_elem_info_is_readable(ctl->info)) { in test_ctl_write_default()
692 ksft_print_msg("%s couldn't read default\n", ctl->name); in test_ctl_write_default()
694 ctl->card->card, ctl->elem); in test_ctl_write_default()
698 err = write_and_verify(ctl, ctl->def_val, NULL); in test_ctl_write_default()
701 ctl->card->card, ctl->elem); in test_ctl_write_default()
704 static bool test_ctl_write_valid_boolean(struct ctl_data *ctl) in test_ctl_write_valid_boolean() argument
711 snd_ctl_elem_value_set_id(val, ctl->id); in test_ctl_write_valid_boolean()
713 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_valid_boolean()
716 err = write_and_verify(ctl, val, NULL); in test_ctl_write_valid_boolean()
725 static bool test_ctl_write_valid_integer(struct ctl_data *ctl) in test_ctl_write_valid_integer() argument
734 snd_ctl_elem_value_set_id(val, ctl->id); in test_ctl_write_valid_integer()
736 step = snd_ctl_elem_info_get_step(ctl->info); in test_ctl_write_valid_integer()
740 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_valid_integer()
741 for (j = snd_ctl_elem_info_get_min(ctl->info); in test_ctl_write_valid_integer()
742 j <= snd_ctl_elem_info_get_max(ctl->info); j += step) { in test_ctl_write_valid_integer()
745 err = write_and_verify(ctl, val, NULL); in test_ctl_write_valid_integer()
755 static bool test_ctl_write_valid_integer64(struct ctl_data *ctl) in test_ctl_write_valid_integer64() argument
763 snd_ctl_elem_value_set_id(val, ctl->id); in test_ctl_write_valid_integer64()
765 step = snd_ctl_elem_info_get_step64(ctl->info); in test_ctl_write_valid_integer64()
769 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_valid_integer64()
770 for (j = snd_ctl_elem_info_get_min64(ctl->info); in test_ctl_write_valid_integer64()
771 j <= snd_ctl_elem_info_get_max64(ctl->info); j += step) { in test_ctl_write_valid_integer64()
774 err = write_and_verify(ctl, val, NULL); in test_ctl_write_valid_integer64()
783 static bool test_ctl_write_valid_enumerated(struct ctl_data *ctl) in test_ctl_write_valid_enumerated() argument
790 snd_ctl_elem_value_set_id(val, ctl->id); in test_ctl_write_valid_enumerated()
792 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_valid_enumerated()
793 for (j = 0; j < snd_ctl_elem_info_get_items(ctl->info); j++) { in test_ctl_write_valid_enumerated()
795 err = write_and_verify(ctl, val, NULL); in test_ctl_write_valid_enumerated()
804 static void test_ctl_write_valid(struct ctl_data *ctl) in test_ctl_write_valid() argument
810 if (snd_ctl_elem_info_is_inactive(ctl->info)) { in test_ctl_write_valid()
811 ksft_print_msg("%s is inactive\n", ctl->name); in test_ctl_write_valid()
813 ctl->card->card, ctl->elem); in test_ctl_write_valid()
817 if (!snd_ctl_elem_info_is_writable(ctl->info)) { in test_ctl_write_valid()
818 ksft_print_msg("%s is not writeable\n", ctl->name); in test_ctl_write_valid()
820 ctl->card->card, ctl->elem); in test_ctl_write_valid()
824 switch (snd_ctl_elem_info_get_type(ctl->info)) { in test_ctl_write_valid()
826 pass = test_ctl_write_valid_boolean(ctl); in test_ctl_write_valid()
830 pass = test_ctl_write_valid_integer(ctl); in test_ctl_write_valid()
834 pass = test_ctl_write_valid_integer64(ctl); in test_ctl_write_valid()
838 pass = test_ctl_write_valid_enumerated(ctl); in test_ctl_write_valid()
844 ctl->card->card, ctl->elem); in test_ctl_write_valid()
849 err = write_and_verify(ctl, ctl->def_val, NULL); in test_ctl_write_valid()
854 ctl->card->card, ctl->elem); in test_ctl_write_valid()
857 static bool test_ctl_write_invalid_value(struct ctl_data *ctl, in test_ctl_write_invalid_value() argument
864 err = snd_ctl_elem_write(ctl->card->handle, val); in test_ctl_write_invalid_value()
869 err = snd_ctl_elem_read(ctl->card->handle, val); in test_ctl_write_invalid_value()
872 ctl->name, snd_strerror(err)); in test_ctl_write_invalid_value()
876 return !ctl_value_valid(ctl, val); in test_ctl_write_invalid_value()
879 static bool test_ctl_write_invalid_boolean(struct ctl_data *ctl) in test_ctl_write_invalid_boolean() argument
887 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_invalid_boolean()
888 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_boolean()
891 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_boolean()
898 static bool test_ctl_write_invalid_integer(struct ctl_data *ctl) in test_ctl_write_invalid_integer() argument
905 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_invalid_integer()
906 if (snd_ctl_elem_info_get_min(ctl->info) != LONG_MIN) { in test_ctl_write_invalid_integer()
908 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer()
910 snd_ctl_elem_info_get_min(ctl->info) - 1); in test_ctl_write_invalid_integer()
912 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer()
916 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer()
919 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer()
923 if (snd_ctl_elem_info_get_max(ctl->info) != LONG_MAX) { in test_ctl_write_invalid_integer()
925 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer()
927 snd_ctl_elem_info_get_max(ctl->info) + 1); in test_ctl_write_invalid_integer()
929 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer()
933 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer()
936 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer()
944 static bool test_ctl_write_invalid_integer64(struct ctl_data *ctl) in test_ctl_write_invalid_integer64() argument
951 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_invalid_integer64()
952 if (snd_ctl_elem_info_get_min64(ctl->info) != LLONG_MIN) { in test_ctl_write_invalid_integer64()
954 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer64()
956 snd_ctl_elem_info_get_min64(ctl->info) - 1); in test_ctl_write_invalid_integer64()
958 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer64()
962 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer64()
965 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer64()
969 if (snd_ctl_elem_info_get_max64(ctl->info) != LLONG_MAX) { in test_ctl_write_invalid_integer64()
971 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer64()
973 snd_ctl_elem_info_get_max64(ctl->info) + 1); in test_ctl_write_invalid_integer64()
975 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer64()
979 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_integer64()
982 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_integer64()
990 static bool test_ctl_write_invalid_enumerated(struct ctl_data *ctl) in test_ctl_write_invalid_enumerated() argument
998 snd_ctl_elem_value_set_id(val, ctl->id); in test_ctl_write_invalid_enumerated()
1000 for (i = 0; i < snd_ctl_elem_info_get_count(ctl->info); i++) { in test_ctl_write_invalid_enumerated()
1002 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_enumerated()
1004 snd_ctl_elem_info_get_items(ctl->info)); in test_ctl_write_invalid_enumerated()
1006 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_enumerated()
1010 snd_ctl_elem_value_copy(val, ctl->def_val); in test_ctl_write_invalid_enumerated()
1013 if (test_ctl_write_invalid_value(ctl, val)) in test_ctl_write_invalid_enumerated()
1022 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 err = write_and_verify(ctl, ctl->def_val, NULL); in test_ctl_write_invalid()
1072 ctl->card->card, ctl->elem); in test_ctl_write_invalid()
1075 static void test_ctl_event_missing(struct ctl_data *ctl) in test_ctl_event_missing() argument
1077 ksft_test_result(!ctl->event_missing, "event_missing.%d.%d\n", in test_ctl_event_missing()
1078 ctl->card->card, ctl->elem); in test_ctl_event_missing()
1081 static void test_ctl_event_spurious(struct ctl_data *ctl) in test_ctl_event_spurious() argument
1083 ksft_test_result(!ctl->event_spurious, "event_spurious.%d.%d\n", in test_ctl_event_spurious()
1084 ctl->card->card, ctl->elem); in test_ctl_event_spurious()
1089 struct ctl_data *ctl; in main() local
1097 for (ctl = ctl_list; ctl != NULL; ctl = ctl->next) { in main()
1102 test_ctl_get_value(ctl); in main()
1103 test_ctl_name(ctl); in main()
1104 test_ctl_write_default(ctl); in main()
1105 test_ctl_write_valid(ctl); in main()
1106 test_ctl_write_invalid(ctl); in main()
1107 test_ctl_event_missing(ctl); in main()
1108 test_ctl_event_spurious(ctl); in main()