diff options
Diffstat (limited to 'drivers/staging/speakup/speakup_keypc.c')
-rw-r--r-- | drivers/staging/speakup/speakup_keypc.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/staging/speakup/speakup_keypc.c b/drivers/staging/speakup/speakup_keypc.c index 10f4964782e2..d3203f8fc3d0 100644 --- a/drivers/staging/speakup/speakup_keypc.c +++ b/drivers/staging/speakup/speakup_keypc.c @@ -105,6 +105,7 @@ static struct spk_synth synth_keypc = { .startup = SYNTH_START, .checkval = SYNTH_CHECK, .vars = vars, + .io_ops = &spk_serial_io_ops, .probe = synth_probe, .release = keynote_release, .synth_immediate = synth_immediate, @@ -141,9 +142,9 @@ static char *oops(void) int s1, s2, s3, s4; s1 = inb_p(synth_port); - s2 = inb_p(synth_port+1); - s3 = inb_p(synth_port+2); - s4 = inb_p(synth_port+3); + s2 = inb_p(synth_port + 1); + s3 = inb_p(synth_port + 2); + s4 = inb_p(synth_port + 3); pr_warn("synth timeout %d %d %d %d\n", s1, s2, s3, s4); return NULL; } @@ -198,6 +199,7 @@ spin_lock_irqsave(&speakup_info.spinlock, flags); synth->flush(synth); continue; } + synth_buffer_skip_nonlatin1(); if (synth_buffer_empty()) { spin_unlock_irqrestore(&speakup_info.spinlock, flags); break; @@ -304,12 +306,13 @@ 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; } -module_param_named(port, port_forced, int, 0444); +module_param_hw_named(port, port_forced, int, ioport, 0444); module_param_named(start, synth_keypc.startup, short, 0444); MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing)."); |