cpm_uart non-console problem with write on 2nd open..
From: Alexandros Kostopoulos <hidden>
Date: 2006-09-14 13:30:53
I'm experiencing a problem with the 2.6.13 cpm_uart driver. When opening= = the device for the second time after the driver was inserted, if only a = = few bytes are sent for transmission and the device is then closed, the = tx_empty routine called by shutdown returns 0 and the latter hangs in th= e = while loop with the call to cpm_uart_tx_empty. No bytes are actually = transmitted from the uart. I found out that the difference between the first and subsequent open = calls is that during the first time (and until the first shutdown) the = transmitter is enabled in GSMRL. From this point on, the transmitter is = = initially disabled on startup. Thus, if only a few bytes are queued for = = transmission before shutdown and a TX interrupt is not triggered, the = bytes are never sent, and thus the shutdown function hangs on the = cpm_uart_tx_empty loop. The fix that works for me is the following: Index: drivers/serial/cpm_uart/cpm_uart_core.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- drivers/serial/cpm_uart/cpm_uart_core.c (revision 106)
+++ drivers/serial/cpm_uart/cpm_uart_core.c (working copy)
@@ -394,7 +394,7 @@ static int cpm_uart_startup(struct uart_ pinfo->smcp->smc_smcmr |=3D SMCMR_REN; } else { pinfo->sccp->scc_sccm |=3D UART_SCCM_RX; - pinfo->sccp->scc_gsmrl |=3D (SCC_GSMRL_ENR); + pinfo->sccp->scc_gsmrl |=3D (SCC_GSMRL_ENR | SCC_GSMRL_ENT); }
Any comments would be greatly appreciated thank you Alex