Lines Matching refs:elem
180 snd_hctl_elem_t *elem)
190 snd_hctl_elem_set_callback(elem, hctl_elem_event_handler);
191 snd_hctl_elem_set_callback_private(elem, bag);
195 err = c->event(c, mask, elem, NULL);
323 snd_mixer_elem_t *elem)
327 return mixer->callback(mixer, mask, elem);
331 static int snd_mixer_elem_throw_event(snd_mixer_elem_t *elem, unsigned int mask)
333 elem->class->mixer->events++;
334 if (elem->callback)
335 return elem->callback(elem, mask);
339 static int _snd_mixer_find_elem(snd_mixer_t *mixer, snd_mixer_elem_t *elem, int *dir)
344 assert(mixer && elem);
350 c = mixer->compare(elem, mixer->pelems[idx]);
364 * \param elem Mixer element
369 void *snd_mixer_elem_get_private(const snd_mixer_elem_t *elem)
371 return elem->private_data;
376 * \param elem Returned mixer element
385 int snd_mixer_elem_new(snd_mixer_elem_t **elem,
389 void (*private_free)(snd_mixer_elem_t *elem))
399 *elem = melem;
405 * \param elem Mixer element
411 int snd_mixer_elem_add(snd_mixer_elem_t *elem, snd_mixer_class_t *class)
415 elem->class = class;
428 list_add_tail(&elem->list, &mixer->elems);
429 mixer->pelems[0] = elem;
431 idx = _snd_mixer_find_elem(mixer, elem, &dir);
434 list_add(&elem->list, &mixer->pelems[idx]->list);
437 list_add_tail(&elem->list, &mixer->pelems[idx]->list);
442 mixer->pelems[idx] = elem;
445 return snd_mixer_throw_event(mixer, SND_CTL_EVENT_MASK_ADD, elem);
450 * \param elem Mixer element
455 int snd_mixer_elem_remove(snd_mixer_elem_t *elem)
457 snd_mixer_t *mixer = elem->class->mixer;
461 assert(elem);
463 idx = _snd_mixer_find_elem(mixer, elem, &dir);
466 bag_for_each_safe(i, n, &elem->helems) {
468 snd_mixer_elem_detach(elem, helem);
470 err = snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_MASK_REMOVE);
471 list_del(&elem->list);
472 snd_mixer_elem_free(elem);
484 * \param elem Mixer element
488 void snd_mixer_elem_free(snd_mixer_elem_t *elem)
490 if (elem->private_free)
491 elem->private_free(elem);
492 free(elem);
497 * \param elem Mixer element
502 int snd_mixer_elem_info(snd_mixer_elem_t *elem)
504 return snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_MASK_INFO);
509 * \param elem Mixer element
514 int snd_mixer_elem_value(snd_mixer_elem_t *elem)
516 return snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_MASK_VALUE);
537 snd_hctl_elem_t *elem;
539 elem = snd_hctl_first_elem(slave->hctl);
540 while (elem) {
541 err = class->event(class, SND_CTL_EVENT_MASK_ADD, elem, NULL);
544 elem = snd_hctl_elem_next(elem);
822 * \param elem mixer element
825 snd_mixer_elem_t *snd_mixer_elem_next(snd_mixer_elem_t *elem)
827 assert(elem);
828 if (elem->list.next == &elem->class->mixer->elems)
830 return list_entry(elem->list.next, snd_mixer_elem_t, list);
835 * \param elem mixer element
838 snd_mixer_elem_t *snd_mixer_elem_prev(snd_mixer_elem_t *elem)
840 assert(elem);
841 if (elem->list.prev == &elem->class->mixer->elems)
843 return list_entry(elem->list.prev, snd_mixer_elem_t, list);