Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

serial: ifx6x60: ifx_spi_write don't need to do mrdy_assert when fifo is not empty

This patch check whether the fifo lenth is empty before writing new data to fifo.If condition
is true,ifx_spi_write need to trigger one mrdy_assert. If condition is false,the mrdy_assert
will be trigger by the next ifx_spi_io.

Cc: Bi Chao <chao.bi@intel.com>
Signed-off-by: Chen Jun <jun.d.chen@intel.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Jun Chen and committed by
Greg Kroah-Hartman
e8823f1c 1b2f8a95

+10 -3
+10 -3
drivers/tty/serial/ifx6x60.c
··· 508 508 { 509 509 struct ifx_spi_device *ifx_dev = tty->driver_data; 510 510 unsigned char *tmp_buf = (unsigned char *)buf; 511 - int tx_count = kfifo_in_locked(&ifx_dev->tx_fifo, tmp_buf, count, 512 - &ifx_dev->fifo_lock); 513 - mrdy_assert(ifx_dev); 511 + unsigned long flags; 512 + bool is_fifo_empty; 513 + 514 + spin_lock_irqsave(&ifx_dev->fifo_lock, flags); 515 + is_fifo_empty = kfifo_is_empty(&ifx_dev->tx_fifo); 516 + int tx_count = kfifo_in(&ifx_dev->tx_fifo, tmp_buf, count); 517 + spin_unlock_irqrestore(&ifx_dev->fifo_lock, flags); 518 + if (is_fifo_empty) 519 + mrdy_assert(ifx_dev); 520 + 514 521 return tx_count; 515 522 } 516 523