Lines Matching refs:ctl
58 struct mixer_ctl *ctl;
72 if (mixer->ctl) {
74 if (mixer->ctl[n].ename) {
75 unsigned int max = mixer->ctl[n].info->value.enumerated.items;
77 free(mixer->ctl[n].ename[m]);
78 free(mixer->ctl[n].ename);
81 free(mixer->ctl);
115 mixer->ctl = calloc(elist.count, sizeof(struct mixer_ctl));
117 if (!mixer->ctl || !mixer->elem_info)
139 mixer->ctl[n].info = ei;
140 mixer->ctl[n].mixer = mixer;
145 mixer->ctl[n].ename = enames;
189 return mixer->ctl + id;
203 return mixer->ctl + n;
208 void mixer_ctl_update(struct mixer_ctl *ctl)
210 ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_INFO, ctl->info);
213 const char *mixer_ctl_get_name(struct mixer_ctl *ctl)
215 if (!ctl)
218 return (const char *)ctl->info->id.name;
221 enum mixer_ctl_type mixer_ctl_get_type(struct mixer_ctl *ctl)
223 if (!ctl)
226 switch (ctl->info->type) {
237 const char *mixer_ctl_get_type_string(struct mixer_ctl *ctl)
239 if (!ctl)
242 switch (ctl->info->type) {
253 unsigned int mixer_ctl_get_num_values(struct mixer_ctl *ctl)
255 if (!ctl)
258 return ctl->info->count;
285 int mixer_ctl_get_percent(struct mixer_ctl *ctl, unsigned int id)
287 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER))
290 return int_to_percent(ctl->info, mixer_ctl_get_value(ctl, id));
293 int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent)
295 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER))
298 return mixer_ctl_set_value(ctl, id, percent_to_int(ctl->info, percent));
301 int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id)
306 if (!ctl || (id >= ctl->info->count))
310 ev.id.numid = ctl->info->id.numid;
311 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
315 switch (ctl->info->type) {
335 int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count)
342 if (!ctl || (count > ctl->info->count) || !count || !array)
346 ev.id.numid = ctl->info->id.numid;
348 switch (ctl->info->type) {
351 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
360 if (ctl->info->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE) {
369 tlv->numid = ctl->info->id.numid;
371 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_TLV_READ, tlv);
380 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
402 int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value)
407 if (!ctl || (id >= ctl->info->count))
411 ev.id.numid = ctl->info->id.numid;
412 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev);
416 switch (ctl->info->type) {
437 return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
440 int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count)
446 if (!ctl || (count > ctl->info->count) || !count || !array)
450 ev.id.numid = ctl->info->id.numid;
452 switch (ctl->info->type) {
461 if (ctl->info->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE) {
469 tlv->numid = ctl->info->id.numid;
473 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_TLV_WRITE, tlv);
494 return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
497 int mixer_ctl_get_range_min(struct mixer_ctl *ctl)
499 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER))
502 return ctl->info->value.integer.min;
505 int mixer_ctl_get_range_max(struct mixer_ctl *ctl)
507 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER))
510 return ctl->info->value.integer.max;
513 unsigned int mixer_ctl_get_num_enums(struct mixer_ctl *ctl)
515 if (!ctl)
518 return ctl->info->value.enumerated.items;
521 const char *mixer_ctl_get_enum_string(struct mixer_ctl *ctl,
524 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_ENUMERATED) ||
525 (enum_id >= ctl->info->value.enumerated.items))
528 return (const char *)ctl->ename[enum_id];
531 int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string)
537 if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_ENUMERATED))
540 num_enums = ctl->info->value.enumerated.items;
542 if (!strcmp(string, ctl->ename[i])) {
545 ev.id.numid = ctl->info->id.numid;
546 ret = ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);