Lines Matching refs:ctl
48 struct snd_ctl_file *ctl; in snd_ctl_open() local
69 ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); in snd_ctl_open()
70 if (ctl == NULL) { in snd_ctl_open()
74 INIT_LIST_HEAD(&ctl->events); in snd_ctl_open()
75 init_waitqueue_head(&ctl->change_sleep); in snd_ctl_open()
76 spin_lock_init(&ctl->read_lock); in snd_ctl_open()
77 ctl->card = card; in snd_ctl_open()
79 ctl->preferred_subdevice[i] = -1; in snd_ctl_open()
80 ctl->pid = get_pid(task_pid(current)); in snd_ctl_open()
81 file->private_data = ctl; in snd_ctl_open()
83 list_add_tail(&ctl->list, &card->ctl_files); in snd_ctl_open()
97 static void snd_ctl_empty_read_queue(struct snd_ctl_file * ctl) in snd_ctl_empty_read_queue() argument
101 guard(spinlock_irqsave)(&ctl->read_lock); in snd_ctl_empty_read_queue()
102 while (!list_empty(&ctl->events)) { in snd_ctl_empty_read_queue()
103 cread = snd_kctl_event(ctl->events.next); in snd_ctl_empty_read_queue()
112 struct snd_ctl_file *ctl; in snd_ctl_release() local
116 ctl = file->private_data; in snd_ctl_release()
118 card = ctl->card; in snd_ctl_release()
121 list_del(&ctl->list); in snd_ctl_release()
126 if (control->vd[idx].owner == ctl) in snd_ctl_release()
130 snd_fasync_free(ctl->fasync); in snd_ctl_release()
131 snd_ctl_empty_read_queue(ctl); in snd_ctl_release()
132 put_pid(ctl->pid); in snd_ctl_release()
133 kfree(ctl); in snd_ctl_release()
152 struct snd_ctl_file *ctl; in snd_ctl_notify() local
164 list_for_each_entry(ctl, &card->ctl_files, list) { in snd_ctl_notify()
165 if (!ctl->subscribed) in snd_ctl_notify()
167 scoped_guard(spinlock, &ctl->read_lock) { in snd_ctl_notify()
168 list_for_each_entry(ev, &ctl->events, list) { in snd_ctl_notify()
178 list_add_tail(&ev->list, &ctl->events); in snd_ctl_notify()
183 wake_up(&ctl->change_sleep); in snd_ctl_notify()
185 snd_kill_fasync(ctl->fasync, SIGIO, POLL_IN); in snd_ctl_notify()
867 static int snd_ctl_card_info(struct snd_card *card, struct snd_ctl_file * ctl, in snd_ctl_card_info() argument
1128 struct snd_ctl_file *ctl) in __snd_ctl_elem_info() argument
1146 if (vd->owner == ctl) in __snd_ctl_elem_info()
1159 static int snd_ctl_elem_info(struct snd_ctl_file *ctl, in snd_ctl_elem_info() argument
1162 struct snd_card *card = ctl->card; in snd_ctl_elem_info()
1169 return __snd_ctl_elem_info(card, kctl, info, ctl); in snd_ctl_elem_info()
1172 static int snd_ctl_elem_info_user(struct snd_ctl_file *ctl, in snd_ctl_elem_info_user() argument
1175 struct snd_card *card = ctl->card; in snd_ctl_elem_info_user()
1184 result = snd_ctl_elem_info(ctl, &info); in snd_ctl_elem_info_user()
1901 struct snd_ctl_file *ctl; in snd_ctl_ioctl() local
1908 ctl = file->private_data; in snd_ctl_ioctl()
1909 card = ctl->card; in snd_ctl_ioctl()
1916 return snd_ctl_card_info(card, ctl, cmd, argp); in snd_ctl_ioctl()
1920 return snd_ctl_elem_info_user(ctl, argp); in snd_ctl_ioctl()
1924 return snd_ctl_elem_write_user(ctl, argp); in snd_ctl_ioctl()
1926 return snd_ctl_elem_lock(ctl, argp); in snd_ctl_ioctl()
1928 return snd_ctl_elem_unlock(ctl, argp); in snd_ctl_ioctl()
1930 return snd_ctl_elem_add_user(ctl, argp, 0); in snd_ctl_ioctl()
1932 return snd_ctl_elem_add_user(ctl, argp, 1); in snd_ctl_ioctl()
1934 return snd_ctl_elem_remove(ctl, argp); in snd_ctl_ioctl()
1936 return snd_ctl_subscribe_events(ctl, ip); in snd_ctl_ioctl()
1942 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_READ); in snd_ctl_ioctl()
1950 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_WRITE); in snd_ctl_ioctl()
1958 err = snd_ctl_tlv_ioctl(ctl, argp, SNDRV_CTL_TLV_OP_CMD); in snd_ctl_ioctl()
1969 err = p->fioctl(card, ctl, cmd, arg); in snd_ctl_ioctl()
1980 struct snd_ctl_file *ctl; in snd_ctl_read() local
1984 ctl = file->private_data; in snd_ctl_read()
1985 if (snd_BUG_ON(!ctl || !ctl->card)) in snd_ctl_read()
1987 if (!ctl->subscribed) in snd_ctl_read()
1991 spin_lock_irq(&ctl->read_lock); in snd_ctl_read()
1995 while (list_empty(&ctl->events)) { in snd_ctl_read()
2002 add_wait_queue(&ctl->change_sleep, &wait); in snd_ctl_read()
2004 spin_unlock_irq(&ctl->read_lock); in snd_ctl_read()
2006 remove_wait_queue(&ctl->change_sleep, &wait); in snd_ctl_read()
2007 if (ctl->card->shutdown) in snd_ctl_read()
2011 spin_lock_irq(&ctl->read_lock); in snd_ctl_read()
2013 kev = snd_kctl_event(ctl->events.next); in snd_ctl_read()
2018 spin_unlock_irq(&ctl->read_lock); in snd_ctl_read()
2024 spin_lock_irq(&ctl->read_lock); in snd_ctl_read()
2030 spin_unlock_irq(&ctl->read_lock); in snd_ctl_read()
2038 struct snd_ctl_file *ctl; in snd_ctl_poll() local
2040 ctl = file->private_data; in snd_ctl_poll()
2041 if (!ctl->subscribed) in snd_ctl_poll()
2043 poll_wait(file, &ctl->change_sleep, wait); in snd_ctl_poll()
2046 if (!list_empty(&ctl->events)) in snd_ctl_poll()
2149 struct snd_ctl_file *ctl; in snd_ctl_fasync() local
2151 ctl = file->private_data; in snd_ctl_fasync()
2152 return snd_fasync_helper(fd, file, on, &ctl->fasync); in snd_ctl_fasync()
2310 struct snd_ctl_file *ctl; in snd_ctl_dev_disconnect() local
2313 list_for_each_entry(ctl, &card->ctl_files, list) { in snd_ctl_dev_disconnect()
2314 wake_up(&ctl->change_sleep); in snd_ctl_dev_disconnect()
2315 snd_kill_fasync(ctl->fasync, SIGIO, POLL_ERR); in snd_ctl_dev_disconnect()