in speakup/synth.c [389:428]
static int do_synth_init(struct spk_synth *in_synth)
{
struct var_t *var;
synth_release();
if (in_synth->checkval != SYNTH_CHECK)
return -EINVAL;
synth = in_synth;
synth->alive = 0;
pr_warn("synth probe\n");
if (synth->probe(synth) < 0) {
pr_warn("%s: device probe failed\n", in_synth->name);
synth = NULL;
return -ENODEV;
}
synth_time_vars[0].u.n.value =
synth_time_vars[0].u.n.default_val = synth->delay;
synth_time_vars[1].u.n.value =
synth_time_vars[1].u.n.default_val = synth->trigger;
synth_time_vars[2].u.n.value =
synth_time_vars[2].u.n.default_val = synth->jiffies;
synth_time_vars[3].u.n.value =
synth_time_vars[3].u.n.default_val = synth->full;
synth_time_vars[4].u.n.value =
synth_time_vars[4].u.n.default_val = synth->flush_time;
synth_printf("%s", synth->init);
for (var = synth->vars;
(var->var_id >= 0) && (var->var_id < MAXVARS); var++)
speakup_register_var(var);
if (!spk_quiet_boot)
synth_printf("%s found\n", synth->long_name);
if (synth->attributes.name &&
sysfs_create_group(speakup_kobj, &synth->attributes) < 0)
return -ENOMEM;
synth_flags = synth->flags;
wake_up_interruptible_all(&speakup_event);
if (speakup_task)
wake_up_process(speakup_task);
return 0;
}