static int srcimp_rsc_init(struct srcimp *srcimp, const struct srcimp_desc *desc, struct srcimp_mgr *mgr) { int err; err = rsc_init(&srcimp->rsc, srcimp->idx[0], SRCIMP, desc->msr, mgr->mgr.hw); if (err) return err; /* Reserve memory for imapper nodes */ srcimp->imappers = kzalloc(sizeof(struct imapper)*desc->msr, GFP_KERNEL); if (!srcimp->imappers) { err = -ENOMEM; goto error1; } /* Set srcimp specific operations */ srcimp->rsc.ops = &srcimp_basic_rsc_ops; srcimp->ops = &srcimp_ops; srcimp->mgr = mgr; srcimp->rsc.ops->master(&srcimp->rsc); return 0; error1: rsc_uninit(&srcimp->rsc); return err; }
static int amixer_rsc_uninit(struct amixer *amixer) { amixer_setup(amixer, NULL, 0, NULL); rsc_uninit(&amixer->rsc); amixer->ops = NULL; amixer->input = NULL; amixer->sum = NULL; return 0; }
static int srcimp_rsc_uninit(struct srcimp *srcimp) { kfree(srcimp->imappers); srcimp->imappers = NULL; srcimp->ops = NULL; srcimp->mgr = NULL; rsc_uninit(&srcimp->rsc); return 0; }
static int src_rsc_uninit(struct src *src, struct src_mgr *mgr) { int i, n; struct src *p; n = (MEMRD == src->mode) ? src->multi : 1; for (i = 0, p = src; i < n; i++, p++) { mgr->src_disable(mgr, p); rsc_uninit(&p->rsc); p->multi = 0; p->ops = NULL; p->mode = NUM_SRCMODES; p->intlv = NULL; } mgr->commit_write(mgr); return 0; }
static int src_rsc_init(struct src *src, u32 idx, const struct src_desc *desc, struct src_mgr *mgr) { int err; int i, n; struct src *p; n = (MEMRD == desc->mode) ? desc->multi : 1; for (i = 0, p = src; i < n; i++, p++) { err = rsc_init(&p->rsc, idx + i, SRC, desc->msr, mgr->mgr.hw); if (err) goto error1; /* Initialize src specific rsc operations */ p->ops = &src_rsc_ops; p->multi = (0 == i) ? desc->multi : 1; p->mode = desc->mode; src_default_config[desc->mode](p); mgr->src_enable(mgr, p); p->intlv = p + 1; } (--p)->intlv = NULL; /* Set @intlv of the last SRC to NULL */ mgr->commit_write(mgr); return 0; error1: for (i--, p--; i >= 0; i--, p--) { mgr->src_disable(mgr, p); rsc_uninit(&p->rsc); } mgr->commit_write(mgr); return err; }
static int sum_rsc_uninit(struct sum *sum) { rsc_uninit(&sum->rsc); return 0; }