int sum_mgr_create(void *hw, struct sum_mgr **rsum_mgr) { int err; struct sum_mgr *sum_mgr; *rsum_mgr = NULL; sum_mgr = kzalloc(sizeof(*sum_mgr), GFP_KERNEL); if (NULL == sum_mgr) return -ENOMEM; err = rsc_mgr_init(&sum_mgr->mgr, SUM, SUM_RESOURCE_NUM, hw); if (err) goto error; spin_lock_init(&sum_mgr->mgr_lock); sum_mgr->get_sum = get_sum_rsc; sum_mgr->put_sum = put_sum_rsc; *rsum_mgr = sum_mgr; return 0; error: kfree(sum_mgr); return err; }
int amixer_mgr_create(void *hw, struct amixer_mgr **ramixer_mgr) { int err; struct amixer_mgr *amixer_mgr; *ramixer_mgr = NULL; amixer_mgr = kzalloc(sizeof(*amixer_mgr), GFP_KERNEL); if (NULL == amixer_mgr) return -ENOMEM; err = rsc_mgr_init(&amixer_mgr->mgr, AMIXER, AMIXER_RESOURCE_NUM, hw); if (err) goto error; spin_lock_init(&amixer_mgr->mgr_lock); amixer_mgr->get_amixer = get_amixer_rsc; amixer_mgr->put_amixer = put_amixer_rsc; *ramixer_mgr = amixer_mgr; return 0; error: kfree(amixer_mgr); return err; }
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 src_mgr_create(struct hw *hw, struct src_mgr **rsrc_mgr) { int err, i; struct src_mgr *src_mgr; *rsrc_mgr = NULL; src_mgr = kzalloc(sizeof(*src_mgr), GFP_KERNEL); if (!src_mgr) return -ENOMEM; err = rsc_mgr_init(&src_mgr->mgr, SRC, SRC_RESOURCE_NUM, hw); if (err) goto error1; spin_lock_init(&src_mgr->mgr_lock); conj_mask = hw->src_dirty_conj_mask(); src_mgr->get_src = get_src_rsc; src_mgr->put_src = put_src_rsc; src_mgr->src_enable_s = src_enable_s; src_mgr->src_enable = src_enable; src_mgr->src_disable = src_disable; src_mgr->commit_write = src_mgr_commit_write; src_mgr->card = hw->card; /* Disable all SRC resources. */ for (i = 0; i < 256; i++) hw->src_mgr_dsb_src(src_mgr->mgr.ctrl_blk, i); hw->src_mgr_commit_write(hw, src_mgr->mgr.ctrl_blk); *rsrc_mgr = src_mgr; return 0; error1: kfree(src_mgr); return err; }