Lines Matching refs:kctl

205 			struct snd_kcontrol *kctl, unsigned int ioff)  in snd_ctl_notify_one()  argument
207 struct snd_ctl_elem_id id = kctl->id; in snd_ctl_notify_one()
215 lops->lnotify(card, mask, kctl, ioff); in snd_ctl_notify_one()
233 static int snd_ctl_new(struct snd_kcontrol **kctl, unsigned int count, in snd_ctl_new() argument
241 *kctl = kzalloc(struct_size(*kctl, vd, count), GFP_KERNEL); in snd_ctl_new()
242 if (!*kctl) in snd_ctl_new()
246 (*kctl)->vd[idx].access = access; in snd_ctl_new()
247 (*kctl)->vd[idx].owner = file; in snd_ctl_new()
249 (*kctl)->count = count; in snd_ctl_new()
268 struct snd_kcontrol *kctl; in snd_ctl_new1() local
292 err = snd_ctl_new(&kctl, count, access, NULL); in snd_ctl_new1()
297 kctl->id.iface = ncontrol->iface; in snd_ctl_new1()
298 kctl->id.device = ncontrol->device; in snd_ctl_new1()
299 kctl->id.subdevice = ncontrol->subdevice; in snd_ctl_new1()
301 strscpy(kctl->id.name, ncontrol->name, sizeof(kctl->id.name)); in snd_ctl_new1()
302 if (strcmp(ncontrol->name, kctl->id.name) != 0) in snd_ctl_new1()
304 ncontrol->name, kctl->id.name); in snd_ctl_new1()
306 kctl->id.index = ncontrol->index; in snd_ctl_new1()
308 kctl->info = ncontrol->info; in snd_ctl_new1()
309 kctl->get = ncontrol->get; in snd_ctl_new1()
310 kctl->put = ncontrol->put; in snd_ctl_new1()
311 kctl->tlv.p = ncontrol->tlv.p; in snd_ctl_new1()
313 kctl->private_value = ncontrol->private_value; in snd_ctl_new1()
314 kctl->private_data = private_data; in snd_ctl_new1()
316 return kctl; in snd_ctl_new1()
341 struct snd_kcontrol *kctl; in snd_ctl_remove_numid_conflict() local
347 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_remove_numid_conflict()
348 if (kctl->id.numid < card->last_numid + 1 + count && in snd_ctl_remove_numid_conflict()
349 kctl->id.numid + kctl->count > card->last_numid + 1) { in snd_ctl_remove_numid_conflict()
350 card->last_numid = kctl->id.numid + kctl->count - 1; in snd_ctl_remove_numid_conflict()
372 static bool elem_id_matches(const struct snd_kcontrol *kctl, in elem_id_matches() argument
375 return kctl->id.iface == id->iface && in elem_id_matches()
376 kctl->id.device == id->device && in elem_id_matches()
377 kctl->id.subdevice == id->subdevice && in elem_id_matches()
378 !strncmp(kctl->id.name, id->name, sizeof(kctl->id.name)) && in elem_id_matches()
379 kctl->id.index <= id->index && in elem_id_matches()
380 kctl->id.index + kctl->count > id->index; in elem_id_matches()
640 struct snd_kcontrol *kctl; in snd_ctl_remove_id() local
644 kctl = snd_ctl_find_id_locked(card, id); in snd_ctl_remove_id()
645 if (kctl == NULL) { in snd_ctl_remove_id()
649 ret = snd_ctl_remove_locked(card, kctl); in snd_ctl_remove_id()
669 struct snd_kcontrol *kctl; in snd_ctl_remove_user_ctl() local
673 kctl = snd_ctl_find_id_locked(card, id); in snd_ctl_remove_user_ctl()
674 if (kctl == NULL) { in snd_ctl_remove_user_ctl()
678 if (!(kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_USER)) { in snd_ctl_remove_user_ctl()
682 for (idx = 0; idx < kctl->count; idx++) in snd_ctl_remove_user_ctl()
683 if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) { in snd_ctl_remove_user_ctl()
687 ret = snd_ctl_remove_locked(card, kctl); in snd_ctl_remove_user_ctl()
708 struct snd_kcontrol *kctl; in snd_ctl_activate_id() local
714 kctl = snd_ctl_find_id_locked(card, id); in snd_ctl_activate_id()
715 if (kctl == NULL) { in snd_ctl_activate_id()
719 index_offset = snd_ctl_get_ioff(kctl, id); in snd_ctl_activate_id()
720 vd = &kctl->vd[index_offset]; in snd_ctl_activate_id()
731 snd_ctl_build_ioff(id, kctl, index_offset); in snd_ctl_activate_id()
733 snd_ctl_notify_one(card, SNDRV_CTL_EVENT_MASK_INFO, kctl, index_offset); in snd_ctl_activate_id()
764 struct snd_kcontrol *kctl; in snd_ctl_rename_id() local
768 kctl = snd_ctl_find_id_locked(card, src_id); in snd_ctl_rename_id()
769 if (kctl == NULL) { in snd_ctl_rename_id()
773 saved_numid = kctl->id.numid; in snd_ctl_rename_id()
774 remove_hash_entries(card, kctl); in snd_ctl_rename_id()
775 kctl->id = *dst_id; in snd_ctl_rename_id()
776 kctl->id.numid = saved_numid; in snd_ctl_rename_id()
777 add_hash_entries(card, kctl); in snd_ctl_rename_id()
793 void snd_ctl_rename(struct snd_card *card, struct snd_kcontrol *kctl, in snd_ctl_rename() argument
797 remove_hash_entries(card, kctl); in snd_ctl_rename()
799 if (strscpy(kctl->id.name, name, sizeof(kctl->id.name)) < 0) in snd_ctl_rename()
801 name, kctl->id.name); in snd_ctl_rename()
803 add_hash_entries(card, kctl); in snd_ctl_rename()
812 struct snd_kcontrol *kctl; in snd_ctl_find_numid_slow() local
814 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_find_numid_slow()
815 if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) in snd_ctl_find_numid_slow()
816 return kctl; in snd_ctl_find_numid_slow()
862 struct snd_kcontrol *kctl; in snd_ctl_find_numid() local
865 kctl = snd_ctl_find_numid_locked(card, numid); in snd_ctl_find_numid()
867 return kctl; in snd_ctl_find_numid()
886 struct snd_kcontrol *kctl; in snd_ctl_find_id_locked() local
894 kctl = xa_load(&card->ctl_hash, get_ctl_id_hash(id)); in snd_ctl_find_id_locked()
895 if (kctl && elem_id_matches(kctl, id)) in snd_ctl_find_id_locked()
896 return kctl; in snd_ctl_find_id_locked()
901 list_for_each_entry(kctl, &card->controls, list) in snd_ctl_find_id_locked()
902 if (elem_id_matches(kctl, id)) in snd_ctl_find_id_locked()
903 return kctl; in snd_ctl_find_id_locked()
923 struct snd_kcontrol *kctl; in snd_ctl_find_id() local
926 kctl = snd_ctl_find_id_locked(card, id); in snd_ctl_find_id()
928 return kctl; in snd_ctl_find_id()
960 struct snd_kcontrol *kctl; in snd_ctl_elem_list() local
972 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_elem_list()
973 if (offset >= kctl->count) { in snd_ctl_elem_list()
974 offset -= kctl->count; in snd_ctl_elem_list()
977 for (jidx = offset; jidx < kctl->count; jidx++) { in snd_ctl_elem_list()
978 snd_ctl_build_ioff(&id, kctl, jidx); in snd_ctl_elem_list()
1200 struct snd_kcontrol *kctl, in __snd_ctl_elem_info() argument
1213 result = kctl->info(kctl, info); in __snd_ctl_elem_info()
1217 index_offset = snd_ctl_get_ioff(kctl, &info->id); in __snd_ctl_elem_info()
1218 vd = &kctl->vd[index_offset]; in __snd_ctl_elem_info()
1219 snd_ctl_build_ioff(&info->id, kctl, index_offset); in __snd_ctl_elem_info()
1240 struct snd_kcontrol *kctl; in snd_ctl_elem_info() local
1244 kctl = snd_ctl_find_id_locked(card, &info->id); in snd_ctl_elem_info()
1245 if (kctl == NULL) in snd_ctl_elem_info()
1248 result = __snd_ctl_elem_info(card, kctl, info, ctl); in snd_ctl_elem_info()
1275 struct snd_kcontrol *kctl; in snd_ctl_elem_read() local
1283 kctl = snd_ctl_find_id_locked(card, &control->id); in snd_ctl_elem_read()
1284 if (kctl == NULL) { in snd_ctl_elem_read()
1289 index_offset = snd_ctl_get_ioff(kctl, &control->id); in snd_ctl_elem_read()
1290 vd = &kctl->vd[index_offset]; in snd_ctl_elem_read()
1291 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_READ) || kctl->get == NULL) { in snd_ctl_elem_read()
1296 snd_ctl_build_ioff(&control->id, kctl, index_offset); in snd_ctl_elem_read()
1302 ret = __snd_ctl_elem_info(card, kctl, &info, NULL); in snd_ctl_elem_read()
1311 ret = kctl->get(kctl, control); in snd_ctl_elem_read()
1354 struct snd_kcontrol *kctl; in snd_ctl_elem_write() local
1360 kctl = snd_ctl_find_id_locked(card, &control->id); in snd_ctl_elem_write()
1361 if (kctl == NULL) { in snd_ctl_elem_write()
1366 index_offset = snd_ctl_get_ioff(kctl, &control->id); in snd_ctl_elem_write()
1367 vd = &kctl->vd[index_offset]; in snd_ctl_elem_write()
1368 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kctl->put == NULL || in snd_ctl_elem_write()
1374 snd_ctl_build_ioff(&control->id, kctl, index_offset); in snd_ctl_elem_write()
1382 result = __snd_ctl_elem_info(card, kctl, &info, NULL); in snd_ctl_elem_write()
1388 result = kctl->put(kctl, control); in snd_ctl_elem_write()
1397 snd_ctl_notify_one(card, SNDRV_CTL_EVENT_MASK_VALUE, kctl, index_offset); in snd_ctl_elem_write()
1434 struct snd_kcontrol *kctl; in snd_ctl_elem_lock() local
1441 kctl = snd_ctl_find_id_locked(card, &id); in snd_ctl_elem_lock()
1442 if (kctl == NULL) { in snd_ctl_elem_lock()
1445 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_elem_lock()
1462 struct snd_kcontrol *kctl; in snd_ctl_elem_unlock() local
1469 kctl = snd_ctl_find_id_locked(card, &id); in snd_ctl_elem_unlock()
1470 if (kctl == NULL) { in snd_ctl_elem_unlock()
1473 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_elem_unlock()
1573 static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, in replace_user_tlv() argument
1576 struct user_element *ue = kctl->private_data; in replace_user_tlv()
1605 for (i = 0; i < kctl->count; ++i) in replace_user_tlv()
1606 kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; in replace_user_tlv()
1620 for (i = 0; i < kctl->count; ++i) in replace_user_tlv()
1621 snd_ctl_notify_one(ue->card, mask, kctl, i); in replace_user_tlv()
1626 static int read_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, in read_user_tlv() argument
1629 struct user_element *ue = kctl->private_data; in read_user_tlv()
1643 static int snd_ctl_elem_user_tlv(struct snd_kcontrol *kctl, int op_flag, in snd_ctl_elem_user_tlv() argument
1647 return replace_user_tlv(kctl, buf, size); in snd_ctl_elem_user_tlv()
1649 return read_user_tlv(kctl, buf, size); in snd_ctl_elem_user_tlv()
1716 struct snd_kcontrol *kctl; in snd_ctl_elem_add() local
1782 err = snd_ctl_new(&kctl, count, access, file); in snd_ctl_elem_add()
1785 memcpy(&kctl->id, &info->id, sizeof(kctl->id)); in snd_ctl_elem_add()
1788 kfree(kctl); in snd_ctl_elem_add()
1792 kctl->private_data = ue; in snd_ctl_elem_add()
1793 kctl->private_free = snd_ctl_elem_user_free; in snd_ctl_elem_add()
1807 snd_ctl_free_one(kctl); in snd_ctl_elem_add()
1814 kctl->info = snd_ctl_elem_user_enum_info; in snd_ctl_elem_add()
1816 kctl->info = snd_ctl_elem_user_info; in snd_ctl_elem_add()
1818 kctl->get = snd_ctl_elem_user_get; in snd_ctl_elem_add()
1820 kctl->put = snd_ctl_elem_user_put; in snd_ctl_elem_add()
1822 kctl->tlv.c = snd_ctl_elem_user_tlv; in snd_ctl_elem_add()
1825 err = __snd_ctl_add_replace(card, kctl, CTL_ADD_EXCLUSIVE); in snd_ctl_elem_add()
1827 snd_ctl_free_one(kctl); in snd_ctl_elem_add()
1830 offset = snd_ctl_get_ioff(kctl, &info->id); in snd_ctl_elem_add()
1831 snd_ctl_build_ioff(&info->id, kctl, offset); in snd_ctl_elem_add()
1895 struct snd_kcontrol *kctl, in call_tlv_handler() argument
1907 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; in call_tlv_handler()
1918 if (kctl->tlv.c == NULL) in call_tlv_handler()
1928 ret = kctl->tlv.c(kctl, op_flag, size, buf); in call_tlv_handler()
1933 static int read_tlv_buf(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id, in read_tlv_buf() argument
1936 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; in read_tlv_buf()
1942 if (kctl->tlv.p == NULL) in read_tlv_buf()
1945 len = sizeof(unsigned int) * 2 + kctl->tlv.p[1]; in read_tlv_buf()
1949 if (copy_to_user(buf, kctl->tlv.p, len)) in read_tlv_buf()
1962 struct snd_kcontrol *kctl; in snd_ctl_tlv_ioctl() local
1981 kctl = snd_ctl_find_numid_locked(file->card, header.numid); in snd_ctl_tlv_ioctl()
1982 if (kctl == NULL) in snd_ctl_tlv_ioctl()
1986 id = kctl->id; in snd_ctl_tlv_ioctl()
1987 snd_ctl_build_ioff(&id, kctl, header.numid - id.numid); in snd_ctl_tlv_ioctl()
1988 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_tlv_ioctl()
1991 return call_tlv_handler(file, op_flag, kctl, &id, container, in snd_ctl_tlv_ioctl()
1995 return read_tlv_buf(kctl, &id, container, in snd_ctl_tlv_ioctl()
2261 struct snd_ctl_file *kctl; in snd_ctl_get_preferred_subdevice() local
2266 list_for_each_entry(kctl, &card->ctl_files, list) { in snd_ctl_get_preferred_subdevice()
2267 if (kctl->pid == task_pid(current)) { in snd_ctl_get_preferred_subdevice()
2268 subdevice = kctl->preferred_subdevice[type]; in snd_ctl_get_preferred_subdevice()