From ea08eeccae9297f7aabd2ef7f0c2517ac4549acc Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 20 Feb 2024 01:18:26 +0000
Subject: [PATCH] write in 30M

---
 kernel/drivers/spi/spi-rockchip-test.c |   75 ++++++++-----------------------------
 1 files changed, 16 insertions(+), 59 deletions(-)

diff --git a/kernel/drivers/spi/spi-rockchip-test.c b/kernel/drivers/spi/spi-rockchip-test.c
index d97a5c4..f60c721 100644
--- a/kernel/drivers/spi/spi-rockchip-test.c
+++ b/kernel/drivers/spi/spi-rockchip-test.c
@@ -7,33 +7,6 @@
  * GNU General Public License for more details.
  */
 
-/* dts config
-&spi0 {
-	status = "okay";
-	max-freq = <48000000>;   //spi internal clk, don't modify
-	//dma-names = "tx", "rx";   //enable dma
-	pinctrl-names = "default";  //pinctrl according to you board
-	pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0 &spi0_cs1>;
-	spi_test@00 {
-		compatible = "rockchip,spi_test_bus0_cs0";
-		reg = <0>;   //chip select  0:cs0  1:cs1
-		id = <0>;
-		spi-max-frequency = <24000000>;   //spi output clock
-		//spi-cpha;      not support
-		//spi-cpol; 	//if the property is here it is 1:clk is high, else 0:clk is low  when idle
-	};
-
-	spi_test@01 {
-		compatible = "rockchip,spi_test_bus0_cs1";
-		reg = <1>;
-		id = <1>;
-		spi-max-frequency = <24000000>;
-		spi-cpha;
-		spi-cpol;
-	};
-};
-*/
-
 /* how to test spi
 * echo write 0 10 255 > /dev/spi_misc_test
 * echo write 0 10 255 init.rc > /dev/spi_misc_test
@@ -50,7 +23,6 @@
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 #include <linux/clk.h>
-#include <linux/fs.h>
 #include <linux/dma-mapping.h>
 #include <linux/dmaengine.h>
 #include <linux/platform_device.h>
@@ -65,7 +37,7 @@
 #include <linux/uaccess.h>
 #include <linux/syscalls.h>
 
-#define MAX_SPI_DEV_NUM 8
+#define MAX_SPI_DEV_NUM 10
 #define SPI_MAX_SPEED_HZ	12000000
 
 struct spi_test_data {
@@ -138,8 +110,8 @@
 	return ret;
 }
 
-int spi_write_then_read_slt(int id, const void *txbuf, unsigned n_tx,
-		void *rxbuf, unsigned n_rx)
+int spi_write_then_read_slt(int id, const void *txbuf, unsigned int n_tx,
+		void *rxbuf, unsigned int n_rx)
 {
 	int ret = -1;
 	struct spi_device *spi = NULL;
@@ -233,17 +205,9 @@
 		}
 		spi->max_speed_hz = val;
 	} else if (!strcmp(cmd, "write")) {
-		char name[64];
-		int fd;
-		mm_segment_t old_fs = get_fs();
-
 		sscanf(argv[0], "%d", &id);
 		sscanf(argv[1], "%d", &times);
 		sscanf(argv[2], "%d", &size);
-		if (argc > 3) {
-			sscanf(argv[3], "%s", name);
-			set_fs(KERNEL_DS);
-		}
 
 		txbuf = kzalloc(size, GFP_KERNEL);
 		if (!txbuf) {
@@ -251,19 +215,8 @@
 			return n;
 		}
 
-		if (argc > 3) {
-			fd = ksys_open(name, O_RDONLY, 0);
-			if (fd < 0) {
-				printk("open %s fail\n", name);
-			} else {
-				ksys_read(fd, (char __user *)txbuf, size);
-				ksys_close(fd);
-			}
-			set_fs(old_fs);
-		} else {
-			for (i = 0; i < size; i++)
-				txbuf[i] = i % 256;
-		}
+		for (i = 0; i < size; i++)
+			txbuf[i] = i % 256;
 
 		start_time = ktime_get();
 		for (i = 0; i < times; i++)
@@ -348,14 +301,21 @@
 		kfree(txbuf);
 		kfree(rxbuf);
 	} else if (!strcmp(cmd, "config")) {
-		int width;
+		int width, mode;
 
-		sscanf(argv[0], "%d", &width);
+		sscanf(argv[0], "%d", &id);
+		sscanf(argv[1], "%d", &width);
+		sscanf(argv[2], "mode=0x%x", &mode);
 
 		if (width == 16)
 			bit_per_word = 16;
 		else
 			bit_per_word = 8;
+
+		if (mode) {
+			g_spi_test_data[id]->spi->mode = mode;
+			spi_setup(g_spi_test_data[id]->spi);
+		}
 	} else {
 		printk("echo id number size > /dev/spi_misc_test\n");
 		printk("echo write 0 10 255 > /dev/spi_misc_test\n");
@@ -363,7 +323,7 @@
 		printk("echo read 0 10 255 > /dev/spi_misc_test\n");
 		printk("echo loop 0 10 255 > /dev/spi_misc_test\n");
 		printk("echo setspeed 0 1000000 > /dev/spi_misc_test\n");
-		printk("echo config 8 > /dev/spi_misc_test\n");
+		printk("echo config 0 8 mode=0xb > /dev/spi_misc_test\n");
 	}
 
 	return n;
@@ -388,9 +348,6 @@
 	if (!spi)
 		return -ENOMEM;
 
-	if (!spi->dev.of_node)
-		return -ENOMEM;
-
 	spi_test_data = (struct spi_test_data *)kzalloc(sizeof(struct spi_test_data), GFP_KERNEL);
 	if (!spi_test_data) {
 		dev_err(&spi->dev, "ERR: no memory for spi_test_data\n");
@@ -407,7 +364,7 @@
 		return -1;
 	}
 
-	if (of_property_read_u32(spi->dev.of_node, "id", &id)) {
+	if (device_property_read_u32(&spi->dev, "id", &id)) {
 		dev_warn(&spi->dev, "fail to get id, default set 0\n");
 		id = 0;
 	}

--
Gitblit v1.6.2