static int get_src_rsc(struct src_mgr *mgr, const struct src_desc *desc, struct src **rsrc) { unsigned int idx = SRC_RESOURCE_NUM; int err; struct src *src; unsigned long flags; *rsrc = NULL; /* Check whether there are sufficient src resources to meet request. */ spin_lock_irqsave(&mgr->mgr_lock, flags); if (MEMRD == desc->mode) err = mgr_get_resource(&mgr->mgr, desc->multi, &idx); else err = mgr_get_resource(&mgr->mgr, 1, &idx); spin_unlock_irqrestore(&mgr->mgr_lock, flags); if (err) { dev_err(mgr->card->dev, "Can't meet SRC resource request!\n"); return err; } /* Allocate mem for master src resource */ if (MEMRD == desc->mode) src = kcalloc(desc->multi, sizeof(*src), GFP_KERNEL); else src = kzalloc(sizeof(*src), GFP_KERNEL); if (!src) { err = -ENOMEM; goto error1; } err = src_rsc_init(src, idx, desc, mgr); if (err) goto error2; *rsrc = src; return 0; error2: kfree(src); error1: spin_lock_irqsave(&mgr->mgr_lock, flags); if (MEMRD == desc->mode) mgr_put_resource(&mgr->mgr, desc->multi, idx); else mgr_put_resource(&mgr->mgr, 1, idx); spin_unlock_irqrestore(&mgr->mgr_lock, flags); return err; }
static int get_srcimp_rsc(struct srcimp_mgr *mgr, const struct srcimp_desc *desc, struct srcimp **rsrcimp) { int err, i; unsigned int idx; struct srcimp *srcimp; unsigned long flags; *rsrcimp = NULL; /* Allocate mem for SRCIMP resource */ srcimp = kzalloc(sizeof(*srcimp), GFP_KERNEL); if (!srcimp) return -ENOMEM; /* Check whether there are sufficient SRCIMP resources. */ err = 0; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < desc->msr; i++) { err = mgr_get_resource(&mgr->mgr, 1, &idx); if (err) break; srcimp->idx[i] = idx; } spin_unlock_irqrestore(&mgr->mgr_lock, flags); if (err) { printk(KERN_ER
static int get_amixer_rsc(struct amixer_mgr *mgr, const struct amixer_desc *desc, struct amixer **ramixer) { int err, i; unsigned int idx; struct amixer *amixer; unsigned long flags; *ramixer = NULL; /* Allocate mem for amixer resource */ amixer = kzalloc(sizeof(*amixer), GFP_KERNEL); if (!amixer) return -ENOMEM; /* Check whether there are sufficient * amixer resources to meet request. */ err = 0; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < desc->msr; i++) { err = mgr_get_resource(&mgr->mgr, 1, &idx); if (err) break; amixer->idx[i] = idx; } spin_unlock_irqrestore(&mgr->mgr_lock, flags); if (err) { dev_err(mgr->card->dev, "Can't meet AMIXER resource request!\n"); goto error; } err = amixer_rsc_init(amixer, desc, mgr); if (err) goto error; *ramixer = amixer; return 0; error: spin_lock_irqsave(&mgr->mgr_lock, flags); for (i--; i >= 0; i--) mgr_put_resource(&mgr->mgr, 1, amixer->idx[i]); spin_unlock_irqrestore(&mgr->mgr_lock, flags); kfree(amixer); return err; }
static int get_srcimp_rsc(struct srcimp_mgr *mgr, const struct srcimp_desc *desc, struct srcimp **rsrcimp) { int err, i; unsigned int idx; struct srcimp *srcimp; unsigned long flags; *rsrcimp = NULL; /* Allocate mem for SRCIMP resource */ srcimp = kzalloc(sizeof(*srcimp), GFP_KERNEL); if (!srcimp) return -ENOMEM; /* Check whether there are sufficient SRCIMP resources. */ err = 0; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < desc->msr; i++) { err = mgr_get_resource(&mgr->mgr, 1, &idx); if (err) break; srcimp->idx[i] = idx; } spin_unlock_irqrestore(&mgr->mgr_lock, flags); if (err) { dev_err(mgr->card->dev, "Can't meet SRCIMP resource request!\n"); goto error1; } err = srcimp_rsc_init(srcimp, desc, mgr); if (err) goto error1; *rsrcimp = srcimp; return 0; error1: spin_lock_irqsave(&mgr->mgr_lock, flags); for (i--; i >= 0; i--) mgr_put_resource(&mgr->mgr, 1, srcimp->idx[i]); spin_unlock_irqrestore(&mgr->mgr_lock, flags); kfree(srcimp); return err; }
static int get_sum_rsc(struct sum_mgr *mgr, const struct sum_desc *desc, struct sum **rsum) { int err, i; unsigned int idx; struct sum *sum; unsigned long flags; *rsum = NULL; /* Allocate mem for sum resource */ sum = kzalloc(sizeof(*sum), GFP_KERNEL); if (!sum) return -ENOMEM; /* Check whether there are sufficient sum resources to meet request. */ err = 0; spin_lock_irqsave(&mgr->mgr_lock, flags); for (i = 0; i < desc->msr; i++) { err = mgr_get_resource(&mgr->mgr, 1, &idx); if (err) break; sum->idx[i] = idx; } spin_unlock_irqrestore(&mgr->mgr_lock, flags); if (err) { printk(KERN_ERR "ctxfi: Can't meet SUM resource request!\n"); goto error; } err = sum_rsc_init(sum, desc, mgr); if (err) goto error; *rsum = sum; return 0; error: spin_lock_irqsave(&mgr->mgr_lock, flags); for (i--; i >= 0; i--) mgr_put_resource(&mgr->mgr, 1, sum->idx[i]); spin_unlock_irqrestore(&mgr->mgr_lock, flags); kfree(sum); return err; }