diff options
author | Marcin Juszkiewicz <hrw@openembedded.org> | 2006-04-28 19:06:59 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2006-04-28 19:06:59 +0000 |
commit | 989a3c578011cad60fc167cdb1b9a0e603f43072 (patch) | |
tree | aef515b13e77cda22b30d75295f3aaef16d6c470 /packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch | |
parent | d775757b77aba05c2766546682db2915b5cc12e1 (diff) |
* add initial support for gumstix (xscale pxa255) platform (gumstix.com)
* add GMUstix distro for gumstix (GMU = George Mason University)
* add linux-gumstix-2.6.15 with gumstix patchset
* close bug #861
Diffstat (limited to 'packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch')
-rw-r--r-- | packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch b/packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch new file mode 100644 index 0000000000..fcef7c27c3 --- /dev/null +++ b/packages/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch @@ -0,0 +1,70 @@ +Index: linux-2.6.15gum/drivers/serial/pxa.c +=================================================================== +--- linux-2.6.15gum.orig/drivers/serial/pxa.c ++++ linux-2.6.15gum/drivers/serial/pxa.c +@@ -58,6 +58,8 @@ struct uart_pxa_port { + unsigned int lsr_break_flag; + unsigned int cken; + char *name; ++ unsigned int msr; //djf ++ unsigned int lsr; //djf + }; + + static inline unsigned int serial_in(struct uart_pxa_port *up, int offset) +@@ -169,6 +171,7 @@ receive_chars(struct uart_pxa_port *up, + + ignore_char: + *status = serial_in(up, UART_LSR); ++ up->lsr = *status; + } while ((*status & UART_LSR_DR) && (max_count-- > 0)); + tty_flip_buffer_push(tty); + } +@@ -221,7 +224,7 @@ static inline void check_modem_status(st + int status; + + status = serial_in(up, UART_MSR); +- ++ up->msr = status; + if ((status & UART_MSR_ANY_DELTA) == 0) + return; + +@@ -253,6 +256,7 @@ serial_pxa_irq(int irq, void *dev_id, st + //printk(KERN_WARNING "serial_pxa_irq: odd -- interrupt triggered, but no interrupt in IIR: %08x\n",iir); + } + lsr = serial_in(up, UART_LSR); ++ up->lsr = lsr; + if (lsr & UART_LSR_DR) + receive_chars(up, &lsr, regs); + check_modem_status(up); +@@ -269,7 +273,8 @@ static unsigned int serial_pxa_tx_empty( + unsigned int ret; + + spin_lock_irqsave(&up->port.lock, flags); +- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; ++ //ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; ++ ret = up->lsr * UART_LSR_TEMT ? TIOCSER_TEMT : 0; + spin_unlock_irqrestore(&up->port.lock, flags); + + return ret; +@@ -281,7 +286,7 @@ static unsigned int serial_pxa_get_mctrl + unsigned char status; + unsigned int ret; + +- status = serial_in(up, UART_MSR); ++ status = up->msr; + + ret = 0; + if (status & UART_MSR_DCD) +@@ -411,10 +416,10 @@ static int serial_pxa_startup(struct uar + /* + * And clear the interrupt registers again for luck. + */ +- (void) serial_in(up, UART_LSR); ++ up->lsr = serial_in(up, UART_LSR); + (void) serial_in(up, UART_RX); + (void) serial_in(up, UART_IIR); +- (void) serial_in(up, UART_MSR); ++ up->msr = serial_in(up, UART_MSR); + + return 0; + } |