From c16c3ca79abcb69a9e45f7c15f8358b3915c0e49 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 11 Jun 2007 15:31:30 +0800 Subject: Blackfin serial driver: hook up our UARTs STP bit with userspaces CMSPAR so we can now do spaced/marked parity Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu --- drivers/serial/bfin_5xx.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers') diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 787dc7168f3..aeb3cc23a81 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -629,6 +629,8 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios, lcr |= PEN; if (!(termios->c_cflag & PARODD)) lcr |= EPS; + if (termios->c_cflag & CMSPAR) + lcr |= STP; } port->read_status_mask = OE; -- cgit v1.2.3 From 9808901b6c63a1c850b072e624c228901a9eaf10 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 11 Jun 2007 15:31:30 +0800 Subject: Blackfin serial driver: ignore framing and parity errors if we get a break signal, we want to ignore framing and parity errors because those will always be set (by nature of the signal) Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu --- drivers/serial/bfin_5xx.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers') diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index aeb3cc23a81..9d356fc96a5 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -185,6 +185,7 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart) uart->port.icount.brk++; if (uart_handle_break(&uart->port)) goto ignore_char; + status &= ~(PE | FE); } if (status & PE) uart->port.icount.parity++; @@ -341,6 +342,7 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart) uart->port.icount.brk++; if (uart_handle_break(&uart->port)) goto dma_ignore_char; + status &= ~(PE | FE); } if (status & PE) uart->port.icount.parity++; -- cgit v1.2.3 From cf68676222e54cd0a31efd968da00e65f9a0963f Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 11 Jun 2007 16:12:49 +0800 Subject: Blackfin serial driver: actually implement the break_ctl() function Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu --- drivers/serial/bfin_5xx.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'drivers') diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 9d356fc96a5..a9d20271782 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -519,6 +519,14 @@ static void bfin_serial_mctrl_check(struct bfin_serial_port *uart) */ static void bfin_serial_break_ctl(struct uart_port *port, int break_state) { + struct bfin_serial_port *uart = (struct bfin_serial_port *)port; + u16 lcr = UART_GET_LCR(uart); + if (break_state) + lcr |= SB; + else + lcr &= ~SB; + UART_PUT_LCR(uart, lcr); + SSYNC(); } static int bfin_serial_startup(struct uart_port *port) -- cgit v1.2.3 From 19aa6382e3c927b8ec5caec7b74c3dc555101146 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 11 Jun 2007 16:16:45 +0800 Subject: Blackfin serial driver: decouple PARODD and CMSPAR checking from PARENB as the termios info does not stipulate that the former are dependent on the latter Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu --- drivers/serial/bfin_5xx.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'drivers') diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index a9d20271782..22569bd5d82 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -635,13 +635,12 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios, if (termios->c_cflag & CSTOPB) lcr |= STB; - if (termios->c_cflag & PARENB) { + if (termios->c_cflag & PARENB) lcr |= PEN; - if (!(termios->c_cflag & PARODD)) - lcr |= EPS; - if (termios->c_cflag & CMSPAR) - lcr |= STP; - } + if (!(termios->c_cflag & PARODD)) + lcr |= EPS; + if (termios->c_cflag & CMSPAR) + lcr |= STP; port->read_status_mask = OE; if (termios->c_iflag & INPCK) -- cgit v1.2.3 From 27bb9e79bcfedc1888d23c3c212c189fa8534fe7 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 11 Jun 2007 15:31:30 +0800 Subject: Blackfin SPI driver: tweak spi cleanup function to match newer kernel changes Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu Cc: David Brownell --- drivers/spi/spi_bfin5xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c index 7d2d9ec6cac..a2d4884752e 100644 --- a/drivers/spi/spi_bfin5xx.c +++ b/drivers/spi/spi_bfin5xx.c @@ -1082,7 +1082,7 @@ static int setup(struct spi_device *spi) */ static void cleanup(struct spi_device *spi) { - struct chip_data *chip = spi_get_ctldata((struct spi_device *)spi); + struct chip_data *chip = spi_get_ctldata(spi); kfree(chip); } -- cgit v1.2.3 From d6fe89b0630080e2bd6ece20ff7b1b5c2647ed62 Mon Sep 17 00:00:00 2001 From: Bryan Wu Date: Mon, 11 Jun 2007 17:34:17 +0800 Subject: Blackfin SPI driver: fix bug SPI DMA incomplete transmission SPI writes intermittently drop bytes at end of DMA transfer http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=3205 http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=2892 Signed-off-by: Mike Frysinger Signed-off-by: Bryan Wu --- drivers/spi/spi_bfin5xx.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'drivers') diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c index a2d4884752e..48587c27050 100644 --- a/drivers/spi/spi_bfin5xx.c +++ b/drivers/spi/spi_bfin5xx.c @@ -582,14 +582,19 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id) dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n"); clear_dma_irqstat(CH_SPI); + /* Wait for DMA to complete */ + while (get_dma_curr_irqstat(CH_SPI) & DMA_RUN) + continue; + /* - * wait for the last transaction shifted out. yes, these two - * while loops are supposed to be the same (see the HRM). + * wait for the last transaction shifted out. HRM states: + * at this point there may still be data in the SPI DMA FIFO waiting + * to be transmitted ... software needs to poll TXS in the SPI_STAT + * register until it goes low for 2 successive reads */ if (drv_data->tx != NULL) { - while (bfin_read_SPI_STAT() & TXS) - continue; - while (bfin_read_SPI_STAT() & TXS) + while ((bfin_read_SPI_STAT() & TXS) || + (bfin_read_SPI_STAT() & TXS)) continue; } -- cgit v1.2.3 From c5760abde715dcd9ead66769e45d1896332e9d9c Mon Sep 17 00:00:00 2001 From: Jean-Christian de Rivaz Date: Mon, 11 Jun 2007 17:44:14 +0800 Subject: Blackfin SMC91X ethernet supporting driver: SMC91C111 LEDs are note drived in the kernel like in uboot Signed-off-by: Jean-Christian de Rivaz Signed-off-by: Bryan Wu --- drivers/net/smc91x.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers') diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h index 506bffcbc6d..f8429449dc1 100644 --- a/drivers/net/smc91x.h +++ b/drivers/net/smc91x.h @@ -58,6 +58,8 @@ #elif defined(CONFIG_BFIN) #define SMC_IRQ_FLAGS IRQF_TRIGGER_HIGH +#define RPC_LSA_DEFAULT RPC_LED_100_10 +#define RPC_LSB_DEFAULT RPC_LED_TX_RX # if defined (CONFIG_BFIN561_EZKIT) #define SMC_CAN_USE_8BIT 0 -- cgit v1.2.3