diff options
Diffstat (limited to 'drivers/staging/speakup/serialio.c')
| -rw-r--r-- | drivers/staging/speakup/serialio.c | 29 | 
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/staging/speakup/serialio.c b/drivers/staging/speakup/serialio.c index 7f3d87bf592..c62d74c4790 100644 --- a/drivers/staging/speakup/serialio.c +++ b/drivers/staging/speakup/serialio.c @@ -6,23 +6,26 @@  #include "spk_priv.h"  #include "serialio.h" +#ifndef SERIAL_PORT_DFNS +#define SERIAL_PORT_DFNS +#endif +  static void start_serial_interrupt(int irq); -static struct serial_state rs_table[] = { +static const struct old_serial_port rs_table[] = {  	SERIAL_PORT_DFNS  }; -static struct serial_state *serstate; +static const struct old_serial_port *serstate;  static int timeouts; -struct serial_state *spk_serial_init(int index) +const struct old_serial_port *spk_serial_init(int index)  {  	int baud = 9600, quot = 0;  	unsigned int cval = 0;  	int cflag = CREAD | HUPCL | CLOCAL | B9600 | CS8; -	struct serial_state *ser = NULL; +	const struct old_serial_port *ser = rs_table + index;  	int err; -	ser = rs_table + index;  	/*	Divisor, bytesize and parity */  	quot = ser->baud_base / baud;  	cval = cflag & (CSIZE | CSTOPB); @@ -37,11 +40,11 @@ struct serial_state *spk_serial_init(int index)  		cval |= UART_LCR_EPAR;  	if (synth_request_region(ser->port, 8)) {  		/* try to take it back. */ -		printk(KERN_INFO "Ports not available, trying to steal them\n"); +		pr_info("Ports not available, trying to steal them\n");  		__release_region(&ioport_resource, ser->port, 8);  		err = synth_request_region(ser->port, 8);  		if (err) { -			pr_warn("Unable to allocate port at %lx, errno %i", +			pr_warn("Unable to allocate port at %x, errno %i",  				ser->port, err);  			return NULL;  		} @@ -80,7 +83,7 @@ static irqreturn_t synth_readbuf_handler(int irq, void *dev_id)  /*printk(KERN_ERR "in irq\n"); */  /*pr_warn("in IRQ\n"); */  	int c; -	spk_lock(flags); +	spin_lock_irqsave(&speakup_info.spinlock, flags);  	while (inb_p(speakup_info.port_tts + UART_LSR) & UART_LSR_DR) {  		c = inb_p(speakup_info.port_tts+UART_RX); @@ -88,7 +91,7 @@ static irqreturn_t synth_readbuf_handler(int irq, void *dev_id)  /*printk(KERN_ERR "c = %d\n", c); */  /*pr_warn("C = %d\n", c); */  	} -	spk_unlock(flags); +	spin_unlock_irqrestore(&speakup_info.spinlock, flags);  	return IRQ_HANDLED;  } @@ -103,7 +106,7 @@ static void start_serial_interrupt(int irq)  			 "serial", (void *) synth_readbuf_handler);  	if (rv) -		printk(KERN_ERR "Unable to request Speakup serial I R Q\n"); +		pr_err("Unable to request Speakup serial I R Q\n");  	/* Set MCR */  	outb(UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2,  			speakup_info.port_tts + UART_MCR); @@ -117,7 +120,7 @@ static void start_serial_interrupt(int irq)  	outb(1, speakup_info.port_tts + UART_FCR);	/* Turn FIFO On */  } -void stop_serial_interrupt(void) +void spk_stop_serial_interrupt(void)  {  	if (speakup_info.port_tts == 0)  		return; @@ -131,7 +134,7 @@ void stop_serial_interrupt(void)  	free_irq(serstate->irq, (void *) synth_readbuf_handler);  } -int wait_for_xmitr(void) +int spk_wait_for_xmitr(void)  {  	int tmout = SPK_XMITR_TIMEOUT;  	if ((synth->alive) && (timeouts >= NUM_DISABLE_TIMEOUTS)) { @@ -196,7 +199,7 @@ EXPORT_SYMBOL_GPL(spk_serial_in_nowait);  int spk_serial_out(const char ch)  { -	if (synth->alive && wait_for_xmitr()) { +	if (synth->alive && spk_wait_for_xmitr()) {  		outb_p(ch, speakup_info.port_tts);  		return 1;  	}  | 
