Lines Matching refs:cval

126 #define filter_error(cval, err) \  argument
127 ((cval)->head.mixer->ignore_ctl_error ? 0 : (err))
140 struct usb_mixer_elem_info *cval) in check_mapped_dB() argument
143 cval->dBmin = p->dB->min; in check_mapped_dB()
144 cval->dBmax = p->dB->max; in check_mapped_dB()
145 cval->initialized = 1; in check_mapped_dB()
203 static int convert_signed_value(struct usb_mixer_elem_info *cval, int val) in convert_signed_value() argument
205 switch (cval->val_type) { in convert_signed_value()
233 static int convert_bytes_value(struct usb_mixer_elem_info *cval, int val) in convert_bytes_value() argument
235 switch (cval->val_type) { in convert_bytes_value()
250 static int get_relative_value(struct usb_mixer_elem_info *cval, int val) in get_relative_value() argument
252 if (!cval->res) in get_relative_value()
253 cval->res = 1; in get_relative_value()
254 if (val < cval->min) in get_relative_value()
256 else if (val >= cval->max) in get_relative_value()
257 return (cval->max - cval->min + cval->res - 1) / cval->res; in get_relative_value()
259 return (val - cval->min) / cval->res; in get_relative_value()
262 static int get_abs_value(struct usb_mixer_elem_info *cval, int val) in get_abs_value() argument
265 return cval->min; in get_abs_value()
266 if (!cval->res) in get_abs_value()
267 cval->res = 1; in get_abs_value()
268 val *= cval->res; in get_abs_value()
269 val += cval->min; in get_abs_value()
270 if (val > cval->max) in get_abs_value()
271 return cval->max; in get_abs_value()
300 static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, in get_ctl_value_v1() argument
303 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v1()
305 int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; in get_ctl_value_v1()
314 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in get_ctl_value_v1()
319 *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); in get_ctl_value_v1()
328 request, validx, idx, cval->val_type); in get_ctl_value_v1()
336 static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, in get_ctl_value_v2() argument
339 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v2()
346 val_size = uac2_ctl_value_size(cval->val_type); in get_ctl_value_v2()
362 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in get_ctl_value_v2()
372 request, validx, idx, cval->val_type); in get_ctl_value_v2()
395 *value_ret = convert_signed_value(cval, in get_ctl_value_v2()
401 static int get_ctl_value(struct usb_mixer_elem_info *cval, int request, in get_ctl_value() argument
404 validx += cval->idx_off; in get_ctl_value()
406 return (cval->head.mixer->protocol == UAC_VERSION_1) ? in get_ctl_value()
407 get_ctl_value_v1(cval, request, validx, value_ret) : in get_ctl_value()
408 get_ctl_value_v2(cval, request, validx, value_ret); in get_ctl_value()
411 static int get_cur_ctl_value(struct usb_mixer_elem_info *cval, in get_cur_ctl_value() argument
414 return get_ctl_value(cval, UAC_GET_CUR, validx, value); in get_cur_ctl_value()
418 static inline int get_cur_mix_raw(struct usb_mixer_elem_info *cval, in get_cur_mix_raw() argument
421 return get_ctl_value(cval, UAC_GET_CUR, in get_cur_mix_raw()
422 (cval->control << 8) | channel, in get_cur_mix_raw()
426 int snd_usb_get_cur_mix_value(struct usb_mixer_elem_info *cval, in snd_usb_get_cur_mix_value() argument
431 if (cval->cached & (1 << channel)) { in snd_usb_get_cur_mix_value()
432 *value = cval->cache_val[index]; in snd_usb_get_cur_mix_value()
435 err = get_cur_mix_raw(cval, channel, value); in snd_usb_get_cur_mix_value()
437 if (!cval->head.mixer->ignore_ctl_error) in snd_usb_get_cur_mix_value()
438 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_get_cur_mix_value()
440 cval->control, channel, err); in snd_usb_get_cur_mix_value()
443 cval->cached |= 1 << channel; in snd_usb_get_cur_mix_value()
444 cval->cache_val[index] = *value; in snd_usb_get_cur_mix_value()
452 int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, in snd_usb_mixer_set_ctl_value() argument
455 struct snd_usb_audio *chip = cval->head.mixer->chip; in snd_usb_mixer_set_ctl_value()
459 validx += cval->idx_off; in snd_usb_mixer_set_ctl_value()
462 if (cval->head.mixer->protocol == UAC_VERSION_1) { in snd_usb_mixer_set_ctl_value()
463 val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; in snd_usb_mixer_set_ctl_value()
465 val_len = uac2_ctl_value_size(cval->val_type); in snd_usb_mixer_set_ctl_value()
476 value_set = convert_bytes_value(cval, value_set); in snd_usb_mixer_set_ctl_value()
487 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in snd_usb_mixer_set_ctl_value()
500 request, validx, idx, cval->val_type, buf[0], buf[1]); in snd_usb_mixer_set_ctl_value()
508 static int set_cur_ctl_value(struct usb_mixer_elem_info *cval, in set_cur_ctl_value() argument
511 return snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR, validx, value); in set_cur_ctl_value()
514 int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel, in snd_usb_set_cur_mix_value() argument
519 cval->master_readonly : in snd_usb_set_cur_mix_value()
520 cval->ch_readonly & (1 << (channel - 1)); in snd_usb_set_cur_mix_value()
523 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_set_cur_mix_value()
525 __func__, channel, cval->control); in snd_usb_set_cur_mix_value()
529 err = snd_usb_mixer_set_ctl_value(cval, in snd_usb_set_cur_mix_value()
530 UAC_SET_CUR, (cval->control << 8) | channel, in snd_usb_set_cur_mix_value()
534 cval->cached |= 1 << channel; in snd_usb_set_cur_mix_value()
535 cval->cache_val[index] = value; in snd_usb_set_cur_mix_value()
545 struct usb_mixer_elem_info *cval = kcontrol->private_data; in snd_usb_mixer_vol_tlv() local
550 if (cval->min_mute) in snd_usb_mixer_vol_tlv()
552 scale[2] = cval->dBmin; in snd_usb_mixer_vol_tlv()
553 scale[3] = cval->dBmax; in snd_usb_mixer_vol_tlv()
1061 static void usb_mixer_elem_info_free(struct usb_mixer_elem_info *cval) in usb_mixer_elem_info_free() argument
1063 kfree(cval); in usb_mixer_elem_info_free()
1078 static void volume_control_quirks(struct usb_mixer_elem_info *cval, in volume_control_quirks() argument
1081 struct snd_usb_audio *chip = cval->head.mixer->chip; in volume_control_quirks()
1086 cval->min = 0x0000; in volume_control_quirks()
1087 cval->max = 0xffff; in volume_control_quirks()
1088 cval->res = 0x00e6; in volume_control_quirks()
1093 cval->min = 0x00; in volume_control_quirks()
1094 cval->max = 0xff; in volume_control_quirks()
1098 cval->min = 0xb706; in volume_control_quirks()
1099 cval->max = 0xff7b; in volume_control_quirks()
1100 cval->res = 0x0073; in volume_control_quirks()
1105 cval->min = 0xb5fb; /* -73 dB = 0xb6ff */ in volume_control_quirks()
1106 cval->max = 0xfcfe; in volume_control_quirks()
1107 cval->res = 0x0073; in volume_control_quirks()
1116 cval->min = 0x0000; in volume_control_quirks()
1117 cval->max = 0x7f00; in volume_control_quirks()
1118 cval->res = 0x0100; in volume_control_quirks()
1125 cval->min = 0x00; in volume_control_quirks()
1126 cval->max = 0x7f; in volume_control_quirks()
1135 cval->min = -256; in volume_control_quirks()
1149 cval->min == -15616) { in volume_control_quirks()
1152 cval->max = -256; in volume_control_quirks()
1160 cval->min = 6080; in volume_control_quirks()
1161 cval->max = 8768; in volume_control_quirks()
1162 cval->res = 192; in volume_control_quirks()
1184 cval->res = 384; in volume_control_quirks()
1190 cval->min >>= 8; in volume_control_quirks()
1191 cval->max = 0; in volume_control_quirks()
1192 cval->res = 1; in volume_control_quirks()
1201 static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, in get_min_max_with_quirks() argument
1205 cval->min = default_min; in get_min_max_with_quirks()
1206 cval->max = cval->min + 1; in get_min_max_with_quirks()
1207 cval->res = 1; in get_min_max_with_quirks()
1208 cval->dBmin = cval->dBmax = 0; in get_min_max_with_quirks()
1210 if (cval->val_type == USB_MIXER_BOOLEAN || in get_min_max_with_quirks()
1211 cval->val_type == USB_MIXER_INV_BOOLEAN) { in get_min_max_with_quirks()
1212 cval->initialized = 1; in get_min_max_with_quirks()
1215 if (cval->cmask) { in get_min_max_with_quirks()
1218 if (cval->cmask & (1 << i)) { in get_min_max_with_quirks()
1223 if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 || in get_min_max_with_quirks()
1224 get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) { in get_min_max_with_quirks()
1225 usb_audio_err(cval->head.mixer->chip, in get_min_max_with_quirks()
1227 cval->head.id, mixer_ctrl_intf(cval->head.mixer), in get_min_max_with_quirks()
1228 cval->control, cval->head.id); in get_min_max_with_quirks()
1231 if (get_ctl_value(cval, UAC_GET_RES, in get_min_max_with_quirks()
1232 (cval->control << 8) | minchn, in get_min_max_with_quirks()
1233 &cval->res) < 0) { in get_min_max_with_quirks()
1234 cval->res = 1; in get_min_max_with_quirks()
1236 int last_valid_res = cval->res; in get_min_max_with_quirks()
1238 while (cval->res > 1) { in get_min_max_with_quirks()
1239 if (snd_usb_mixer_set_ctl_value(cval, UAC_SET_RES, in get_min_max_with_quirks()
1240 (cval->control << 8) | minchn, in get_min_max_with_quirks()
1241 cval->res / 2) < 0) in get_min_max_with_quirks()
1243 cval->res /= 2; in get_min_max_with_quirks()
1245 if (get_ctl_value(cval, UAC_GET_RES, in get_min_max_with_quirks()
1246 (cval->control << 8) | minchn, &cval->res) < 0) in get_min_max_with_quirks()
1247 cval->res = last_valid_res; in get_min_max_with_quirks()
1249 if (cval->res == 0) in get_min_max_with_quirks()
1250 cval->res = 1; in get_min_max_with_quirks()
1258 if (cval->min + cval->res < cval->max) { in get_min_max_with_quirks()
1259 int last_valid_res = cval->res; in get_min_max_with_quirks()
1261 if (get_cur_mix_raw(cval, minchn, &saved) < 0) in get_min_max_with_quirks()
1265 if (test < cval->max) in get_min_max_with_quirks()
1266 test += cval->res; in get_min_max_with_quirks()
1268 test -= cval->res; in get_min_max_with_quirks()
1269 if (test < cval->min || test > cval->max || in get_min_max_with_quirks()
1270 snd_usb_set_cur_mix_value(cval, minchn, 0, test) || in get_min_max_with_quirks()
1271 get_cur_mix_raw(cval, minchn, &check)) { in get_min_max_with_quirks()
1272 cval->res = last_valid_res; in get_min_max_with_quirks()
1277 cval->res *= 2; in get_min_max_with_quirks()
1279 snd_usb_set_cur_mix_value(cval, minchn, 0, saved); in get_min_max_with_quirks()
1283 cval->initialized = 1; in get_min_max_with_quirks()
1287 volume_control_quirks(cval, kctl); in get_min_max_with_quirks()
1292 cval->dBmin = (convert_signed_value(cval, cval->min) * 100) / 256; in get_min_max_with_quirks()
1293 cval->dBmax = (convert_signed_value(cval, cval->max) * 100) / 256; in get_min_max_with_quirks()
1294 if (cval->dBmin > cval->dBmax) { in get_min_max_with_quirks()
1296 if (cval->dBmin < 0) in get_min_max_with_quirks()
1297 cval->dBmax = 0; in get_min_max_with_quirks()
1298 else if (cval->dBmin > 0) in get_min_max_with_quirks()
1299 cval->dBmin = 0; in get_min_max_with_quirks()
1300 if (cval->dBmin > cval->dBmax) { in get_min_max_with_quirks()
1308 if (cval->dBmax <= -9600) { in get_min_max_with_quirks()
1309 usb_audio_info(cval->head.mixer->chip, in get_min_max_with_quirks()
1311 cval->head.id, mixer_ctrl_intf(cval->head.mixer), in get_min_max_with_quirks()
1312 cval->dBmin, cval->dBmax); in get_min_max_with_quirks()
1313 cval->dBmin = cval->dBmax = 0; in get_min_max_with_quirks()
1320 #define get_min_max(cval, def) get_min_max_with_quirks(cval, def, NULL) argument
1326 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_info() local
1328 if (cval->val_type == USB_MIXER_BOOLEAN || in mixer_ctl_feature_info()
1329 cval->val_type == USB_MIXER_INV_BOOLEAN) in mixer_ctl_feature_info()
1333 uinfo->count = cval->channels; in mixer_ctl_feature_info()
1334 if (cval->val_type == USB_MIXER_BOOLEAN || in mixer_ctl_feature_info()
1335 cval->val_type == USB_MIXER_INV_BOOLEAN) { in mixer_ctl_feature_info()
1339 if (!cval->initialized) { in mixer_ctl_feature_info()
1340 get_min_max_with_quirks(cval, 0, kcontrol); in mixer_ctl_feature_info()
1341 if (cval->initialized && cval->dBmin >= cval->dBmax) { in mixer_ctl_feature_info()
1345 snd_ctl_notify(cval->head.mixer->chip->card, in mixer_ctl_feature_info()
1352 (cval->max - cval->min + cval->res - 1) / cval->res; in mixer_ctl_feature_info()
1361 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_get() local
1364 ucontrol->value.integer.value[0] = cval->min; in mixer_ctl_feature_get()
1365 if (cval->cmask) { in mixer_ctl_feature_get()
1368 if (!(cval->cmask & (1 << c))) in mixer_ctl_feature_get()
1370 err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &val); in mixer_ctl_feature_get()
1372 return filter_error(cval, err); in mixer_ctl_feature_get()
1373 val = get_relative_value(cval, val); in mixer_ctl_feature_get()
1380 err = snd_usb_get_cur_mix_value(cval, 0, 0, &val); in mixer_ctl_feature_get()
1382 return filter_error(cval, err); in mixer_ctl_feature_get()
1383 val = get_relative_value(cval, val); in mixer_ctl_feature_get()
1393 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_put() local
1397 if (cval->cmask) { in mixer_ctl_feature_put()
1400 if (!(cval->cmask & (1 << c))) in mixer_ctl_feature_put()
1402 err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &oval); in mixer_ctl_feature_put()
1404 return filter_error(cval, err); in mixer_ctl_feature_put()
1406 val = get_abs_value(cval, val); in mixer_ctl_feature_put()
1408 snd_usb_set_cur_mix_value(cval, c + 1, cnt, val); in mixer_ctl_feature_put()
1415 err = snd_usb_get_cur_mix_value(cval, 0, 0, &oval); in mixer_ctl_feature_put()
1417 return filter_error(cval, err); in mixer_ctl_feature_put()
1419 val = get_abs_value(cval, val); in mixer_ctl_feature_put()
1421 snd_usb_set_cur_mix_value(cval, 0, 0, val); in mixer_ctl_feature_put()
1432 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_master_bool_get() local
1435 err = snd_usb_get_cur_mix_value(cval, 0, 0, &val); in mixer_ctl_master_bool_get()
1437 return filter_error(cval, err); in mixer_ctl_master_bool_get()
1447 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_connector_get() local
1448 struct snd_usb_audio *chip = cval->head.mixer->chip; in mixer_ctl_connector_get()
1451 validx = cval->control << 8 | 0; in mixer_ctl_connector_get()
1457 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in mixer_ctl_connector_get()
1458 if (cval->head.mixer->protocol == UAC_VERSION_2) { in mixer_ctl_connector_get()
1484 UAC_GET_CUR, validx, idx, cval->val_type); in mixer_ctl_connector_get()
1485 return filter_error(cval, ret); in mixer_ctl_connector_get()
1595 struct usb_mixer_elem_info *cval; in __build_feature_ctl() local
1608 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in __build_feature_ctl()
1609 if (!cval) in __build_feature_ctl()
1611 snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid); in __build_feature_ctl()
1612 cval->control = control; in __build_feature_ctl()
1613 cval->cmask = ctl_mask; in __build_feature_ctl()
1617 usb_mixer_elem_info_free(cval); in __build_feature_ctl()
1621 cval->val_type = ctl_info->type; in __build_feature_ctl()
1623 cval->val_type = ctl_info->type_uac2 >= 0 ? in __build_feature_ctl()
1627 cval->channels = 1; /* master channel */ in __build_feature_ctl()
1628 cval->master_readonly = readonly_mask; in __build_feature_ctl()
1634 cval->channels = c; in __build_feature_ctl()
1635 cval->ch_readonly = readonly_mask; in __build_feature_ctl()
1643 if (cval->channels == readonly_mask) in __build_feature_ctl()
1644 kctl = snd_ctl_new1(&usb_feature_unit_ctl_ro, cval); in __build_feature_ctl()
1646 kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); in __build_feature_ctl()
1650 usb_mixer_elem_info_free(cval); in __build_feature_ctl()
1711 get_min_max_with_quirks(cval, 0, kctl); in __build_feature_ctl()
1714 if (cval->max <= cval->min) { in __build_feature_ctl()
1717 cval->head.id, kctl->id.name); in __build_feature_ctl()
1724 check_mapped_dB(map, cval); in __build_feature_ctl()
1725 if (cval->dBmin < cval->dBmax || !cval->initialized) { in __build_feature_ctl()
1733 snd_usb_mixer_fu_apply_quirk(mixer, cval, unitid, kctl); in __build_feature_ctl()
1735 range = (cval->max - cval->min) / cval->res; in __build_feature_ctl()
1747 cval->head.id, kctl->id.name, cval->channels, in __build_feature_ctl()
1748 cval->min, cval->max, cval->res); in __build_feature_ctl()
1752 cval->head.id, kctl->id.name, cval->channels, in __build_feature_ctl()
1753 cval->min, cval->max, cval->res); in __build_feature_ctl()
1754 snd_usb_mixer_add_control(&cval->head, kctl); in __build_feature_ctl()
1803 struct usb_mixer_elem_info *cval; in build_connector_control() local
1810 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_connector_control()
1811 if (!cval) in build_connector_control()
1813 snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id); in build_connector_control()
1825 cval->control = UAC2_TE_CONNECTOR; in build_connector_control()
1827 cval->control = UAC3_TE_INSERTION; in build_connector_control()
1829 cval->val_type = USB_MIXER_BOOLEAN; in build_connector_control()
1830 cval->channels = 1; /* report true if any channel is connected */ in build_connector_control()
1831 cval->min = 0; in build_connector_control()
1832 cval->max = 1; in build_connector_control()
1833 kctl = snd_ctl_new1(&usb_connector_ctl_ro, cval); in build_connector_control()
1836 usb_mixer_elem_info_free(cval); in build_connector_control()
1846 snd_usb_mixer_add_control(&cval->head, kctl); in build_connector_control()
1853 struct usb_mixer_elem_info *cval; in parse_clock_source_unit() local
1869 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in parse_clock_source_unit()
1870 if (!cval) in parse_clock_source_unit()
1873 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, hdr->bClockID); in parse_clock_source_unit()
1875 cval->min = 0; in parse_clock_source_unit()
1876 cval->max = 1; in parse_clock_source_unit()
1877 cval->channels = 1; in parse_clock_source_unit()
1878 cval->val_type = USB_MIXER_BOOLEAN; in parse_clock_source_unit()
1879 cval->control = UAC2_CS_CONTROL_CLOCK_VALID; in parse_clock_source_unit()
1881 cval->master_readonly = 1; in parse_clock_source_unit()
1883 kctl = snd_ctl_new1(&usb_bool_master_control_ctl_ro, cval); in parse_clock_source_unit()
1886 usb_mixer_elem_info_free(cval); in parse_clock_source_unit()
1900 return snd_usb_mixer_add_control(&cval->head, kctl); in parse_clock_source_unit()
2075 struct usb_mixer_elem_info *cval; in build_mixer_unit_ctl() local
2084 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_mixer_unit_ctl()
2085 if (!cval) in build_mixer_unit_ctl()
2088 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_mixer_unit_ctl()
2089 cval->control = in_ch + 1; /* based on 1 */ in build_mixer_unit_ctl()
2090 cval->val_type = USB_MIXER_S16; in build_mixer_unit_ctl()
2095 cval->cmask |= (1 << i); in build_mixer_unit_ctl()
2096 cval->channels++; in build_mixer_unit_ctl()
2101 get_min_max(cval, 0); in build_mixer_unit_ctl()
2103 kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); in build_mixer_unit_ctl()
2106 usb_mixer_elem_info_free(cval); in build_mixer_unit_ctl()
2120 cval->head.id, kctl->id.name, cval->channels, cval->min, cval->max); in build_mixer_unit_ctl()
2121 snd_usb_mixer_add_control(&cval->head, kctl); in build_mixer_unit_ctl()
2220 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_procunit_get() local
2223 err = get_cur_ctl_value(cval, cval->control << 8, &val); in mixer_ctl_procunit_get()
2225 ucontrol->value.integer.value[0] = cval->min; in mixer_ctl_procunit_get()
2226 return filter_error(cval, err); in mixer_ctl_procunit_get()
2228 val = get_relative_value(cval, val); in mixer_ctl_procunit_get()
2237 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_procunit_put() local
2240 err = get_cur_ctl_value(cval, cval->control << 8, &oval); in mixer_ctl_procunit_put()
2242 return filter_error(cval, err); in mixer_ctl_procunit_put()
2244 val = get_abs_value(cval, val); in mixer_ctl_procunit_put()
2246 set_cur_ctl_value(cval, cval->control << 8, val); in mixer_ctl_procunit_put()
2383 struct usb_mixer_elem_info *cval; in build_audio_procunit() local
2429 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_audio_procunit()
2430 if (!cval) in build_audio_procunit()
2432 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_audio_procunit()
2433 cval->control = valinfo->control; in build_audio_procunit()
2434 cval->val_type = valinfo->val_type; in build_audio_procunit()
2435 cval->channels = 1; in build_audio_procunit()
2440 cval->master_readonly = 1; in build_audio_procunit()
2451 if (cval->control == UAC_UD_MODE_SELECT) in build_audio_procunit()
2455 if (cval->control == UAC3_UD_MODE_SELECT) in build_audio_procunit()
2463 cval->min = 1; in build_audio_procunit()
2464 cval->max = control_spec[0]; in build_audio_procunit()
2465 cval->res = 1; in build_audio_procunit()
2466 cval->initialized = 1; in build_audio_procunit()
2470 get_min_max(cval, valinfo->min_value); in build_audio_procunit()
2478 cval->min = 0; in build_audio_procunit()
2479 cval->max = 5; in build_audio_procunit()
2480 cval->res = 1; in build_audio_procunit()
2481 cval->initialized = 1; in build_audio_procunit()
2484 get_min_max(cval, valinfo->min_value); in build_audio_procunit()
2488 err = get_cur_ctl_value(cval, cval->control << 8, &val); in build_audio_procunit()
2490 usb_mixer_elem_info_free(cval); in build_audio_procunit()
2494 kctl = snd_ctl_new1(&mixer_procunit_ctl, cval); in build_audio_procunit()
2496 usb_mixer_elem_info_free(cval); in build_audio_procunit()
2524 cval->head.id, kctl->id.name, cval->channels, in build_audio_procunit()
2525 cval->min, cval->max); in build_audio_procunit()
2527 err = snd_usb_mixer_add_control(&cval->head, kctl); in build_audio_procunit()
2570 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_info() local
2575 return snd_ctl_enum_info(uinfo, 1, cval->max, itemlist); in mixer_ctl_selector_info()
2582 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_get() local
2585 err = get_cur_ctl_value(cval, cval->control << 8, &val); in mixer_ctl_selector_get()
2588 return filter_error(cval, err); in mixer_ctl_selector_get()
2590 val = get_relative_value(cval, val); in mixer_ctl_selector_get()
2599 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_put() local
2602 err = get_cur_ctl_value(cval, cval->control << 8, &oval); in mixer_ctl_selector_put()
2604 return filter_error(cval, err); in mixer_ctl_selector_put()
2606 val = get_abs_value(cval, val); in mixer_ctl_selector_put()
2608 set_cur_ctl_value(cval, cval->control << 8, val); in mixer_ctl_selector_put()
2632 struct usb_mixer_elem_info *cval = kctl->private_data; in usb_mixer_selector_elem_free() local
2633 num_ins = cval->max; in usb_mixer_selector_elem_free()
2634 usb_mixer_elem_info_free(cval); in usb_mixer_selector_elem_free()
2655 struct usb_mixer_elem_info *cval; in parse_audio_selector_unit() local
2673 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in parse_audio_selector_unit()
2674 if (!cval) in parse_audio_selector_unit()
2676 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in parse_audio_selector_unit()
2677 cval->val_type = USB_MIXER_U8; in parse_audio_selector_unit()
2678 cval->channels = 1; in parse_audio_selector_unit()
2679 cval->min = 1; in parse_audio_selector_unit()
2680 cval->max = desc->bNrInPins; in parse_audio_selector_unit()
2681 cval->res = 1; in parse_audio_selector_unit()
2682 cval->initialized = 1; in parse_audio_selector_unit()
2687 cval->control = 0; in parse_audio_selector_unit()
2693 cval->control = UAC2_CX_CLOCK_SELECTOR; in parse_audio_selector_unit()
2695 cval->control = UAC2_SU_SELECTOR; in parse_audio_selector_unit()
2722 kctl = snd_ctl_new1(&mixer_selectunit_ctl, cval); in parse_audio_selector_unit()
2770 cval->head.id, kctl->id.name, desc->bNrInPins); in parse_audio_selector_unit()
2771 return snd_usb_mixer_add_control(&cval->head, kctl); in parse_audio_selector_unit()
2778 usb_mixer_elem_info_free(cval); in parse_audio_selector_unit()
3275 struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); in snd_usb_mixer_dump_cval() local
3288 "channels=%i, type=\"%s\"\n", cval->head.id, in snd_usb_mixer_dump_cval()
3289 cval->control, cval->cmask, cval->channels, in snd_usb_mixer_dump_cval()
3290 val_types[cval->val_type]); in snd_usb_mixer_dump_cval()
3292 cval->min, cval->max, cval->dBmin, cval->dBmax); in snd_usb_mixer_dump_cval()
3639 struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); in restore_mixer_value() local
3642 if (cval->val_type == USB_MIXER_BESPOKEN) in restore_mixer_value()
3645 if (cval->cmask) { in restore_mixer_value()
3648 if (!(cval->cmask & (1 << c))) in restore_mixer_value()
3650 if (cval->cached & (1 << (c + 1))) { in restore_mixer_value()
3651 err = snd_usb_set_cur_mix_value(cval, c + 1, idx, in restore_mixer_value()
3652 cval->cache_val[idx]); in restore_mixer_value()
3660 if (cval->cached) { in restore_mixer_value()
3661 err = snd_usb_set_cur_mix_value(cval, 0, 0, *cval->cache_val); in restore_mixer_value()