Lines Matching refs:kctl

196 static int snd_ctl_new(struct snd_kcontrol **kctl, unsigned int count,  in snd_ctl_new()  argument
204 *kctl = kzalloc(struct_size(*kctl, vd, count), GFP_KERNEL); in snd_ctl_new()
205 if (!*kctl) in snd_ctl_new()
209 (*kctl)->vd[idx].access = access; in snd_ctl_new()
210 (*kctl)->vd[idx].owner = file; in snd_ctl_new()
212 (*kctl)->count = count; in snd_ctl_new()
231 struct snd_kcontrol *kctl; in snd_ctl_new1() local
253 err = snd_ctl_new(&kctl, count, access, NULL); in snd_ctl_new1()
258 kctl->id.iface = ncontrol->iface; in snd_ctl_new1()
259 kctl->id.device = ncontrol->device; in snd_ctl_new1()
260 kctl->id.subdevice = ncontrol->subdevice; in snd_ctl_new1()
262 strlcpy(kctl->id.name, ncontrol->name, sizeof(kctl->id.name)); in snd_ctl_new1()
263 if (strcmp(ncontrol->name, kctl->id.name) != 0) in snd_ctl_new1()
265 ncontrol->name, kctl->id.name); in snd_ctl_new1()
267 kctl->id.index = ncontrol->index; in snd_ctl_new1()
269 kctl->info = ncontrol->info; in snd_ctl_new1()
270 kctl->get = ncontrol->get; in snd_ctl_new1()
271 kctl->put = ncontrol->put; in snd_ctl_new1()
272 kctl->tlv.p = ncontrol->tlv.p; in snd_ctl_new1()
274 kctl->private_value = ncontrol->private_value; in snd_ctl_new1()
275 kctl->private_data = private_data; in snd_ctl_new1()
277 return kctl; in snd_ctl_new1()
302 struct snd_kcontrol *kctl; in snd_ctl_remove_numid_conflict() local
308 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_remove_numid_conflict()
309 if (kctl->id.numid < card->last_numid + 1 + count && in snd_ctl_remove_numid_conflict()
310 kctl->id.numid + kctl->count > card->last_numid + 1) { in snd_ctl_remove_numid_conflict()
311 card->last_numid = kctl->id.numid + kctl->count - 1; in snd_ctl_remove_numid_conflict()
490 struct snd_kcontrol *kctl; in snd_ctl_remove_id() local
494 kctl = snd_ctl_find_id(card, id); in snd_ctl_remove_id()
495 if (kctl == NULL) { in snd_ctl_remove_id()
499 ret = snd_ctl_remove(card, kctl); in snd_ctl_remove_id()
519 struct snd_kcontrol *kctl; in snd_ctl_remove_user_ctl() local
523 kctl = snd_ctl_find_id(card, id); in snd_ctl_remove_user_ctl()
524 if (kctl == NULL) { in snd_ctl_remove_user_ctl()
528 if (!(kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_USER)) { in snd_ctl_remove_user_ctl()
532 for (idx = 0; idx < kctl->count; idx++) in snd_ctl_remove_user_ctl()
533 if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) { in snd_ctl_remove_user_ctl()
537 ret = snd_ctl_remove(card, kctl); in snd_ctl_remove_user_ctl()
561 struct snd_kcontrol *kctl; in snd_ctl_activate_id() local
567 kctl = snd_ctl_find_id(card, id); in snd_ctl_activate_id()
568 if (kctl == NULL) { in snd_ctl_activate_id()
572 index_offset = snd_ctl_get_ioff(kctl, id); in snd_ctl_activate_id()
573 vd = &kctl->vd[index_offset]; in snd_ctl_activate_id()
584 snd_ctl_build_ioff(id, kctl, index_offset); in snd_ctl_activate_id()
608 struct snd_kcontrol *kctl; in snd_ctl_rename_id() local
611 kctl = snd_ctl_find_id(card, src_id); in snd_ctl_rename_id()
612 if (kctl == NULL) { in snd_ctl_rename_id()
616 kctl->id = *dst_id; in snd_ctl_rename_id()
617 kctl->id.numid = card->last_numid + 1; in snd_ctl_rename_id()
618 card->last_numid += kctl->count; in snd_ctl_rename_id()
639 struct snd_kcontrol *kctl; in snd_ctl_find_numid() local
643 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_find_numid()
644 if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) in snd_ctl_find_numid()
645 return kctl; in snd_ctl_find_numid()
667 struct snd_kcontrol *kctl; in snd_ctl_find_id() local
673 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_find_id()
674 if (kctl->id.iface != id->iface) in snd_ctl_find_id()
676 if (kctl->id.device != id->device) in snd_ctl_find_id()
678 if (kctl->id.subdevice != id->subdevice) in snd_ctl_find_id()
680 if (strncmp(kctl->id.name, id->name, sizeof(kctl->id.name))) in snd_ctl_find_id()
682 if (kctl->id.index > id->index) in snd_ctl_find_id()
684 if (kctl->id.index + kctl->count <= id->index) in snd_ctl_find_id()
686 return kctl; in snd_ctl_find_id()
721 struct snd_kcontrol *kctl; in snd_ctl_elem_list() local
735 list_for_each_entry(kctl, &card->controls, list) { in snd_ctl_elem_list()
736 if (offset >= kctl->count) { in snd_ctl_elem_list()
737 offset -= kctl->count; in snd_ctl_elem_list()
740 for (jidx = offset; jidx < kctl->count; jidx++) { in snd_ctl_elem_list()
741 snd_ctl_build_ioff(&id, kctl, jidx); in snd_ctl_elem_list()
795 struct snd_kcontrol *kctl; in snd_ctl_elem_info() local
801 kctl = snd_ctl_find_id(card, &info->id); in snd_ctl_elem_info()
802 if (kctl == NULL) { in snd_ctl_elem_info()
809 result = kctl->info(kctl, info); in snd_ctl_elem_info()
812 index_offset = snd_ctl_get_ioff(kctl, &info->id); in snd_ctl_elem_info()
813 vd = &kctl->vd[index_offset]; in snd_ctl_elem_info()
814 snd_ctl_build_ioff(&info->id, kctl, index_offset); in snd_ctl_elem_info()
851 struct snd_kcontrol *kctl; in snd_ctl_elem_read() local
855 kctl = snd_ctl_find_id(card, &control->id); in snd_ctl_elem_read()
856 if (kctl == NULL) in snd_ctl_elem_read()
859 index_offset = snd_ctl_get_ioff(kctl, &control->id); in snd_ctl_elem_read()
860 vd = &kctl->vd[index_offset]; in snd_ctl_elem_read()
861 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_READ) || kctl->get == NULL) in snd_ctl_elem_read()
864 snd_ctl_build_ioff(&control->id, kctl, index_offset); in snd_ctl_elem_read()
865 return kctl->get(kctl, control); in snd_ctl_elem_read()
898 struct snd_kcontrol *kctl; in snd_ctl_elem_write() local
903 kctl = snd_ctl_find_id(card, &control->id); in snd_ctl_elem_write()
904 if (kctl == NULL) in snd_ctl_elem_write()
907 index_offset = snd_ctl_get_ioff(kctl, &control->id); in snd_ctl_elem_write()
908 vd = &kctl->vd[index_offset]; in snd_ctl_elem_write()
909 if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kctl->put == NULL || in snd_ctl_elem_write()
914 snd_ctl_build_ioff(&control->id, kctl, index_offset); in snd_ctl_elem_write()
915 result = kctl->put(kctl, control); in snd_ctl_elem_write()
961 struct snd_kcontrol *kctl; in snd_ctl_elem_lock() local
968 kctl = snd_ctl_find_id(card, &id); in snd_ctl_elem_lock()
969 if (kctl == NULL) { in snd_ctl_elem_lock()
972 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_elem_lock()
989 struct snd_kcontrol *kctl; in snd_ctl_elem_unlock() local
996 kctl = snd_ctl_find_id(card, &id); in snd_ctl_elem_unlock()
997 if (kctl == NULL) { in snd_ctl_elem_unlock()
1000 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_elem_unlock()
1089 static int replace_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, in replace_user_tlv() argument
1092 struct user_element *ue = kctl->private_data; in replace_user_tlv()
1116 for (i = 0; i < kctl->count; ++i) in replace_user_tlv()
1117 kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; in replace_user_tlv()
1126 for (i = 0; i < kctl->count; ++i) { in replace_user_tlv()
1127 snd_ctl_build_ioff(&id, kctl, i); in replace_user_tlv()
1134 static int read_user_tlv(struct snd_kcontrol *kctl, unsigned int __user *buf, in read_user_tlv() argument
1137 struct user_element *ue = kctl->private_data; in read_user_tlv()
1151 static int snd_ctl_elem_user_tlv(struct snd_kcontrol *kctl, int op_flag, in snd_ctl_elem_user_tlv() argument
1155 return replace_user_tlv(kctl, buf, size); in snd_ctl_elem_user_tlv()
1157 return read_user_tlv(kctl, buf, size); in snd_ctl_elem_user_tlv()
1224 struct snd_kcontrol *kctl; in snd_ctl_elem_add() local
1293 err = snd_ctl_new(&kctl, count, access, file); in snd_ctl_elem_add()
1296 memcpy(&kctl->id, &info->id, sizeof(kctl->id)); in snd_ctl_elem_add()
1297 kctl->private_data = kzalloc(sizeof(struct user_element) + private_size * count, in snd_ctl_elem_add()
1299 if (kctl->private_data == NULL) { in snd_ctl_elem_add()
1300 kfree(kctl); in snd_ctl_elem_add()
1303 kctl->private_free = snd_ctl_elem_user_free; in snd_ctl_elem_add()
1306 ue = (struct user_element *)kctl->private_data; in snd_ctl_elem_add()
1315 snd_ctl_free_one(kctl); in snd_ctl_elem_add()
1322 kctl->info = snd_ctl_elem_user_enum_info; in snd_ctl_elem_add()
1324 kctl->info = snd_ctl_elem_user_info; in snd_ctl_elem_add()
1326 kctl->get = snd_ctl_elem_user_get; in snd_ctl_elem_add()
1328 kctl->put = snd_ctl_elem_user_put; in snd_ctl_elem_add()
1330 kctl->tlv.c = snd_ctl_elem_user_tlv; in snd_ctl_elem_add()
1334 err = __snd_ctl_add_replace(card, kctl, CTL_ADD_EXCLUSIVE); in snd_ctl_elem_add()
1336 snd_ctl_free_one(kctl); in snd_ctl_elem_add()
1339 offset = snd_ctl_get_ioff(kctl, &info->id); in snd_ctl_elem_add()
1340 snd_ctl_build_ioff(&info->id, kctl, offset); in snd_ctl_elem_add()
1407 struct snd_kcontrol *kctl, in call_tlv_handler() argument
1419 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; in call_tlv_handler()
1430 if (kctl->tlv.c == NULL) in call_tlv_handler()
1437 return kctl->tlv.c(kctl, op_flag, size, buf); in call_tlv_handler()
1440 static int read_tlv_buf(struct snd_kcontrol *kctl, struct snd_ctl_elem_id *id, in read_tlv_buf() argument
1443 struct snd_kcontrol_volatile *vd = &kctl->vd[snd_ctl_get_ioff(kctl, id)]; in read_tlv_buf()
1449 if (kctl->tlv.p == NULL) in read_tlv_buf()
1452 len = sizeof(unsigned int) * 2 + kctl->tlv.p[1]; in read_tlv_buf()
1456 if (copy_to_user(buf, kctl->tlv.p, len)) in read_tlv_buf()
1469 struct snd_kcontrol *kctl; in snd_ctl_tlv_ioctl() local
1486 kctl = snd_ctl_find_numid(file->card, header.numid); in snd_ctl_tlv_ioctl()
1487 if (kctl == NULL) in snd_ctl_tlv_ioctl()
1491 id = kctl->id; in snd_ctl_tlv_ioctl()
1492 snd_ctl_build_ioff(&id, kctl, header.numid - id.numid); in snd_ctl_tlv_ioctl()
1493 vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; in snd_ctl_tlv_ioctl()
1496 return call_tlv_handler(file, op_flag, kctl, &id, container, in snd_ctl_tlv_ioctl()
1500 return read_tlv_buf(kctl, &id, container, in snd_ctl_tlv_ioctl()
1762 struct snd_ctl_file *kctl; in snd_ctl_get_preferred_subdevice() local
1766 list_for_each_entry(kctl, &card->ctl_files, list) { in snd_ctl_get_preferred_subdevice()
1767 if (kctl->pid == task_pid(current)) { in snd_ctl_get_preferred_subdevice()
1768 subdevice = kctl->preferred_subdevice[type]; in snd_ctl_get_preferred_subdevice()