OSDN Git Service

staging: speakup: move spk_stop_serial_interrupt into synth-specific release function
authorOkash Khawaja <okash.khawaja@gmail.com>
Tue, 14 Mar 2017 13:41:54 +0000 (13:41 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 Mar 2017 02:12:02 +0000 (11:12 +0900)
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: Okash Khawaja <okash.khawaja@gmail.com>
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/speakup/serialio.c
drivers/staging/speakup/speakup_acntpc.c
drivers/staging/speakup/speakup_decpc.c
drivers/staging/speakup/speakup_dtlk.c
drivers/staging/speakup/speakup_keypc.c
drivers/staging/speakup/synth.c

index d7736f7..b37d476 100644 (file)
@@ -148,6 +148,7 @@ void spk_stop_serial_interrupt(void)
        /* Free IRQ */
        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)
 {
@@ -223,6 +224,7 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch)
 
 void spk_serial_release(void)
 {
+       spk_stop_serial_interrupt();
        if (speakup_info.port_tts == 0)
                return;
        synth_release_region(speakup_info.port_tts, 8);
index 81dd0c0..c5beb56 100644 (file)
@@ -304,6 +304,7 @@ static int synth_probe(struct spk_synth *synth)
 
 static void accent_release(void)
 {
+       spk_stop_serial_interrupt();
        if (speakup_info.port_tts)
                synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT);
        speakup_info.port_tts = 0;
index a4c5807..2a738be 100644 (file)
@@ -481,6 +481,7 @@ static int synth_probe(struct spk_synth *synth)
 
 static void dtpc_release(void)
 {
+       spk_stop_serial_interrupt();
        if (speakup_info.port_tts)
                synth_release_region(speakup_info.port_tts, SYNTH_IO_EXTENT);
        speakup_info.port_tts = 0;
index e5a4343..279739a 100644 (file)
@@ -375,6 +375,7 @@ static int synth_probe(struct spk_synth *synth)
 
 static void dtlk_release(void)
 {
+       spk_stop_serial_interrupt();
        if (speakup_info.port_tts)
                synth_release_region(speakup_info.port_tts-1, SYNTH_IO_EXTENT);
        speakup_info.port_tts = 0;
index 9eb9352..6649fa4 100644 (file)
@@ -306,6 +306,7 @@ static int synth_probe(struct spk_synth *synth)
 
 static void keynote_release(void)
 {
+       spk_stop_serial_interrupt();
        if (synth_port)
                synth_release_region(synth_port, SYNTH_IO_EXTENT);
        synth_port = 0;
index 72d4f02..989681d 100644 (file)
@@ -462,7 +462,6 @@ void synth_release(void)
                sysfs_remove_group(speakup_kobj, &synth->attributes);
        for (var = synth->vars; var->var_id != MAXVARS; var++)
                speakup_unregister_var(var->var_id);
-       spk_stop_serial_interrupt();
        synth->release();
        synth = NULL;
 }