static int chd_dec_api_cmd(struct crystalhd_adp *adp, unsigned long ua, uint32_t uid, uint32_t cmd, crystalhd_cmd_proc func) { int rc; struct crystalhd_ioctl_data *temp; enum BC_STATUS sts = BC_STS_SUCCESS; temp = chd_dec_alloc_iodata(adp, 0); if (!temp) { BCMLOG_ERR("Failed to get iodata..\n"); return -EINVAL; } temp->u_id = uid; temp->cmd = cmd; rc = chd_dec_proc_user_data(adp, temp, ua, 0); if (!rc) { sts = func(&adp->cmds, temp); if (sts == BC_STS_PENDING) sts = BC_STS_NOT_IMPL; temp->udata.RetSts = sts; rc = chd_dec_proc_user_data(adp, temp, ua, 1); } if (temp) { chd_dec_free_iodata(adp, temp, 0); temp = NULL; } return rc; }
static int chd_dec_api_cmd(struct crystalhd_adp *adp, unsigned long ua, uint32_t uid, uint32_t cmd, crystalhd_cmd_proc func) { int rc; crystalhd_ioctl_data *temp; BC_STATUS sts = BC_STS_SUCCESS; temp = chd_dec_alloc_iodata(adp, 0); if (!temp) { dev_err(chddev(), "Failed to get iodata..\n"); return -EINVAL; } temp->u_id = uid; temp->cmd = cmd; rc = chd_dec_proc_user_data(adp, temp, ua, 0); if (!rc) { if(func == NULL) sts = BC_STS_PWR_MGMT; /* Can only happen when we are in suspend state */ else sts = func(&adp->cmds, temp); if (sts == BC_STS_PENDING) sts = BC_STS_NOT_IMPL; temp->udata.RetSts = sts; rc = chd_dec_proc_user_data(adp, temp, ua, 1); } if (temp) { chd_dec_free_iodata(adp, temp, 0); temp = NULL; } return rc; }