int escore_vs_init(struct escore_priv *escore) { int rc = 0; struct escore_voice_sense *voice_sense; voice_sense = (struct escore_voice_sense *) kmalloc(sizeof(struct escore_voice_sense), GFP_KERNEL); if (!voice_sense) { rc = -ENOMEM; goto voice_sense_alloc_err; } escore->voice_sense = (void *)voice_sense; /* Initialize variables */ voice_sense->cvs_preset = 0; voice_sense->vs = (struct firmware *) kmalloc(sizeof(struct firmware), GFP_KERNEL); if (!voice_sense->vs) { rc = -ENOMEM; goto vs_alloc_err; } mutex_init(&voice_sense->vs_event_mutex); rc = escore_vs_init_sysfs(escore); if (rc) { dev_err(escore_priv.dev, "failed to create core sysfs entries: %d\n", rc); } return rc; vs_alloc_err: kfree(voice_sense); voice_sense_alloc_err: return rc; }
int escore_vs_init(struct escore_priv *escore) { int rc = 0; int i; struct escore_voice_sense *voice_sense; voice_sense = (struct escore_voice_sense *) kmalloc(sizeof(struct escore_voice_sense), GFP_KERNEL); if (!voice_sense) { rc = -ENOMEM; goto voice_sense_alloc_err; } escore->voice_sense = (void *)voice_sense; /* Initialize variables */ voice_sense->cvs_preset = 0; voice_sense->vs_active_keywords = 0; voice_sense->vs = (struct firmware *) kmalloc(sizeof(struct firmware), GFP_KERNEL); if (!voice_sense->vs) { rc = -ENOMEM; goto vs_alloc_err; } voice_sense->bkg = (struct firmware *) kmalloc(sizeof(struct firmware), GFP_KERNEL); if (!voice_sense->bkg) { rc = -ENOMEM; goto bkg_alloc_err; } for (i = 0; i < MAX_NO_OF_VS_KW; i++) { voice_sense->kw[i] = (struct firmware *) kmalloc(sizeof(struct firmware), GFP_KERNEL); if (!voice_sense->kw[i]) { rc = -ENOMEM; goto kw_alloc_err; } } mutex_init(&voice_sense->vs_event_mutex); rc = escore_vs_init_sysfs(escore); if (rc) { dev_err(escore_priv.dev, "failed to create core sysfs entries: %d\n", rc); goto sysfs_init_err; } escore->vs_ops.escore_is_voicesense_sleep_enable = escore_vs_sleep_enable; escore->vs_ops.escore_voicesense_sleep = escore_voicesense_sleep; escore->vs_ops.escore_voicesense_wakeup = escore_vs_wakeup; return rc; kw_alloc_err: kfree(voice_sense->bkg); while (i--) kfree(voice_sense->kw[i]); bkg_alloc_err: sysfs_init_err: kfree(voice_sense->vs); vs_alloc_err: kfree(voice_sense); voice_sense_alloc_err: return rc; }