Lines Matching refs:elem
217 int (*get_range)(snd_mixer_elem_t *elem, long *min, long *max);
218 int (*get)(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t c,
220 int (*set)(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t c,
227 int (*has_volume)(snd_mixer_elem_t *elem);
231 static int set_playback_dB(snd_mixer_elem_t *elem,
234 return snd_mixer_selem_set_playback_dB(elem, c, value, dir);
237 static int set_capture_dB(snd_mixer_elem_t *elem,
240 return snd_mixer_selem_set_capture_dB(elem, c, value, dir);
243 static int set_playback_raw_volume(snd_mixer_elem_t *elem,
247 return snd_mixer_selem_set_playback_volume(elem, c, value);
250 static int set_capture_raw_volume(snd_mixer_elem_t *elem,
254 return snd_mixer_selem_set_capture_volume(elem, c, value);
260 static int get_mapped_volume_range(snd_mixer_elem_t *elem ATTRIBUTE_UNUSED,
268 static int get_playback_mapped_volume(snd_mixer_elem_t *elem,
272 *value = (rint)(get_normalized_playback_volume(elem, c) * MAP_VOL_RES);
276 static int set_playback_mapped_volume(snd_mixer_elem_t *elem,
280 return set_normalized_playback_volume(elem, c,
284 static int get_capture_mapped_volume(snd_mixer_elem_t *elem,
288 *value = (rint)(get_normalized_capture_volume(elem, c) * MAP_VOL_RES);
292 static int set_capture_mapped_volume(snd_mixer_elem_t *elem,
296 return set_normalized_capture_volume(elem, c,
331 static int set_volume_simple(snd_mixer_elem_t *elem,
342 if (! vol_ops[dir].has_volume(elem))
372 if (vol_ops[dir].v[vol_type].get_range(elem, &pmin, &pmax) < 0)
378 if (vol_ops[dir].v[vol_type].get(elem, chn, &orig) < 0)
396 err = vol_ops[dir].v[vol_type].set(elem, chn, val, correct);
600 static int show_control(const char *space, snd_hctl_elem_t *elem,
613 if ((err = snd_hctl_elem_info(elem, info)) < 0) {
618 snd_hctl_elem_get_id(elem, id);
644 if ((err = snd_hctl_elem_info(elem, info)) < 0) {
659 if ((err = snd_hctl_elem_read(elem, control)) < 0) {
707 if ((err = snd_hctl_elem_tlv_read(elem, tlv, 4096)) < 0) {
723 snd_hctl_elem_t *elem;
737 for (elem = snd_hctl_first_elem(handle); elem; elem = snd_hctl_elem_next(elem)) {
738 if ((err = snd_hctl_elem_info(elem, info)) < 0) {
744 snd_hctl_elem_get_id(elem, id);
748 show_control(" ", elem, 1);
754 static void show_selem_volume(snd_mixer_elem_t *elem,
759 vol_ops[dir].v[VOL_RAW].get(elem, chn, &raw);
763 vol_ops[dir].v[std_vol_type].get(elem, chn, &val);
767 if (!vol_ops[dir].v[VOL_DB].get(elem, chn, &val)) {
781 snd_mixer_elem_t *elem;
783 elem = snd_mixer_find_selem(handle, id);
784 if (!elem) {
791 if (snd_mixer_selem_has_common_volume(elem)) {
793 if (snd_mixer_selem_has_playback_volume_joined(elem))
796 if (snd_mixer_selem_has_playback_volume(elem)) {
798 if (snd_mixer_selem_has_playback_volume_joined(elem))
801 if (snd_mixer_selem_has_capture_volume(elem)) {
803 if (snd_mixer_selem_has_capture_volume_joined(elem))
807 if (snd_mixer_selem_has_common_switch(elem)) {
809 if (snd_mixer_selem_has_playback_switch_joined(elem))
812 if (snd_mixer_selem_has_playback_switch(elem)) {
814 if (snd_mixer_selem_has_playback_switch_joined(elem))
817 if (snd_mixer_selem_has_capture_switch(elem)) {
819 if (snd_mixer_selem_has_capture_switch_joined(elem))
821 if (snd_mixer_selem_has_capture_switch_exclusive(elem))
825 if (snd_mixer_selem_is_enum_playback(elem)) {
827 } else if (snd_mixer_selem_is_enum_capture(elem)) {
829 } else if (snd_mixer_selem_is_enumerated(elem)) {
833 if (snd_mixer_selem_is_enumerated(elem)) {
841 items = snd_mixer_selem_get_enum_items(elem);
844 snd_mixer_selem_get_enum_item_name(elem, i, sizeof(itemname) - 1, itemname);
848 for (i = 0; !snd_mixer_selem_get_enum_item(elem, i, &idx); i++) {
849 snd_mixer_selem_get_enum_item_name(elem, idx, sizeof(itemname) - 1, itemname);
854 if (snd_mixer_selem_has_capture_switch_exclusive(elem))
856 snd_mixer_selem_get_capture_group(elem));
857 if (snd_mixer_selem_has_playback_volume(elem) ||
858 snd_mixer_selem_has_playback_switch(elem)) {
860 if (snd_mixer_selem_is_playback_mono(elem)) {
865 if (!snd_mixer_selem_has_playback_channel(elem, chn))
875 if (snd_mixer_selem_has_capture_volume(elem) ||
876 snd_mixer_selem_has_capture_switch(elem)) {
878 if (snd_mixer_selem_is_capture_mono(elem)) {
883 if (!snd_mixer_selem_has_capture_channel(elem, chn))
893 if (snd_mixer_selem_has_playback_volume(elem) ||
894 snd_mixer_selem_has_capture_volume(elem)) {
896 if (snd_mixer_selem_has_common_volume(elem)) {
897 snd_mixer_selem_get_playback_volume_range(elem, &pmin, &pmax);
898 snd_mixer_selem_get_capture_volume_range(elem, &cmin, &cmax);
901 if (snd_mixer_selem_has_playback_volume(elem)) {
902 snd_mixer_selem_get_playback_volume_range(elem, &pmin, &pmax);
905 if (snd_mixer_selem_has_capture_volume(elem)) {
906 snd_mixer_selem_get_capture_volume_range(elem, &cmin, &cmax);
912 pmono = snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_MONO) &&
913 (snd_mixer_selem_is_playback_mono(elem) ||
914 (!snd_mixer_selem_has_playback_volume(elem) &&
915 !snd_mixer_selem_has_playback_switch(elem)));
916 cmono = snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO) &&
917 (snd_mixer_selem_is_capture_mono(elem) ||
918 (!snd_mixer_selem_has_capture_volume(elem) &&
919 !snd_mixer_selem_has_capture_switch(elem)));
922 snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO),
923 snd_mixer_selem_is_capture_mono(elem),
924 snd_mixer_selem_has_capture_volume(elem),
925 snd_mixer_selem_has_capture_switch(elem));
932 if (snd_mixer_selem_has_common_volume(elem)) {
933 show_selem_volume(elem, SND_MIXER_SCHN_MONO, 0, pmin, pmax);
935 if (snd_mixer_selem_has_common_switch(elem)) {
936 snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_MONO, &psw);
940 if (pmono && snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_MONO)) {
946 if (!snd_mixer_selem_has_common_volume(elem)) {
947 if (snd_mixer_selem_has_playback_volume(elem)) {
950 show_selem_volume(elem, SND_MIXER_SCHN_MONO, 0, pmin, pmax);
953 if (!snd_mixer_selem_has_common_switch(elem)) {
954 if (snd_mixer_selem_has_playback_switch(elem)) {
957 snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_MONO, &psw);
962 if (cmono && snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO)) {
968 if (!snd_mixer_selem_has_common_volume(elem)) {
969 if (snd_mixer_selem_has_capture_volume(elem)) {
972 show_selem_volume(elem, SND_MIXER_SCHN_MONO, 1, cmin, cmax);
975 if (!snd_mixer_selem_has_common_switch(elem)) {
976 if (snd_mixer_selem_has_capture_switch(elem)) {
979 snd_mixer_selem_get_capture_switch(elem, SND_MIXER_SCHN_MONO, &csw);
988 if ((pmono || !snd_mixer_selem_has_playback_channel(elem, chn)) &&
989 (cmono || !snd_mixer_selem_has_capture_channel(elem, chn)))
992 if (!pmono && !cmono && snd_mixer_selem_has_common_volume(elem)) {
993 show_selem_volume(elem, chn, 0, pmin, pmax);
995 if (!pmono && !cmono && snd_mixer_selem_has_common_switch(elem)) {
996 snd_mixer_selem_get_playback_switch(elem, chn, &psw);
999 if (!pmono && snd_mixer_selem_has_playback_channel(elem, chn)) {
1001 if (!snd_mixer_selem_has_common_volume(elem)) {
1002 if (snd_mixer_selem_has_playback_volume(elem)) {
1005 show_selem_volume(elem, chn, 0, pmin, pmax);
1008 if (!snd_mixer_selem_has_common_switch(elem)) {
1009 if (snd_mixer_selem_has_playback_switch(elem)) {
1012 snd_mixer_selem_get_playback_switch(elem, chn, &psw);
1017 if (!cmono && snd_mixer_selem_has_capture_channel(elem, chn)) {
1019 if (!snd_mixer_selem_has_common_volume(elem)) {
1020 if (snd_mixer_selem_has_capture_volume(elem)) {
1023 show_selem_volume(elem, chn, 1, cmin, cmax);
1026 if (!snd_mixer_selem_has_common_switch(elem)) {
1027 if (snd_mixer_selem_has_capture_switch(elem)) {
1030 snd_mixer_selem_get_capture_switch(elem, chn, &csw);
1047 snd_mixer_elem_t *elem;
1070 for (elem = snd_mixer_first_elem(handle); elem; elem = snd_mixer_elem_next(elem)) {
1071 snd_mixer_selem_get_id(elem, sid);
1072 if (!(level & LEVEL_INACTIVE) && !snd_mixer_selem_is_active(elem))
1208 snd_hctl_elem_t *elem;
1217 elem = snd_hctl_find_elem(hctl, id);
1218 if (elem)
1219 show_control(" ", elem, LEVEL_BASIC | LEVEL_ID);
1279 static int get_enum_item_index(snd_mixer_elem_t *elem, char **ptrp)
1287 items = snd_mixer_selem_get_enum_items(elem);
1292 if (snd_mixer_selem_get_enum_item_name(elem, i, sizeof(name)-1, name) < 0)
1307 static int sset_enum(snd_mixer_elem_t *elem, unsigned int argc, char **argv)
1315 int ival = get_enum_item_index(elem, &ptr);
1318 if (snd_mixer_selem_set_enum_item(elem, item++, ival) >= 0)
1328 static int sset_channels(snd_mixer_elem_t *elem, unsigned int argc, char **argv)
1354 if ((dir & 1) && snd_mixer_selem_has_playback_channel(elem, chn)) {
1356 if (!strncmp(ptr, "mute", 4) && snd_mixer_selem_has_playback_switch(elem)) {
1357 snd_mixer_selem_get_playback_switch(elem, chn, &ival);
1358 if (snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "mute", 1, ival)) >= 0)
1360 } else if (!strncmp(ptr, "off", 3) && snd_mixer_selem_has_playback_switch(elem)) {
1361 snd_mixer_selem_get_playback_switch(elem, chn, &ival);
1362 if (snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "off", 1, ival)) >= 0)
1364 } else if (!strncmp(ptr, "unmute", 6) && snd_mixer_selem_has_playback_switch(elem)) {
1365 snd_mixer_selem_get_playback_switch(elem, chn, &ival);
1366 if (snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "unmute", 0, ival)) >= 0)
1368 } else if (!strncmp(ptr, "on", 2) && snd_mixer_selem_has_playback_switch(elem)) {
1369 snd_mixer_selem_get_playback_switch(elem, chn, &ival);
1370 if (snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "on", 0, ival)) >= 0)
1372 } else if (!strncmp(ptr, "toggle", 6) && snd_mixer_selem_has_playback_switch(elem)) {
1373 if (firstchn || !snd_mixer_selem_has_playback_switch_joined(elem)) {
1374 snd_mixer_selem_get_playback_switch(elem, chn, &ival);
1375 if (snd_mixer_selem_set_playback_switch(elem, chn, (ival ? 1 : 0) ^ 1) >= 0)
1380 if (set_volume_simple(elem, chn, &ptr, 0) >= 0)
1389 if ((dir & 2) && snd_mixer_selem_has_capture_channel(elem, chn)) {
1393 if (!strncmp(ptr, "cap", 3) && snd_mixer_selem_has_capture_switch(elem)) {
1394 snd_mixer_selem_get_capture_switch(elem, chn, &ival);
1395 if (snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "cap", 0, ival)) >= 0)
1397 } else if (!strncmp(ptr, "rec", 3) && snd_mixer_selem_has_capture_switch(elem)) {
1398 snd_mixer_selem_get_capture_switch(elem, chn, &ival);
1399 if (snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "rec", 0, ival)) >= 0)
1401 } else if (!strncmp(ptr, "nocap", 5) && snd_mixer_selem_has_capture_switch(elem)) {
1402 snd_mixer_selem_get_capture_switch(elem, chn, &ival);
1403 if (snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "nocap", 1, ival)) >= 0)
1405 } else if (!strncmp(ptr, "norec", 5) && snd_mixer_selem_has_capture_switch(elem)) {
1406 snd_mixer_selem_get_capture_switch(elem, chn, &ival);
1407 if (snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "norec", 1, ival)) >= 0)
1409 } else if (!strncmp(ptr, "toggle", 6) && snd_mixer_selem_has_capture_switch(elem)) {
1410 if (firstchn || !snd_mixer_selem_has_capture_switch_joined(elem)) {
1411 snd_mixer_selem_get_capture_switch(elem, chn, &ival);
1412 if (snd_mixer_selem_set_capture_switch(elem, chn, (ival ? 1 : 0) ^ 1) >= 0)
1417 if (set_volume_simple(elem, chn, &ptr, 1) >= 0)
1447 snd_mixer_elem_t *elem;
1488 elem = snd_mixer_find_selem(handle, sid);
1489 if (!elem) {
1499 if (snd_mixer_selem_is_enumerated(elem))
1500 err = sset_enum(elem, argc, argv);
1502 err = sset_channels(elem, argc, argv);
1553 static int element_callback(snd_hctl_elem_t *elem, unsigned int mask)
1556 events_remove(elem);
1560 events_info(elem);
1562 events_value(elem);
1578 snd_hctl_elem_t *elem)
1581 events_add(elem);
1632 static int melem_event(snd_mixer_elem_t *elem, unsigned int mask)
1636 snd_mixer_selem_get_id(elem, sid);
1648 static void sevents_add(snd_mixer_elem_t *elem)
1652 snd_mixer_selem_get_id(elem, sid);
1654 snd_mixer_elem_set_callback(elem, melem_event);
1658 snd_mixer_elem_t *elem)
1661 sevents_add(elem);