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: Okash Khawaja <okash.khawaja@gmail.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5e492ab566
commit
98c1fda752
@ -136,6 +136,35 @@ static void start_serial_interrupt(int irq)
|
||||
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)
|
||||
{
|
||||
if (speakup_info.port_tts == 0)
|
||||
@ -223,6 +252,23 @@ int spk_serial_out(struct spk_synth *in_synth, const char ch)
|
||||
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)
|
||||
{
|
||||
spk_stop_serial_interrupt();
|
||||
|
@ -102,7 +102,7 @@ static struct spk_synth synth_acntsa = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
@ -127,7 +127,7 @@ static int synth_probe(struct spk_synth *synth)
|
||||
|
||||
failed = spk_serial_synth_probe(synth);
|
||||
if (failed == 0) {
|
||||
spk_synth_immediate(synth, "\033=R\r");
|
||||
synth->synth_immediate(synth, "\033=R\r");
|
||||
mdelay(100);
|
||||
}
|
||||
synth->alive = !failed;
|
||||
|
@ -111,7 +111,7 @@ static struct spk_synth synth_apollo = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -107,7 +107,7 @@ static struct spk_synth synth_audptr = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
@ -144,7 +144,7 @@ static void synth_version(struct spk_synth *synth)
|
||||
unsigned char test = 0;
|
||||
char synth_id[40] = "";
|
||||
|
||||
spk_synth_immediate(synth, "\x05[Q]");
|
||||
synth->synth_immediate(synth, "\x05[Q]");
|
||||
synth_id[test] = spk_serial_in();
|
||||
if (synth_id[test] == 'A') {
|
||||
do {
|
||||
|
@ -99,7 +99,7 @@ static struct spk_synth synth_bns = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -130,7 +130,7 @@ static struct spk_synth synth_decext = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = do_catch_up,
|
||||
.flush = synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
@ -225,7 +225,7 @@ static void do_catch_up(struct spk_synth *synth)
|
||||
static void synth_flush(struct spk_synth *synth)
|
||||
{
|
||||
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);
|
||||
|
@ -133,7 +133,7 @@ static struct spk_synth synth_dectlk = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = do_catch_up,
|
||||
.flush = synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -101,7 +101,7 @@ static struct spk_synth synth_dummy = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -114,7 +114,7 @@ static struct spk_synth synth_ltlk = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
@ -139,7 +139,7 @@ static void synth_interrogate(struct spk_synth *synth)
|
||||
unsigned char *t, i;
|
||||
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++) {
|
||||
buf[i] = spk_serial_in();
|
||||
if (i > 2 && buf[i] == 0x7f)
|
||||
|
@ -105,7 +105,7 @@ static struct spk_synth synth_spkout = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -98,7 +98,7 @@ static struct spk_synth synth_txprt = {
|
||||
.io_ops = &spk_serial_io_ops,
|
||||
.probe = spk_serial_synth_probe,
|
||||
.release = spk_serial_release,
|
||||
.synth_immediate = spk_synth_immediate,
|
||||
.synth_immediate = spk_serial_synth_immediate,
|
||||
.catch_up = spk_do_catch_up,
|
||||
.flush = spk_synth_flush,
|
||||
.is_alive = spk_synth_is_alive_restart,
|
||||
|
@ -58,7 +58,7 @@ ssize_t spk_var_store(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
|
||||
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_synth_flush(struct spk_synth *synth);
|
||||
int spk_synth_is_alive_nop(struct spk_synth *synth);
|
||||
|
@ -44,35 +44,6 @@ EXPORT_SYMBOL_GPL(speakup_info);
|
||||
|
||||
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
|
||||
* and push to the serial port, waiting as needed
|
||||
@ -147,23 +118,6 @@ void spk_do_catch_up(struct spk_synth *synth)
|
||||
}
|
||||
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)
|
||||
{
|
||||
synth->io_ops->synth_out(synth, synth->clear);
|
||||
|
Loading…
Reference in New Issue
Block a user