int src_mgr_destroy(struct src_mgr *src_mgr) { rsc_mgr_uninit(&src_mgr->mgr); kfree(src_mgr); return 0; }
int srcimp_mgr_destroy(struct srcimp_mgr *srcimp_mgr) { unsigned long flags; /* free src input mapper list */ spin_lock_irqsave(&srcimp_mgr->imap_lock, flags); free_input_mapper_list(&srcimp_mgr->imappers); spin_unlock_irqrestore(&srcimp_mgr->imap_lock, flags); rsc_mgr_uninit(&srcimp_mgr->mgr); kfree(srcimp_mgr); return 0; }
int srcimp_mgr_create(struct hw *hw, struct srcimp_mgr **rsrcimp_mgr) { int err; struct srcimp_mgr *srcimp_mgr; struct imapper *entry; *rsrcimp_mgr = NULL; srcimp_mgr = kzalloc(sizeof(*srcimp_mgr), GFP_KERNEL); if (!srcimp_mgr) return -ENOMEM; err = rsc_mgr_init(&srcimp_mgr->mgr, SRCIMP, SRCIMP_RESOURCE_NUM, hw); if (err) goto error1; spin_lock_init(&srcimp_mgr->mgr_lock); spin_lock_init(&srcimp_mgr->imap_lock); INIT_LIST_HEAD(&srcimp_mgr->imappers); entry = kzalloc(sizeof(*entry), GFP_KERNEL); if (!entry) { err = -ENOMEM; goto error2; } entry->slot = entry->addr = entry->next = entry->user = 0; list_add(&entry->list, &srcimp_mgr->imappers); srcimp_mgr->init_imap = entry; srcimp_mgr->init_imap_added = 1; srcimp_mgr->get_srcimp = get_srcimp_rsc; srcimp_mgr->put_srcimp = put_srcimp_rsc; srcimp_mgr->imap_add = srcimp_imap_add; srcimp_mgr->imap_delete = srcimp_imap_delete; srcimp_mgr->card = hw->card; *rsrcimp_mgr = srcimp_mgr; return 0; error2: rsc_mgr_uninit(&srcimp_mgr->mgr); error1: kfree(srcimp_mgr); return err; }
int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr) { rsc_mgr_uninit(&amixer_mgr->mgr); kfree(amixer_mgr); return 0; }