Lines Matching refs:cval
129 #define filter_error(cval, err) \ argument
130 ((cval)->head.mixer->ignore_ctl_error ? 0 : (err))
143 struct usb_mixer_elem_info *cval) in check_mapped_dB() argument
146 cval->dBmin = p->dB->min; in check_mapped_dB()
147 cval->dBmax = p->dB->max; in check_mapped_dB()
148 cval->min_mute = p->dB->min_mute; in check_mapped_dB()
149 cval->initialized = 1; in check_mapped_dB()
210 static int convert_signed_value(struct usb_mixer_elem_info *cval, int val) in convert_signed_value() argument
212 switch (cval->val_type) { in convert_signed_value()
240 static int convert_bytes_value(struct usb_mixer_elem_info *cval, int val) in convert_bytes_value() argument
242 switch (cval->val_type) { in convert_bytes_value()
257 static int get_relative_value(struct usb_mixer_elem_info *cval, int val) in get_relative_value() argument
259 if (!cval->res) in get_relative_value()
260 cval->res = 1; in get_relative_value()
261 if (val < cval->min) in get_relative_value()
263 else if (val >= cval->max) in get_relative_value()
264 return DIV_ROUND_UP(cval->max - cval->min, cval->res); in get_relative_value()
266 return (val - cval->min) / cval->res; in get_relative_value()
269 static int get_abs_value(struct usb_mixer_elem_info *cval, int val) in get_abs_value() argument
272 return cval->min; in get_abs_value()
273 if (!cval->res) in get_abs_value()
274 cval->res = 1; in get_abs_value()
275 val *= cval->res; in get_abs_value()
276 val += cval->min; in get_abs_value()
277 if (val > cval->max) in get_abs_value()
278 return cval->max; in get_abs_value()
307 static int get_ctl_value_v1(struct usb_mixer_elem_info *cval, int request, in get_ctl_value_v1() argument
310 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v1()
312 int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; in get_ctl_value_v1()
321 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in get_ctl_value_v1()
326 *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(buf, val_len)); in get_ctl_value_v1()
335 request, validx, idx, cval->val_type); in get_ctl_value_v1()
343 static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request, in get_ctl_value_v2() argument
346 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v2()
353 val_size = uac2_ctl_value_size(cval->val_type); in get_ctl_value_v2()
368 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in get_ctl_value_v2()
377 request, validx, idx, cval->val_type); in get_ctl_value_v2()
400 *value_ret = convert_signed_value(cval, in get_ctl_value_v2()
406 static int get_ctl_value(struct usb_mixer_elem_info *cval, int request, in get_ctl_value() argument
409 validx += cval->idx_off; in get_ctl_value()
411 return (cval->head.mixer->protocol == UAC_VERSION_1) ? in get_ctl_value()
412 get_ctl_value_v1(cval, request, validx, value_ret) : in get_ctl_value()
413 get_ctl_value_v2(cval, request, validx, value_ret); in get_ctl_value()
416 static int get_cur_ctl_value(struct usb_mixer_elem_info *cval, in get_cur_ctl_value() argument
419 return get_ctl_value(cval, UAC_GET_CUR, validx, value); in get_cur_ctl_value()
423 static inline int get_cur_mix_raw(struct usb_mixer_elem_info *cval, in get_cur_mix_raw() argument
426 return get_ctl_value(cval, UAC_GET_CUR, in get_cur_mix_raw()
427 (cval->control << 8) | channel, in get_cur_mix_raw()
431 int snd_usb_get_cur_mix_value(struct usb_mixer_elem_info *cval, in snd_usb_get_cur_mix_value() argument
436 if (cval->cached & BIT(channel)) { in snd_usb_get_cur_mix_value()
437 *value = cval->cache_val[index]; in snd_usb_get_cur_mix_value()
440 err = get_cur_mix_raw(cval, channel, value); in snd_usb_get_cur_mix_value()
442 if (!cval->head.mixer->ignore_ctl_error) in snd_usb_get_cur_mix_value()
443 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_get_cur_mix_value()
445 cval->control, channel, err); in snd_usb_get_cur_mix_value()
448 cval->cached |= BIT(channel); in snd_usb_get_cur_mix_value()
449 cval->cache_val[index] = *value; in snd_usb_get_cur_mix_value()
457 int snd_usb_mixer_set_ctl_value(struct usb_mixer_elem_info *cval, in snd_usb_mixer_set_ctl_value() argument
460 struct snd_usb_audio *chip = cval->head.mixer->chip; in snd_usb_mixer_set_ctl_value()
464 validx += cval->idx_off; in snd_usb_mixer_set_ctl_value()
467 if (cval->head.mixer->protocol == UAC_VERSION_1) { in snd_usb_mixer_set_ctl_value()
468 val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1; in snd_usb_mixer_set_ctl_value()
470 val_len = uac2_ctl_value_size(cval->val_type); in snd_usb_mixer_set_ctl_value()
481 value_set = convert_bytes_value(cval, value_set); in snd_usb_mixer_set_ctl_value()
492 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in snd_usb_mixer_set_ctl_value()
505 request, validx, idx, cval->val_type, buf[0], buf[1]); in snd_usb_mixer_set_ctl_value()
513 static int set_cur_ctl_value(struct usb_mixer_elem_info *cval, in set_cur_ctl_value() argument
516 return snd_usb_mixer_set_ctl_value(cval, UAC_SET_CUR, validx, value); in set_cur_ctl_value()
519 int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel, in snd_usb_set_cur_mix_value() argument
524 cval->master_readonly : in snd_usb_set_cur_mix_value()
525 cval->ch_readonly & BIT(channel - 1); in snd_usb_set_cur_mix_value()
528 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_set_cur_mix_value()
530 __func__, channel, cval->control); in snd_usb_set_cur_mix_value()
534 err = snd_usb_mixer_set_ctl_value(cval, in snd_usb_set_cur_mix_value()
535 UAC_SET_CUR, (cval->control << 8) | channel, in snd_usb_set_cur_mix_value()
539 cval->cached |= BIT(channel); in snd_usb_set_cur_mix_value()
540 cval->cache_val[index] = value; in snd_usb_set_cur_mix_value()
550 struct usb_mixer_elem_info *cval = kcontrol->private_data; in snd_usb_mixer_vol_tlv() local
555 if (cval->min_mute) in snd_usb_mixer_vol_tlv()
557 scale[2] = cval->dBmin; in snd_usb_mixer_vol_tlv()
558 scale[3] = cval->dBmax; in snd_usb_mixer_vol_tlv()
1066 static void usb_mixer_elem_info_free(struct usb_mixer_elem_info *cval) in usb_mixer_elem_info_free() argument
1068 kfree(cval); in usb_mixer_elem_info_free()
1083 static void volume_control_quirks(struct usb_mixer_elem_info *cval, in volume_control_quirks() argument
1086 struct snd_usb_audio *chip = cval->head.mixer->chip; in volume_control_quirks()
1092 cval->res = 384; in volume_control_quirks()
1098 cval->res = 16; in volume_control_quirks()
1106 cval->min = 0x0000; in volume_control_quirks()
1107 cval->max = 0xffff; in volume_control_quirks()
1108 cval->res = 0x00e6; in volume_control_quirks()
1113 cval->min = 0x00; in volume_control_quirks()
1114 cval->max = 0xff; in volume_control_quirks()
1118 cval->min = 0xb706; in volume_control_quirks()
1119 cval->max = 0xff7b; in volume_control_quirks()
1120 cval->res = 0x0073; in volume_control_quirks()
1125 cval->min = 0xb5fb; /* -73 dB = 0xb6ff */ in volume_control_quirks()
1126 cval->max = 0xfcfe; in volume_control_quirks()
1127 cval->res = 0x0073; in volume_control_quirks()
1136 cval->min = 0x0000; in volume_control_quirks()
1137 cval->max = 0x7f00; in volume_control_quirks()
1138 cval->res = 0x0100; in volume_control_quirks()
1145 cval->min = 0x00; in volume_control_quirks()
1146 cval->max = 0x7f; in volume_control_quirks()
1155 cval->min = -256; in volume_control_quirks()
1169 cval->min == -15616) { in volume_control_quirks()
1172 cval->max = -256; in volume_control_quirks()
1180 cval->min = 6080; in volume_control_quirks()
1181 cval->max = 8768; in volume_control_quirks()
1182 cval->res = 192; in volume_control_quirks()
1189 cval->min >>= 8; in volume_control_quirks()
1190 cval->max = 0; in volume_control_quirks()
1191 cval->res = 1; in volume_control_quirks()
1200 static void init_cur_mix_raw(struct usb_mixer_elem_info *cval, int ch, int idx) in init_cur_mix_raw() argument
1204 err = snd_usb_get_cur_mix_value(cval, ch, idx, &val); in init_cur_mix_raw()
1207 if (!cval->head.mixer->ignore_ctl_error) in init_cur_mix_raw()
1208 usb_audio_warn(cval->head.mixer->chip, in init_cur_mix_raw()
1210 cval->head.id, mixer_ctrl_intf(cval->head.mixer), in init_cur_mix_raw()
1212 snd_usb_set_cur_mix_value(cval, ch, idx, cval->min); in init_cur_mix_raw()
1218 static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, in get_min_max_with_quirks() argument
1224 cval->min = default_min; in get_min_max_with_quirks()
1225 cval->max = cval->min + 1; in get_min_max_with_quirks()
1226 cval->res = 1; in get_min_max_with_quirks()
1227 cval->dBmin = cval->dBmax = 0; in get_min_max_with_quirks()
1229 if (cval->val_type == USB_MIXER_BOOLEAN || in get_min_max_with_quirks()
1230 cval->val_type == USB_MIXER_INV_BOOLEAN) { in get_min_max_with_quirks()
1231 cval->initialized = 1; in get_min_max_with_quirks()
1234 if (cval->cmask) { in get_min_max_with_quirks()
1236 if (cval->cmask & BIT(i)) { in get_min_max_with_quirks()
1241 if (get_ctl_value(cval, UAC_GET_MAX, (cval->control << 8) | minchn, &cval->max) < 0 || in get_min_max_with_quirks()
1242 get_ctl_value(cval, UAC_GET_MIN, (cval->control << 8) | minchn, &cval->min) < 0) { in get_min_max_with_quirks()
1243 usb_audio_err(cval->head.mixer->chip, in get_min_max_with_quirks()
1245 cval->head.id, mixer_ctrl_intf(cval->head.mixer), in get_min_max_with_quirks()
1246 cval->control, cval->head.id); in get_min_max_with_quirks()
1249 if (get_ctl_value(cval, UAC_GET_RES, in get_min_max_with_quirks()
1250 (cval->control << 8) | minchn, in get_min_max_with_quirks()
1251 &cval->res) < 0) { in get_min_max_with_quirks()
1252 cval->res = 1; in get_min_max_with_quirks()
1253 } else if (cval->head.mixer->protocol == UAC_VERSION_1) { in get_min_max_with_quirks()
1254 int last_valid_res = cval->res; in get_min_max_with_quirks()
1256 while (cval->res > 1) { in get_min_max_with_quirks()
1257 if (snd_usb_mixer_set_ctl_value(cval, UAC_SET_RES, in get_min_max_with_quirks()
1258 (cval->control << 8) | minchn, in get_min_max_with_quirks()
1259 cval->res / 2) < 0) in get_min_max_with_quirks()
1261 cval->res /= 2; in get_min_max_with_quirks()
1263 if (get_ctl_value(cval, UAC_GET_RES, in get_min_max_with_quirks()
1264 (cval->control << 8) | minchn, &cval->res) < 0) in get_min_max_with_quirks()
1265 cval->res = last_valid_res; in get_min_max_with_quirks()
1267 if (cval->res == 0) in get_min_max_with_quirks()
1268 cval->res = 1; in get_min_max_with_quirks()
1276 if (cval->min + cval->res < cval->max) { in get_min_max_with_quirks()
1277 int last_valid_res = cval->res; in get_min_max_with_quirks()
1279 if (get_cur_mix_raw(cval, minchn, &saved) < 0) in get_min_max_with_quirks()
1283 if (test < cval->max) in get_min_max_with_quirks()
1284 test += cval->res; in get_min_max_with_quirks()
1286 test -= cval->res; in get_min_max_with_quirks()
1287 if (test < cval->min || test > cval->max || in get_min_max_with_quirks()
1288 snd_usb_set_cur_mix_value(cval, minchn, 0, test) || in get_min_max_with_quirks()
1289 get_cur_mix_raw(cval, minchn, &check)) { in get_min_max_with_quirks()
1290 cval->res = last_valid_res; in get_min_max_with_quirks()
1295 cval->res *= 2; in get_min_max_with_quirks()
1297 snd_usb_set_cur_mix_value(cval, minchn, 0, saved); in get_min_max_with_quirks()
1301 cval->initialized = 1; in get_min_max_with_quirks()
1305 volume_control_quirks(cval, kctl); in get_min_max_with_quirks()
1310 cval->dBmin = (convert_signed_value(cval, cval->min) * 100) / 256; in get_min_max_with_quirks()
1311 cval->dBmax = (convert_signed_value(cval, cval->max) * 100) / 256; in get_min_max_with_quirks()
1312 if (cval->dBmin > cval->dBmax) { in get_min_max_with_quirks()
1314 if (cval->dBmin < 0) in get_min_max_with_quirks()
1315 cval->dBmax = 0; in get_min_max_with_quirks()
1316 else if (cval->dBmin > 0) in get_min_max_with_quirks()
1317 cval->dBmin = 0; in get_min_max_with_quirks()
1318 if (cval->dBmin > cval->dBmax) { in get_min_max_with_quirks()
1326 if (cval->dBmax <= -9600) { in get_min_max_with_quirks()
1327 usb_audio_info(cval->head.mixer->chip, in get_min_max_with_quirks()
1329 cval->head.id, mixer_ctrl_intf(cval->head.mixer), in get_min_max_with_quirks()
1330 cval->dBmin, cval->dBmax); in get_min_max_with_quirks()
1331 cval->dBmin = cval->dBmax = 0; in get_min_max_with_quirks()
1336 if (!cval->cmask) { in get_min_max_with_quirks()
1337 init_cur_mix_raw(cval, 0, 0); in get_min_max_with_quirks()
1341 if (cval->cmask & BIT(i)) { in get_min_max_with_quirks()
1342 init_cur_mix_raw(cval, i + 1, idx); in get_min_max_with_quirks()
1351 #define get_min_max(cval, def) get_min_max_with_quirks(cval, def, NULL) argument
1354 static int get_max_exposed(struct usb_mixer_elem_info *cval) in get_max_exposed() argument
1356 if (!cval->max_exposed) { in get_max_exposed()
1357 if (cval->res) in get_max_exposed()
1358 cval->max_exposed = in get_max_exposed()
1359 DIV_ROUND_UP(cval->max - cval->min, cval->res); in get_max_exposed()
1361 cval->max_exposed = cval->max - cval->min; in get_max_exposed()
1363 return cval->max_exposed; in get_max_exposed()
1370 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_info() local
1372 if (cval->val_type == USB_MIXER_BOOLEAN || in mixer_ctl_feature_info()
1373 cval->val_type == USB_MIXER_INV_BOOLEAN) in mixer_ctl_feature_info()
1377 uinfo->count = cval->channels; in mixer_ctl_feature_info()
1378 if (cval->val_type != USB_MIXER_BOOLEAN && in mixer_ctl_feature_info()
1379 cval->val_type != USB_MIXER_INV_BOOLEAN) { in mixer_ctl_feature_info()
1380 if (!cval->initialized) { in mixer_ctl_feature_info()
1381 get_min_max_with_quirks(cval, 0, kcontrol); in mixer_ctl_feature_info()
1382 if (cval->initialized && cval->dBmin >= cval->dBmax) { in mixer_ctl_feature_info()
1386 snd_ctl_notify(cval->head.mixer->chip->card, in mixer_ctl_feature_info()
1394 uinfo->value.integer.max = get_max_exposed(cval); in mixer_ctl_feature_info()
1402 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_get() local
1405 ucontrol->value.integer.value[0] = cval->min; in mixer_ctl_feature_get()
1406 if (cval->cmask) { in mixer_ctl_feature_get()
1409 if (!(cval->cmask & BIT(c))) in mixer_ctl_feature_get()
1411 err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &val); in mixer_ctl_feature_get()
1413 return filter_error(cval, err); in mixer_ctl_feature_get()
1414 val = get_relative_value(cval, val); in mixer_ctl_feature_get()
1421 err = snd_usb_get_cur_mix_value(cval, 0, 0, &val); in mixer_ctl_feature_get()
1423 return filter_error(cval, err); in mixer_ctl_feature_get()
1424 val = get_relative_value(cval, val); in mixer_ctl_feature_get()
1434 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_feature_put() local
1435 int max_val = get_max_exposed(cval); in mixer_ctl_feature_put()
1439 if (cval->cmask) { in mixer_ctl_feature_put()
1442 if (!(cval->cmask & BIT(c))) in mixer_ctl_feature_put()
1444 err = snd_usb_get_cur_mix_value(cval, c + 1, cnt, &oval); in mixer_ctl_feature_put()
1446 return filter_error(cval, err); in mixer_ctl_feature_put()
1450 val = get_abs_value(cval, val); in mixer_ctl_feature_put()
1452 snd_usb_set_cur_mix_value(cval, c + 1, cnt, val); in mixer_ctl_feature_put()
1459 err = snd_usb_get_cur_mix_value(cval, 0, 0, &oval); in mixer_ctl_feature_put()
1461 return filter_error(cval, err); in mixer_ctl_feature_put()
1465 val = get_abs_value(cval, val); in mixer_ctl_feature_put()
1467 snd_usb_set_cur_mix_value(cval, 0, 0, val); in mixer_ctl_feature_put()
1478 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_master_bool_get() local
1481 err = snd_usb_get_cur_mix_value(cval, 0, 0, &val); in mixer_ctl_master_bool_get()
1483 return filter_error(cval, err); in mixer_ctl_master_bool_get()
1489 static int get_connector_value(struct usb_mixer_elem_info *cval, in get_connector_value() argument
1492 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_connector_value()
1495 validx = cval->control << 8 | 0; in get_connector_value()
1501 idx = mixer_ctrl_intf(cval->head.mixer) | (cval->head.id << 8); in get_connector_value()
1502 if (cval->head.mixer->protocol == UAC_VERSION_2) { in get_connector_value()
1531 UAC_GET_CUR, validx, idx, cval->val_type); in get_connector_value()
1536 return filter_error(cval, ret); in get_connector_value()
1546 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_connector_get() local
1549 ret = get_connector_value(cval, kcontrol->id.name, &val); in mixer_ctl_connector_get()
1661 struct usb_mixer_elem_info *cval; in __build_feature_ctl() local
1674 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in __build_feature_ctl()
1675 if (!cval) in __build_feature_ctl()
1677 snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid); in __build_feature_ctl()
1678 cval->control = control; in __build_feature_ctl()
1679 cval->cmask = ctl_mask; in __build_feature_ctl()
1683 usb_mixer_elem_info_free(cval); in __build_feature_ctl()
1687 cval->val_type = ctl_info->type; in __build_feature_ctl()
1689 cval->val_type = ctl_info->type_uac2 >= 0 ? in __build_feature_ctl()
1693 cval->channels = 1; /* master channel */ in __build_feature_ctl()
1694 cval->master_readonly = readonly_mask; in __build_feature_ctl()
1700 cval->channels = c; in __build_feature_ctl()
1701 cval->ch_readonly = readonly_mask; in __build_feature_ctl()
1709 if (cval->channels == readonly_mask) in __build_feature_ctl()
1710 kctl = snd_ctl_new1(&usb_feature_unit_ctl_ro, cval); in __build_feature_ctl()
1712 kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); in __build_feature_ctl()
1716 usb_mixer_elem_info_free(cval); in __build_feature_ctl()
1777 get_min_max_with_quirks(cval, 0, kctl); in __build_feature_ctl()
1780 if (cval->max <= cval->min) { in __build_feature_ctl()
1783 cval->head.id, kctl->id.name); in __build_feature_ctl()
1790 check_mapped_dB(map, cval); in __build_feature_ctl()
1791 if (cval->dBmin < cval->dBmax || !cval->initialized) { in __build_feature_ctl()
1799 snd_usb_mixer_fu_apply_quirk(mixer, cval, unitid, kctl); in __build_feature_ctl()
1801 range = (cval->max - cval->min) / cval->res; in __build_feature_ctl()
1813 cval->head.id, kctl->id.name, cval->channels, in __build_feature_ctl()
1814 cval->min, cval->max, cval->res); in __build_feature_ctl()
1818 cval->head.id, kctl->id.name, cval->channels, in __build_feature_ctl()
1819 cval->min, cval->max, cval->res); in __build_feature_ctl()
1820 snd_usb_mixer_add_control(&cval->head, kctl); in __build_feature_ctl()
1866 struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); in connector_mixer_resume() local
1868 get_connector_value(cval, NULL, NULL); in connector_mixer_resume()
1878 struct usb_mixer_elem_info *cval; in build_connector_control() local
1885 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_connector_control()
1886 if (!cval) in build_connector_control()
1888 snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id); in build_connector_control()
1891 cval->head.resume = connector_mixer_resume; in build_connector_control()
1904 cval->control = UAC2_TE_CONNECTOR; in build_connector_control()
1906 cval->control = UAC3_TE_INSERTION; in build_connector_control()
1908 cval->val_type = USB_MIXER_BOOLEAN; in build_connector_control()
1909 cval->channels = 1; /* report true if any channel is connected */ in build_connector_control()
1910 cval->min = 0; in build_connector_control()
1911 cval->max = 1; in build_connector_control()
1912 kctl = snd_ctl_new1(&usb_connector_ctl_ro, cval); in build_connector_control()
1915 usb_mixer_elem_info_free(cval); in build_connector_control()
1925 snd_usb_mixer_add_control(&cval->head, kctl); in build_connector_control()
1932 struct usb_mixer_elem_info *cval; in parse_clock_source_unit() local
1947 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in parse_clock_source_unit()
1948 if (!cval) in parse_clock_source_unit()
1951 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, hdr->bClockID); in parse_clock_source_unit()
1953 cval->min = 0; in parse_clock_source_unit()
1954 cval->max = 1; in parse_clock_source_unit()
1955 cval->channels = 1; in parse_clock_source_unit()
1956 cval->val_type = USB_MIXER_BOOLEAN; in parse_clock_source_unit()
1957 cval->control = UAC2_CS_CONTROL_CLOCK_VALID; in parse_clock_source_unit()
1959 cval->master_readonly = 1; in parse_clock_source_unit()
1961 kctl = snd_ctl_new1(&usb_bool_master_control_ctl_ro, cval); in parse_clock_source_unit()
1964 usb_mixer_elem_info_free(cval); in parse_clock_source_unit()
1977 return snd_usb_mixer_add_control(&cval->head, kctl); in parse_clock_source_unit()
2159 struct usb_mixer_elem_info *cval; in build_mixer_unit_ctl() local
2168 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_mixer_unit_ctl()
2169 if (!cval) in build_mixer_unit_ctl()
2172 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_mixer_unit_ctl()
2173 cval->control = in_ch + 1; /* based on 1 */ in build_mixer_unit_ctl()
2174 cval->val_type = USB_MIXER_S16; in build_mixer_unit_ctl()
2179 cval->cmask |= BIT(i); in build_mixer_unit_ctl()
2180 cval->channels++; in build_mixer_unit_ctl()
2185 get_min_max(cval, 0); in build_mixer_unit_ctl()
2187 kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval); in build_mixer_unit_ctl()
2190 usb_mixer_elem_info_free(cval); in build_mixer_unit_ctl()
2205 cval->head.id, kctl->id.name, cval->channels, cval->min, cval->max); in build_mixer_unit_ctl()
2206 snd_usb_mixer_add_control(&cval->head, kctl); in build_mixer_unit_ctl()
2305 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_procunit_get() local
2308 err = get_cur_ctl_value(cval, cval->control << 8, &val); in mixer_ctl_procunit_get()
2310 ucontrol->value.integer.value[0] = cval->min; in mixer_ctl_procunit_get()
2311 return filter_error(cval, err); in mixer_ctl_procunit_get()
2313 val = get_relative_value(cval, val); in mixer_ctl_procunit_get()
2322 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_procunit_put() local
2325 err = get_cur_ctl_value(cval, cval->control << 8, &oval); in mixer_ctl_procunit_put()
2327 return filter_error(cval, err); in mixer_ctl_procunit_put()
2329 if (val < 0 || val > get_max_exposed(cval)) in mixer_ctl_procunit_put()
2331 val = get_abs_value(cval, val); in mixer_ctl_procunit_put()
2333 set_cur_ctl_value(cval, cval->control << 8, val); in mixer_ctl_procunit_put()
2470 struct usb_mixer_elem_info *cval; in build_audio_procunit() local
2516 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in build_audio_procunit()
2517 if (!cval) in build_audio_procunit()
2519 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_audio_procunit()
2520 cval->control = valinfo->control; in build_audio_procunit()
2521 cval->val_type = valinfo->val_type; in build_audio_procunit()
2522 cval->channels = 1; in build_audio_procunit()
2527 cval->master_readonly = 1; in build_audio_procunit()
2538 if (cval->control == UAC_UD_MODE_SELECT) in build_audio_procunit()
2542 if (cval->control == UAC3_UD_MODE_SELECT) in build_audio_procunit()
2550 cval->min = 1; in build_audio_procunit()
2551 cval->max = control_spec[0]; in build_audio_procunit()
2552 cval->res = 1; in build_audio_procunit()
2553 cval->initialized = 1; in build_audio_procunit()
2557 get_min_max(cval, valinfo->min_value); in build_audio_procunit()
2565 cval->min = 0; in build_audio_procunit()
2566 cval->max = 5; in build_audio_procunit()
2567 cval->res = 1; in build_audio_procunit()
2568 cval->initialized = 1; in build_audio_procunit()
2571 get_min_max(cval, valinfo->min_value); in build_audio_procunit()
2575 err = get_cur_ctl_value(cval, cval->control << 8, &val); in build_audio_procunit()
2577 usb_mixer_elem_info_free(cval); in build_audio_procunit()
2581 kctl = snd_ctl_new1(&mixer_procunit_ctl, cval); in build_audio_procunit()
2583 usb_mixer_elem_info_free(cval); in build_audio_procunit()
2611 cval->head.id, kctl->id.name, cval->channels, in build_audio_procunit()
2612 cval->min, cval->max); in build_audio_procunit()
2614 err = snd_usb_mixer_add_control(&cval->head, kctl); in build_audio_procunit()
2657 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_info() local
2662 return snd_ctl_enum_info(uinfo, 1, cval->max, itemlist); in mixer_ctl_selector_info()
2669 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_get() local
2672 err = get_cur_ctl_value(cval, cval->control << 8, &val); in mixer_ctl_selector_get()
2675 return filter_error(cval, err); in mixer_ctl_selector_get()
2677 val = get_relative_value(cval, val); in mixer_ctl_selector_get()
2686 struct usb_mixer_elem_info *cval = kcontrol->private_data; in mixer_ctl_selector_put() local
2689 err = get_cur_ctl_value(cval, cval->control << 8, &oval); in mixer_ctl_selector_put()
2691 return filter_error(cval, err); in mixer_ctl_selector_put()
2693 if (val < 0 || val >= cval->max) /* here cval->max = # elements */ in mixer_ctl_selector_put()
2695 val = get_abs_value(cval, val); in mixer_ctl_selector_put()
2697 set_cur_ctl_value(cval, cval->control << 8, val); in mixer_ctl_selector_put()
2721 struct usb_mixer_elem_info *cval = kctl->private_data; in usb_mixer_selector_elem_free() local
2722 num_ins = cval->max; in usb_mixer_selector_elem_free()
2723 usb_mixer_elem_info_free(cval); in usb_mixer_selector_elem_free()
2744 struct usb_mixer_elem_info *cval; in parse_audio_selector_unit() local
2762 cval = kzalloc(sizeof(*cval), GFP_KERNEL); in parse_audio_selector_unit()
2763 if (!cval) in parse_audio_selector_unit()
2765 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in parse_audio_selector_unit()
2766 cval->val_type = USB_MIXER_U8; in parse_audio_selector_unit()
2767 cval->channels = 1; in parse_audio_selector_unit()
2768 cval->min = 1; in parse_audio_selector_unit()
2769 cval->max = desc->bNrInPins; in parse_audio_selector_unit()
2770 cval->res = 1; in parse_audio_selector_unit()
2771 cval->initialized = 1; in parse_audio_selector_unit()
2776 cval->control = 0; in parse_audio_selector_unit()
2782 cval->control = UAC2_CX_CLOCK_SELECTOR; in parse_audio_selector_unit()
2784 cval->control = UAC2_SU_SELECTOR; in parse_audio_selector_unit()
2810 kctl = snd_ctl_new1(&mixer_selectunit_ctl, cval); in parse_audio_selector_unit()
2858 cval->head.id, kctl->id.name, desc->bNrInPins); in parse_audio_selector_unit()
2859 return snd_usb_mixer_add_control(&cval->head, kctl); in parse_audio_selector_unit()
2866 usb_mixer_elem_info_free(cval); in parse_audio_selector_unit()
3362 struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); in snd_usb_mixer_dump_cval() local
3375 "channels=%i, type=\"%s\"\n", cval->head.id, in snd_usb_mixer_dump_cval()
3376 cval->control, cval->cmask, cval->channels, in snd_usb_mixer_dump_cval()
3377 val_types[cval->val_type]); in snd_usb_mixer_dump_cval()
3379 cval->min, cval->max, cval->dBmin, cval->dBmax); in snd_usb_mixer_dump_cval()
3678 struct usb_mixer_elem_info *cval = mixer_elem_list_to_info(list); in restore_mixer_value() local
3681 if (cval->val_type == USB_MIXER_BESPOKEN) in restore_mixer_value()
3684 if (cval->cmask) { in restore_mixer_value()
3687 if (!(cval->cmask & BIT(c))) in restore_mixer_value()
3689 if (cval->cached & BIT(c + 1)) { in restore_mixer_value()
3690 err = snd_usb_set_cur_mix_value(cval, c + 1, idx, in restore_mixer_value()
3691 cval->cache_val[idx]); in restore_mixer_value()
3699 if (cval->cached) in restore_mixer_value()
3700 snd_usb_set_cur_mix_value(cval, 0, 0, *cval->cache_val); in restore_mixer_value()