全志 修改485转CAN串口回显 Patch
生活随笔
收集整理的這篇文章主要介紹了
全志 修改485转CAN串口回显 Patch
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題起因:平臺:全志A40I 系統(tǒng):Android6.0 IC:TJ1050 客戶:XX項目主板 發(fā)送指令給 XX設備, 會收到設備回復 ,同時會收到回顯的信息。主板測試 把串口和TJA1050這個芯片斷開,就不會回顯了。cpu ttl出來沒回顯,那說明cpu uart配置ok。
發(fā)送是直接到canl和canh,canl和canh經過運算器到ttl的rx,rx有數據就顯示。怎么才能讓普通串口使用can的物理層,不出現回顯。
uart不回顯,接上這個can芯片回顯,需要通過軟件修改不回顯。
diff --git a/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.c b/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.c
index 7ea5a16..0db1231 100755
--- a/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.c
+++ b/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.c
@@ -39,7 +39,7 @@#include <linux/of.h>#include <linux/of_irq.h>#include <linux/of_address.h>
-
+#include <linux/atomic.h>#include "sunxi-uart.h"//#define CONFIG_SW_UART_DUMP_DATA
@@ -140,6 +140,7 @@ static unsigned int sw_uart_handle_rx(struct sw_uart_port *sw_uport, unsigned inchar flag;do {
+ if (likely(lsr & SUNXI_UART_LSR_DR)) {ch = serial_in(&sw_uport->port, SUNXI_UART_RBR);#ifdef CONFIG_SW_UART_DUMP_DATA
@@ -191,11 +192,18 @@ static unsigned int sw_uart_handle_rx(struct sw_uart_port *sw_uport, unsigned in}if (uart_handle_sysrq_char(&sw_uport->port, ch))goto ignore_char;
+ #ifdef CONFIG_SW_UART_TX_DATA
+ //printk("kevin rx=%c\n",ch);
+ if (atomic_read(&sw_uport->atomic_tx) == 1) {
+ goto ignore_char;
+ }
+ #endif
+ uart_insert_char(&sw_uport->port, lsr, SUNXI_UART_LSR_OE, ch, flag);ignore_char:lsr = serial_in(&sw_uport->port, SUNXI_UART_LSR);} while ((lsr & (SUNXI_UART_LSR_DR | SUNXI_UART_LSR_BI)) && (max_count-- > 0));
-
+ SERIAL_DUMP(sw_uport, "Rx");spin_unlock(&sw_uport->port.lock);tty_flip_buffer_push(&sw_uport->port.state->port);
@@ -246,10 +254,15 @@ static void sw_uart_handle_tx(struct sw_uart_port *sw_uport)return;}count = sw_uport->port.fifosize / 2;
+ #ifdef CONFIG_SW_UART_TX_DATA
+ if (sw_uport->port.line == UART_TX_DATA_INDEX) {
+ atomic_set(&sw_uport->atomic_tx,1);
+ }
+ #endifdo {
-#ifdef CONFIG_SW_UART_DUMP_DATA
- sw_uport->dump_buff[sw_uport->dump_len++] = xmit->buf[xmit->tail];
-#endif
+ #ifdef CONFIG_SW_UART_DUMP_DATA
+ sw_uport->dump_buff[sw_uport->dump_len++] = xmit->buf[xmit->tail];
+ #endifserial_out(&sw_uport->port, xmit->buf[xmit->tail], SUNXI_UART_THR);xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);sw_uport->port.icount.tx++;
@@ -288,7 +301,9 @@ static unsigned int sw_uart_modem_status(struct sw_uart_port *sw_uport)wake_up_interruptible(&sw_uport->port.state->port.delta_msr_wait);}
-
+ #ifdef CONFIG_SW_UART_TX_DATA
+ atomic_set(&sw_uport->atomic_tx,0);
+ #endifSERIAL_DBG("modem status: %x\n", status);return status;}
@@ -1385,6 +1400,9 @@ static int sw_uart_request_resource(struct sw_uart_port* sw_uport, struct sw_uar}#endif+ #ifdef CONFIG_SW_UART_TX_DATA
+ atomic_set(&sw_uport->atomic_tx,0);
+ #endifreturn 0;}@@ -1398,6 +1416,9 @@ static int sw_uart_release_resource(struct sw_uart_port* sw_uport, struct sw_uarsw_uport->dump_len = 0;#endif+ #ifdef CONFIG_SW_UART_TX_DATA
+ atomic_set(&sw_uport->atomic_tx,0);
+ #endifclk_disable_unprepare(sw_uport->mclk);clk_put(sw_uport->mclk);@@ -1496,6 +1517,9 @@ static int sw_uart_probe(struct platform_device *pdev)if (of_property_read_bool(np, "linux,rs485-enabled-at-boot-time"))sw_uport->rs485conf.flags |= SER_RS485_ENABLED;+ #ifdef CONFIG_SW_UART_TX_DATA
+ atomic_set(&sw_uport->atomic_tx,0);
+ #endifpdata->used = 1;port->iotype = UPIO_MEM;port->type = PORT_SUNXI;
diff --git a/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.h b/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.h
index 19d6595..57ccc17 100755
--- a/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.h
+++ b/lichee/linux-3.10/drivers/tty/serial/sunxi-uart.h
@@ -20,6 +20,9 @@#include <linux/regulator/consumer.h>+#define CONFIG_SW_UART_TX_DATA
+#define UART_TX_DATA_INDEX 4
+struct sw_uart_pdata {unsigned int used;unsigned int io_num;
@@ -48,6 +51,10 @@ struct sw_uart_port {#define MAX_DUMP_SIZE 1024unsigned int dump_len;char* dump_buff;
+
+ #ifdef CONFIG_SW_UART_TX_DATA
+ atomic_t atomic_tx;
+ #endifstruct proc_dir_entry *proc_root;struct proc_dir_entry *proc_info;
總結
以上是生活随笔為你收集整理的全志 修改485转CAN串口回显 Patch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全志 系统时间同步到RTC Patch
- 下一篇: MTK OEM Unlock