Commit a50ef316 authored by Okash Khawaja's avatar Okash Khawaja Committed by Greg Kroah-Hartman

staging: speakup: move spk_stop_serial_interrupt into synth-specific release function

This moves call to spk_stop_serial_interrupt() function out of synth_release()
and into release() method of specific spk_synth instances. This is because
the spk_stop_serial_interrupt() call is specific to current serial i/o
implementation. Moving it into each synth's release() method gives the
decision of calling  spk_stop_serial_interrupt() to that synth.
Signed-off-by: default avatarOkash Khawaja <okash.khawaja@gmail.com>
Reviewed-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1e441594
...@@ -148,6 +148,7 @@ void spk_stop_serial_interrupt(void) ...@@ -148,6 +148,7 @@ void spk_stop_serial_interrupt(void)
/* Free IRQ */ /* Free IRQ */
free_irq(serstate->irq, (void *)synth_readbuf_handler); free_irq(serstate->irq, (void *)synth_readbuf_handler);
} }
EXPORT_SYMBOL_GPL(spk_stop_serial_interrupt);
int spk_wait_for_xmitr(struct spk_synth *in_synth) int spk_wait_for_xmitr(struct spk_synth *in_synth)
{ {
...@@ -223,6 +224,7 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch) ...@@ -223,6 +224,7 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch)
void spk_serial_release(void) void spk_serial_release(void)
{ {
spk_stop_serial_interrupt();
if (speakup_info.port_tts == 0) if (speakup_info.port_tts == 0)
return; return;
synth_release_region(speakup_info.port_tts, 8); synth_release_region(speakup_info.port_tts, 8);
......
...@@ -304,6 +304,7 @@ static int synth_probe(struct spk_synth *synth) ...@@ -304,6 +304,7 @@ static int synth_probe(struct spk_synth *synth)
static void accent_release(void) static void accent_release(void)
{ {
spk_stop_serial_interrupt();
if (speakup_info.port_tts) if (speakup_info.port_tts)
synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT); synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT);
speakup_info.port_tts = 0; speakup_info.port_tts = 0;
......
...@@ -481,6 +481,7 @@ static int synth_probe(struct spk_synth *synth) ...@@ -481,6 +481,7 @@ static int synth_probe(struct spk_synth *synth)
static void dtpc_release(void) static void dtpc_release(void)
{ {
spk_stop_serial_interrupt();
if (speakup_info.port_tts) if (speakup_info.port_tts)
synth_release_region(speakup_info.port_tts, SYNTH_IO_EXTENT); synth_release_region(speakup_info.port_tts, SYNTH_IO_EXTENT);
speakup_info.port_tts = 0; speakup_info.port_tts = 0;
......
...@@ -375,6 +375,7 @@ static int synth_probe(struct spk_synth *synth) ...@@ -375,6 +375,7 @@ static int synth_probe(struct spk_synth *synth)
static void dtlk_release(void) static void dtlk_release(void)
{ {
spk_stop_serial_interrupt();
if (speakup_info.port_tts) if (speakup_info.port_tts)
synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT); synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT);
speakup_info.port_tts = 0; speakup_info.port_tts = 0;
......
...@@ -306,6 +306,7 @@ static int synth_probe(struct spk_synth *synth) ...@@ -306,6 +306,7 @@ static int synth_probe(struct spk_synth *synth)
static void keynote_release(void) static void keynote_release(void)
{ {
spk_stop_serial_interrupt();
if (synth_port) if (synth_port)
synth_release_region(synth_port, SYNTH_IO_EXTENT); synth_release_region(synth_port, SYNTH_IO_EXTENT);
synth_port = 0; synth_port = 0;
......
...@@ -462,7 +462,6 @@ void synth_release(void) ...@@ -462,7 +462,6 @@ void synth_release(void)
sysfs_remove_group(speakup_kobj, &synth->attributes); sysfs_remove_group(speakup_kobj, &synth->attributes);
for (var = synth->vars; var->var_id != MAXVARS; var++) for (var = synth->vars; var->var_id != MAXVARS; var++)
speakup_unregister_var(var->var_id); speakup_unregister_var(var->var_id);
spk_stop_serial_interrupt();
synth->release(); synth->release();
synth = NULL; synth = NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment