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

staging: speakup: move those functions which do outgoing serial comms, into serialio.c

This moves spk_synth_immediate and spk_serial_synth_probe functions into
serialio.c. These functions do outgoing serial comms. The move is a step
towards collecting all serial comms in serialio.c. This also renames
spk_synth_immediate to spk_serial_synth_immediate.

Code inside those functions has not been changed. Along the way, this patch
also fixes a couple of spots which were calling spk_synth_immediate directly,
so that the calls now happen via the spk_syth struct.
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 5e492ab5
...@@ -136,6 +136,35 @@ static void start_serial_interrupt(int irq) ...@@ -136,6 +136,35 @@ static void start_serial_interrupt(int irq)
outb(1, speakup_info.port_tts + UART_FCR); /* Turn FIFO On */ outb(1, speakup_info.port_tts + UART_FCR); /* Turn FIFO On */
} }
int spk_serial_synth_probe(struct spk_synth *synth)
{
const struct old_serial_port *ser;
int failed = 0;
if ((synth->ser >= SPK_LO_TTY) && (synth->ser <= SPK_HI_TTY)) {
ser = spk_serial_init(synth->ser);
if (!ser) {
failed = -1;
} else {
outb_p(0, ser->port);
mdelay(1);
outb_p('\r', ser->port);
}
} else {
failed = -1;
pr_warn("ttyS%i is an invalid port\n", synth->ser);
}
if (failed) {
pr_info("%s: not found\n", synth->long_name);
return -ENODEV;
}
pr_info("%s: ttyS%i, Driver Version %s\n",
synth->long_name, synth->ser, synth->version);
synth->alive = 1;
return 0;
}
EXPORT_SYMBOL_GPL(spk_serial_synth_probe);
void spk_stop_serial_interrupt(void) void spk_stop_serial_interrupt(void)
{ {
if (speakup_info.port_tts == 0) if (speakup_info.port_tts == 0)
...@@ -223,6 +252,23 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch) ...@@ -223,6 +252,23 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch)
return 0; return 0;
} }
const char *spk_serial_synth_immediate(struct spk_synth *synth, const char *buff)
{
u_char ch;
while ((ch = *buff)) {
if (ch == '\n')
ch = synth->procspeech;
if (spk_wait_for_xmitr(synth))
outb(ch, speakup_info.port_tts);
else
return buff;
buff++;
}
return NULL;
}
EXPORT_SYMBOL_GPL(spk_serial_synth_immediate);
void spk_serial_release(void) void spk_serial_release(void)
{ {
spk_stop_serial_interrupt(); spk_stop_serial_interrupt();
......
...@@ -102,7 +102,7 @@ static struct spk_synth synth_acntsa = { ...@@ -102,7 +102,7 @@ static struct spk_synth synth_acntsa = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = synth_probe, .probe = synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
...@@ -127,7 +127,7 @@ static int synth_probe(struct spk_synth *synth) ...@@ -127,7 +127,7 @@ static int synth_probe(struct spk_synth *synth)
failed = spk_serial_synth_probe(synth); failed = spk_serial_synth_probe(synth);
if (failed == 0) { if (failed == 0) {
spk_synth_immediate(synth, "\033=R\r"); synth->synth_immediate(synth, "\033=R\r");
mdelay(100); mdelay(100);
} }
synth->alive = !failed; synth->alive = !failed;
......
...@@ -111,7 +111,7 @@ static struct spk_synth synth_apollo = { ...@@ -111,7 +111,7 @@ static struct spk_synth synth_apollo = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = do_catch_up, .catch_up = do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -107,7 +107,7 @@ static struct spk_synth synth_audptr = { ...@@ -107,7 +107,7 @@ static struct spk_synth synth_audptr = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = synth_probe, .probe = synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = synth_flush, .flush = synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
...@@ -144,7 +144,7 @@ static void synth_version(struct spk_synth *synth) ...@@ -144,7 +144,7 @@ static void synth_version(struct spk_synth *synth)
unsigned char test = 0; unsigned char test = 0;
char synth_id[40] = ""; char synth_id[40] = "";
spk_synth_immediate(synth, "\x05[Q]"); synth->synth_immediate(synth, "\x05[Q]");
synth_id[test] = spk_serial_in(); synth_id[test] = spk_serial_in();
if (synth_id[test] == 'A') { if (synth_id[test] == 'A') {
do { do {
......
...@@ -99,7 +99,7 @@ static struct spk_synth synth_bns = { ...@@ -99,7 +99,7 @@ static struct spk_synth synth_bns = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -130,7 +130,7 @@ static struct spk_synth synth_decext = { ...@@ -130,7 +130,7 @@ static struct spk_synth synth_decext = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = do_catch_up, .catch_up = do_catch_up,
.flush = synth_flush, .flush = synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
...@@ -225,7 +225,7 @@ static void do_catch_up(struct spk_synth *synth) ...@@ -225,7 +225,7 @@ static void do_catch_up(struct spk_synth *synth)
static void synth_flush(struct spk_synth *synth) static void synth_flush(struct spk_synth *synth)
{ {
in_escape = 0; in_escape = 0;
spk_synth_immediate(synth, "\033P;10z\033\\"); synth->synth_immediate(synth, "\033P;10z\033\\");
} }
module_param_named(ser, synth_decext.ser, int, 0444); module_param_named(ser, synth_decext.ser, int, 0444);
......
...@@ -133,7 +133,7 @@ static struct spk_synth synth_dectlk = { ...@@ -133,7 +133,7 @@ static struct spk_synth synth_dectlk = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = do_catch_up, .catch_up = do_catch_up,
.flush = synth_flush, .flush = synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -101,7 +101,7 @@ static struct spk_synth synth_dummy = { ...@@ -101,7 +101,7 @@ static struct spk_synth synth_dummy = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -114,7 +114,7 @@ static struct spk_synth synth_ltlk = { ...@@ -114,7 +114,7 @@ static struct spk_synth synth_ltlk = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = synth_probe, .probe = synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
...@@ -139,7 +139,7 @@ static void synth_interrogate(struct spk_synth *synth) ...@@ -139,7 +139,7 @@ static void synth_interrogate(struct spk_synth *synth)
unsigned char *t, i; unsigned char *t, i;
unsigned char buf[50], rom_v[20]; unsigned char buf[50], rom_v[20];
spk_synth_immediate(synth, "\x18\x01?"); synth->synth_immediate(synth, "\x18\x01?");
for (i = 0; i < 50; i++) { for (i = 0; i < 50; i++) {
buf[i] = spk_serial_in(); buf[i] = spk_serial_in();
if (i > 2 && buf[i] == 0x7f) if (i > 2 && buf[i] == 0x7f)
......
...@@ -105,7 +105,7 @@ static struct spk_synth synth_spkout = { ...@@ -105,7 +105,7 @@ static struct spk_synth synth_spkout = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = synth_flush, .flush = synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -98,7 +98,7 @@ static struct spk_synth synth_txprt = { ...@@ -98,7 +98,7 @@ static struct spk_synth synth_txprt = {
.io_ops = &spk_serial_io_ops, .io_ops = &spk_serial_io_ops,
.probe = spk_serial_synth_probe, .probe = spk_serial_synth_probe,
.release = spk_serial_release, .release = spk_serial_release,
.synth_immediate = spk_synth_immediate, .synth_immediate = spk_serial_synth_immediate,
.catch_up = spk_do_catch_up, .catch_up = spk_do_catch_up,
.flush = spk_synth_flush, .flush = spk_synth_flush,
.is_alive = spk_synth_is_alive_restart, .is_alive = spk_synth_is_alive_restart,
......
...@@ -58,7 +58,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr, ...@@ -58,7 +58,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count); const char *buf, size_t count);
int spk_serial_synth_probe(struct spk_synth *synth); int spk_serial_synth_probe(struct spk_synth *synth);
const char *spk_synth_immediate(struct spk_synth *synth, const char *buff); const char *spk_serial_synth_immediate(struct spk_synth *synth, const char *buff);
void spk_do_catch_up(struct spk_synth *synth); void spk_do_catch_up(struct spk_synth *synth);
void spk_synth_flush(struct spk_synth *synth); void spk_synth_flush(struct spk_synth *synth);
int spk_synth_is_alive_nop(struct spk_synth *synth); int spk_synth_is_alive_nop(struct spk_synth *synth);
......
...@@ -44,35 +44,6 @@ EXPORT_SYMBOL_GPL(speakup_info); ...@@ -44,35 +44,6 @@ EXPORT_SYMBOL_GPL(speakup_info);
static int do_synth_init(struct spk_synth *in_synth); static int do_synth_init(struct spk_synth *in_synth);
int spk_serial_synth_probe(struct spk_synth *synth)
{
const struct old_serial_port *ser;
int failed = 0;
if ((synth->ser >= SPK_LO_TTY) && (synth->ser <= SPK_HI_TTY)) {
ser = spk_serial_init(synth->ser);
if (!ser) {
failed = -1;
} else {
outb_p(0, ser->port);
mdelay(1);
outb_p('\r', ser->port);
}
} else {
failed = -1;
pr_warn("ttyS%i is an invalid port\n", synth->ser);
}
if (failed) {
pr_info("%s: not found\n", synth->long_name);
return -ENODEV;
}
pr_info("%s: ttyS%i, Driver Version %s\n",
synth->long_name, synth->ser, synth->version);
synth->alive = 1;
return 0;
}
EXPORT_SYMBOL_GPL(spk_serial_synth_probe);
/* /*
* Main loop of the progression thread: keep eating from the buffer * Main loop of the progression thread: keep eating from the buffer
* and push to the serial port, waiting as needed * and push to the serial port, waiting as needed
...@@ -147,23 +118,6 @@ void spk_do_catch_up(struct spk_synth *synth) ...@@ -147,23 +118,6 @@ void spk_do_catch_up(struct spk_synth *synth)
} }
EXPORT_SYMBOL_GPL(spk_do_catch_up); EXPORT_SYMBOL_GPL(spk_do_catch_up);
const char *spk_synth_immediate(struct spk_synth *synth, const char *buff)
{
u_char ch;
while ((ch = *buff)) {
if (ch == '\n')
ch = synth->procspeech;
if (spk_wait_for_xmitr(synth))
outb(ch, speakup_info.port_tts);
else
return buff;
buff++;
}
return NULL;
}
EXPORT_SYMBOL_GPL(spk_synth_immediate);
void spk_synth_flush(struct spk_synth *synth) void spk_synth_flush(struct spk_synth *synth)
{ {
synth->io_ops->synth_out(synth, synth->clear); synth->io_ops->synth_out(synth, synth->clear);
......
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